Tutorial: Building GalaxyEggbertCNA

From a fresh clone to a running window on Linux.

Step 1 — Clone the Repository and Its Siblings

cd ~/development
git clone https://github.com/openeggbert/galaxy-eggbert.git
git clone <url> cna
git clone <url> easy-3d
git clone <url> mobile-eggbert
cd galaxy-eggbert

By default, CMake expects cna, easy-3d, and mobile-eggbert as siblings of galaxy-eggbert. Use -DCNA_HOME=, -DEASY3D_HOME=, -DMOBILE_EGGBERT_HOME= if yours are elsewhere.

Step 2 — Configure

cmake -S . -B build-cna \
  -DGALAXY_EGGBERT_BUILD_CNA=ON \
  -DGALAXY_EGGBERT_BUILD_SIMPLE3D=OFF \
  -DCMAKE_BUILD_TYPE=Debug
Configure order matters CNA must configure before easy-3d — Easy3D auto-detects a parent CNA target and links against it instead of building its own copy.

Step 3 — Build

cmake --build build-cna --target GalaxyEggbertCNA -j2

This also builds and runs the post-build asset-copy step (mobile-eggbert's Content/ + worlds/, plus this repo's own worlds3d/).

Step 4 — Run

cd build-cna
./GalaxyEggbertCNA
Run from the build directory The loader uses relative paths (worlds3d/world001.vwr, Content/icons/object-m.png) — you must run the binary from where the asset copy placed those files.

Expected: a window titled "Galaxy Eggbert (CNA)" showing a sky-blue-cleared 3D view of textured terrain (a ground floor, staircase, platform, walled room, and pillars). Arrow keys + Space move an invisible collision point around; there is nothing visible to represent it.

Step 5 — Run the Worlds Data Model Tests

cmake -S . -B build-cna -DBUILD_TESTING=ON
cmake --build build-cna --target GalaxyEggbertWorldsTests
ctest --test-dir build-cna --output-on-failure

Troubleshooting

ProblemFix
CMake can't find CNA/Easy3D/mobile-eggbertPass -DCNA_HOME=, -DEASY3D_HOME=, -DMOBILE_EGGBERT_HOME= explicitly
Duplicate-symbol link errorsReconfigure from a clean build directory — usually caused by configuring Easy3D before CNA
Binary can't find worlds3d/world001.vwrRun from inside build-cna/, not the repo root
No visible terrainCheck Content/icons/object-m.png was copied next to the binary