Compare commits

..

5 commits

Author SHA1 Message Date
Jakub
c0f8635b0b Document .dir-locals.el and deps.lock 2026-04-26 16:09:06 +08:00
Jakub
a6fa07ff26 Use deps-lock for dependencies 2026-04-26 16:08:09 +08:00
Jakub
d82d387f27 Fix the build command 2026-04-26 15:55:42 +08:00
Jakub
0a21a14033 Devcontainer and collab documentation 2026-04-26 15:55:05 +08:00
Jakub
9be1526cb1 Create devcontainer for development with X11 forwarding 2026-04-26 15:27:24 +08:00
6 changed files with 75 additions and 14 deletions

22
.devcontainer/Dockerfile Normal file
View file

@ -0,0 +1,22 @@
FROM debian:trixie
RUN apt update
RUN apt upgrade
ENV DISPLAY=:0
# Install chicken
RUN apt install -y build-essential git
RUN apt install -y chicken-bin
# Install chicken tools
RUN chicken-install beaker csm
# Install raylib
RUN apt install -y libasound2-dev libx11-dev libxrandr-dev libxi-dev libgl1-mesa-dev libglu1-mesa-dev libxcursor-dev libxinerama-dev libwayland-dev libxkbcommon-dev
RUN git clone --depth 1 https://github.com/raysan5/raylib.git raylib && \
cd raylib/src/ && \
make PLATFORM=PLATFORM_DESKTOP && \
make install
# Install egg dependencies
RUN chicken-install -from-list deps.lock

View file

@ -0,0 +1,12 @@
{
"name": "Imugi Dev Container",
"build": {
"dockerfile": "Dockerfile"
},
"runArgs": [
"--net", "host",
"-e", "DISPLAY=:0",
"-e", "XAUTHORITY=/tmp/.Xauthority",
"-v", "${localEnv:HOME}/.Xauthority:/tmp/.Xauthority"
]
}

26
COLLABORATION.org Normal file
View file

@ -0,0 +1,26 @@
#+title: Collaboration
Imugi can be easily built without any local chicken scheme installation by using the devcontainer spec included in this repository.
* Using the Devcontainers CLI
First, run ~npm install -g @devcontainers/cli~ to install the devcontainers CLI tool.
This requires a working Docker installation, the steps to which can be found [[https://docs.docker.com/engine/install/][here]]. Also assign your user to the ~docker~ group to avoid having to use ~sudo~ with docker and devcontainer commands.
Once both of the above are installed, the devcontainer can be started with ~devcontainer up --workspace-folder .~ in the repository root. This will build a Debian Trixie container including all Chicken dependencies, and also build Raylib as a static library. We prefer to build with static linking in order to make distribution less annoying.
Once the devcontainer is running, enter it with ~devcontainer exec --workspace-folder . bash~. This will put you at the repository root.
* Dependencies
The ~deps.lock~ file contains the versions of eggs used in this repository. They can be installed with ~chicken-install -from-list deps.lock~.
* Collaborating with Emacs
The ~.dir-locals.el~ file automatically sets the Geiser Scheme implementation to Chicken, for any Scheme source file in this directory.
* Running Tests & Samples
From the ~build~ directory, run ~csm -program <module> ..~ to build a particular module, the ~./<module>~ to run it.
Any module defined in the ~samples~ or ~test~ directory can be run like this, either to show an example game or to run tests for a particular engine module.
If you are running the devcontainer on an X11 Linux host, running the compiled module should forward the window to your hosts X11 display. YMMV for Wayland and non-Linux hosts.

View file

@ -184,16 +184,3 @@ Functions for evaluating the render queues. ~evaluate-render-queue~ evaluates a
(create-window process: (next-frame) close-predicate: (window-should-close?)) (create-window process: (next-frame) close-predicate: (window-should-close?))
#+end_src #+end_src
~create-window~ creates a window using the window parameters described above, sets the target frames per second, then enters a loop which runs the ~process:~ function (~next-frame~ by default) on each frame, unless ~close-predicate:~ (Raylib's ~window-should-close~ function by default) returns true, in which case the window is closed. ~create-window~ creates a window using the window parameters described above, sets the target frames per second, then enters a loop which runs the ~process:~ function (~next-frame~ by default) on each frame, unless ~close-predicate:~ (Raylib's ~window-should-close~ function by default) returns true, in which case the window is closed.
* Dependencies
The following Chicken dependencies are required:
- raylib
- SRFI-99
- SRFI-113
- SRFI-69
- csm
- SRFI-78
* Running
From the ~build~ directory, run ~csm -program test.engine .. && ./test.engine~ to run engine tests.

View file

@ -1 +1 @@
-static -L /usr/local/lib64/libraylib.a -static -L /usr/local/lib/libraylib.a -L -lX11 -L -lXrandr -L -lXi -L -lXcursor -L -lXinerama -L -lXext -L -lGL -L -lm -L -lpthread -L -ldl -L -lrt

14
deps.lock Normal file
View file

@ -0,0 +1,14 @@
("raylib" "1.2.0")
("srfi-1" "0.5.1")
("r7rs" "1.0.12")
("srfi-69" "0.4.3")
("matchable" "1.2")
("srfi-113" "2.0.0")
("foreigners" "1.5")
("srfi-99" "1.4.5")
("srfi-14" "0.2.1")
("miscmacros" "1.0")
("srfi-78" "0.5")
("srfi-42" "1.76")
("srfi-128" "0.11")
("srfi-13" "0.3.4")