fredakilla / spkgen

Particle editor using flow graph nodes for the spark particle engine
168 stars 42 forks source link

Improve build-system for ease of use #4

Open JayFoxRox opened 3 years ago

JayFoxRox commented 3 years ago

The build-system should be refactored. Ideally to CMake (in my opinion), or at least a helper script to do the steps from the README.

The steps are just too annoying for a small utility like this. In particular, this step: "3. Set URHO3D_HOME and URHOX_HOME variable path in QtCreator"

Another option would be to keep the complicated build-system, but provide a webtool. Urho3D already has demos for the web using emscripten. There's also Qt for wasm, so deploying this way might be a good alternative to let people play with SPARK and spkgen.


Lastly, this also partially affects https://github.com/fredakilla/SPARK - I think the changes should be upstreamed, or the library should be made independent for exposure. It's the only easy-to-use version of SPARK that I found (installing system-wide is a critical feature to me). SPARK seems to be a cool library, but the upstream build-system and lack of documentation probably hurt its usability; the confusing ecosystem (there's still a sourceforge page for it, which looks more "official") and tooling should be improved.

JayFoxRox commented 3 years ago

I created an install script for Linux for myself, which deals with many of these weird assumptions and necessary patches. It's barely tested and I kept touching it over time, so it might not work 100% out of the box.

Here is the script; consider this spkgen install script to be licensed under CC0 / public-domain:

#!/usr/bin/env bash

set -e
set -u

MAKEOPTS=-j4

function git() {
  /usr/bin/git "$@" || true
}

function mkdir() {
  /usr/bin/mkdir "$@" || true
}

git clone https://github.com/fredakilla/spkgen --depth=1
pushd spkgen

pushd 3rdparty

# Bundle minimalistic Urho3D dependency
git clone https://github.com/urho3d/Urho3D --depth=1
pushd Urho3D
mkdir BUILD
cd BUILD
# We need to disable wayland, to avoid a problem with SDL and gcc 10 or above
# Ideally we'd be using the system SDL (.. also GLEW, Freetype, Bullet, webp, ...)
cmake .. \
  -DVIDEO_WAYLAND=OFF \
  -DURHO3D_ANGELSCRIPT=OFF \
  -DURHO3D_LUA=OFF \
  -DURHO3D_NETWORK=OFF \
  -DURHO3D_DATABASE_ODBC=OFF \
  -DURHO3D_DATABASE_SQLITE=OFF \
  -DURHO3D_IK=OFF \
  -DURHO3D_NAVIGATION=OFF \
  -DURHO3D_URHO2D=OFF \
  -DURHO3D_PHYSICS=OFF \
  -DURHO3D_TRACY_PROFILING=OFF \
  -DURHO3D_D3D11=OFF \
  -DURHO3D_CLANG_TOOLS=OFF \
  -DURHO3D_LUAJIT=OFF \
  -DURHO3D_LUAJIT_AMALG=OFF \
  -DURHO3D_PCH=OFF \
  -DURHO3D_PLAYER=OFF \
  -DURHO3D_PROFILING=OFF \
  -DURHO3D_SAMPLES=OFF \
  -DURHO3D_TOOLS=OFF
make $MAKEOPTS
export URHO3D_HOME=$(pwd)
popd

# Bundle Urhox dependency
git clone https://github.com/fredakilla/Urhox.git --depth=1
pushd Urhox

# Fix bug where SystemUI redeclares a function from a header
sed -i 's/ClosestPowerOfTwo/ClosestPowerOfTwo_/g' Sources/Urhox/SystemUI/SystemUI.cpp

# Replace bundled SPARK with latest spark, to avoid compilation errors in Urhox
pushd Sources/ThirdParty
mv Spark Spark_old || true
git clone https://github.com/fredakilla/SPARK.git --depth=1 Spark

# Mimic the old directory structure
ln -s $(pwd)/Spark/spark/include Spark/include || true

popd

# Build Urhox now
mkdir output
cd output
cmake .. \
  -DCMAKE_CXX_FLAGS=-fcommon \
  -DURHO3D_HOME="$URHO3D_HOME"
make $MAKEOPTS
export URHOX_HOME=$(pwd)
popd

# Manually "initialize" our submodule (we'll use upstream, which works better than the intended one)
git clone https://github.com/paceholder/nodeeditor.git --depth=1
pushd nodeeditor
mkdir BUILD
cd BUILD
cmake .. \
  -DBUILD_TESTING=OFF \
  -DBUILD_EXAMPLES=OFF
make $MAKEOPTS
popd

popd

# Fix a bug where paths are hardcoded
sed -i 's/^URHO3D_HOME/URHO3D_HOME_/g' Spkgen.pro
sed -i 's/^URHOX_HOME/URHOX_HOME_/g' Spkgen.pro

# Fix a bug where some source file is missing
touch src/benchmark.h

# Build the actual project
qmake Spkgen.pro URHO3D_HOME="$URHO3D_HOME" URHOX_HOME="$URHOX_HOME" 
make $MAKEOPTS

# Copy the nodeeditor lib
mkdir -p bin/lib
cp ./3rdparty/nodeeditor/BUILD/lib/libnodes.so bin/lib/

# Copy the Urho3D data folders to Spkgen
cp -R $URHO3D_HOME/../bin/CoreData bin/
cp -R $URHO3D_HOME/../bin/Data bin/

# Set up a script to run Spkgen
echo "#!/usr/bin/env bash" > bin/run.sh
echo "SCRIPT_DIR=\"\$( cd \"\$( dirname \"\${BASH_SOURCE[0]}\" )\" &> /dev/null && pwd )\"" >> bin/run.sh
echo "LD_LIBRARY_PATH=\${SCRIPT_DIR}/lib \${SCRIPT_DIR}/Spkgen" >> bin/run.sh
chmod +x bin/run.sh

popd

(This does not workaround #5 yet though)