diff --git a/README.md b/README.md index 35225ed..e799ecf 100644 --- a/README.md +++ b/README.md @@ -2,33 +2,31 @@ ![Lumenarium Banner](./docs/images/splash.png) ## Build Lumenarium -Building Lumenarium requires having MSVC installed (sorry, Windows only for now!). -1. clone the repo onto your computer -2. Run the appropriate build batch file - - for Windows: use `build\build_app_msvc_win32_debug.bat` - - other platforms coming soon -3. Build scripts will output executables into the app_run_tree directory, by platform +Build Dependencies: +- clang +- bash + - Note for Windows Users: You can still run bash scripts using git-bash (my recommendation) or WSL -## Run Lumenarium -Windows - Debug -1. Run `app_run_tree\win32_msvc\debug\win32_foldhaus.exe` +To build Lumenarium: +1. Clone the repo onto your computer +2. Run `build\build_.sh` with the appropriate platform, architecture, and release mode flags + - Example: `build\build_.sh debug osx arm64` + - You can see the full list of supported flags by running `build\build_.sh` with no arguments +3. Build scripts will output executables into the run_tree directory. + - The above example will output the following executable: `run_tree\osx\arm64\debug\lumenarium` -If you want to run in headless mode: -1. Run `app_run_tree\win32_msvc\debug\win32_foldhaus.exe -headless` - -## Debug Lumenarium -### Windows -Building in debug mode outputs pdb file info that can be read by Visual Studio or RemedyBG (preferred debugging solution, but ymmv). You can just open the exe in either application and it'll find the pdb file in the same directory +This repository features a .vscode directory which has been set up with a build task and launch.json to work out of the box. +- *Note: I have not been able to test the configuration on Windows or Linux. Feel free to open a PR if you find something is wrong with the vscode setup* ## What Is Lumenarium? Lumenarium is our custom build light and motion control software. It allows us to design light and motion patterns for our sculptures, visualize the output long before the sculpture is built, and iterate in real time to achieve the best visual results quickly. -[Foldhaus can be found here.](https://www.foldhaus.com) - -![Image of Lumenarium](./docs/images/hero-0.PNG) +Lumenarium has been used in several sculptures in museums, permanent installations, and at Burning Man. Lumenarium was developed in collaboration with [Foldhaus](https://www.foldhaus.com). The current iteration of Lumenarium was developed while working on Incenter for Burning Man '22. ## Features +*NOTE: These were features from an earlier version of Lumenarium and are still being ported over to the v2 codebase* +![Image of Lumenarium](./docs/images/hero-0.PNG) The following features are under active development for integration in Lumenarium * [Sculpture File Format](#sculpture-file-format) * [DMX Output](#dmx-output) diff --git a/build/build.sh b/build/build.sh index 85c426f..8891372 100755 --- a/build/build.sh +++ b/build/build.sh @@ -1,5 +1,366 @@ +#!/bin/bash + +# Ensure an error makes the script bail set -e +# -------------------------------------------- +# Usage + +print_usage () { + echo + echo Build Command Syntax: + echo " $0 [mode] [platform] [arch]" + echo + echo "Release Mode Options:" + echo " debug" + echo " prod" + echo + echo "Platform Options:" + echo " win32" + echo " osx" + echo " wasm" + echo " raspi" + echo + echo "Arch Options: (architecture)" + echo " intel (valid with Platform Win32 and OSX) (default)" + echo " arm64 (only valid for Platform OSX)" +} + +# -------------------------------------------- +# Arguments +MODE=$1 +PLATFORM=$2 +ARCH=$3 +PACKAGE=$4 + +if [ "${MODE}" == "" ] | [ "${PLATFORM}" == "" ] +then + print_usage + exit 0 +fi + +# Default to Intel architecture if none provided +if [ "${ARCH}" == "" ] +then + ARCH="intel" +fi + +if [ "${ARCH}" != "intel" ] && [ "${ARCH}" != "arm64" ] +then + echo "Uknown target architecture: ${ARCH}" + print_usage + exit 0 + +fi + +# -------------------------------------------- +# Utilities + +pushdir () { + command pushd "$@" > /dev/null +} + +popdir () { + command popd "$@" > /dev/null +} + +add_flag () { + local -n ref=$1 + ref="$ref $2" +} + +# -------------------------------------------- +# Getting Project Path +# +# Project is stored in PROJECT_PATH + SCRIPT_REL_DIR=$(dirname "${BASH_SOURCE[0]}") -$SCRIPT_REL_DIR/build_.sh debug osx arm64 -# $SCRIPT_REL_DIR/build_.sh debug wasm intel +pushdir $SCRIPT_REL_DIR +pushdir .. +PROJECT_PATH=$(pwd) +popdir +popdir + +# -------------------------------------------- +# Platform/Mode Specific Variables + +# Compiler Selection + +Compiler_win32="cl" +Compiler_osx="clang" +Compiler_raspi="clang" +WasiSdk="/c/drive/apps/wasi-sdk" +Compiler_wasm="$WasiSdk/bin/clang++" +Compiler_linux="clang++" + +# Platform Entry Points + +PlatformEntry_win32="src/platform/win32/lumenarium_first_win32.cpp" +PlatformEntry_osx="src/platform/osx/lumenarium_first_osx.c" +PlatformEntry_wasm="src/platform/wasm/lumenarium_first_wasm.cpp" +PlatformEntry_linux="src/platform/linux/lumenarium_first_linux.cpp" +PlatformEntry_raspi="src/platform/raspi/lumenarium_first_raspi.c" + +# Intermediate Outputs + +CompilerOutput_win32="lumenarium.o" +CompilerOutput_osx="lumenarium" +CompilerOutput_wasm="lumenarium.wasm" +CompilerOutput_linux="" +CompilerOutput_raspi="lumenarium" + +# Executables + +LinkerOutput_win32="lumenarium.exe" +LinkerOutput_osx="lumenarium" +LinkerOutput_wasm="lumenarium.wasm" +LinkerOutput_linux="" +LinkerOutput_raspi="lumenarium" + +# Wasm Sys Root +WasmSysRoot="${PROJECT_PATH}/src/platform/wasm/sysroot/" + +# Compiler Flags + +CompilerFlags_win32="-nologo" +CompilerFlags_win32+=" -FC" # display errors with full path +CompilerFlags_win32+=" -WX" # treat warnings as errors +CompilerFlags_win32+=" -W4" # output warning level +CompilerFlags_win32+=" -Z7" # generate C compatible debug info +# CompilerFlags_win32+="-Oi" # generate intrinsic functions +# CompilerFlags_win32+="-MTd" # create a debug multithreaded exe w/ Libcmtd.lib +# CompilerFlags_win32+="-fp:fast" # fast floating point model +CompilerFlags_win32+=" -wd4505" # +CompilerFlags_win32+=" -wd4100" # +CompilerFlags_win32+=" -wd4189" # +CompilerFlags_win32+=" -wd4702" # +CompilerFlags_win32+=" -wd4996" # _CRT_SECURE_NO_WARNINGS + +CompilerFlags_osx="" + +CompilerFlags_wasm="" +CompilerFlags_wasm+=" -Wno-writable-strings" # +CompilerFlags_wasm+=" --target=wasm32" # +CompilerFlags_wasm+=" -nostdlib" # +CompilerFlags_wasm+=" -Wl,--no-entry" # +CompilerFlags_wasm+=" -Wl,--allow-undefined" # +CompilerFlags_wasm+=" -Wl,--export-all" # + +CompilerFlags_linux=" -pthread" + +CompilerFlags_raspi=" -pthread" # "--target=arm-rpi-linux-gnueabihf" # "--target=arm-linux-gnueabihf" #target +CompilerFlags_raspi+=" -lm" # link with local system math libraries + +CompilerFlags_DEBUG_win32="" +CompilerFlags_DEBUG_win32+=" -Od" # +CompilerFlags_DEBUG_win32+=" -Zi" # +CompilerFlags_DEBUG_win32+=" -DDEBUG" # +# add_flag CompilerFlags_DEBUG_win32 "-DPRINT_ASSERTS" + +CompilerFlags_DEBUG="-O0" +CompilerFlags_DEBUG+=" -g" # +CompilerFlags_DEBUG+=" -DDEBUG" # +if [ "${PLATFORM}" != "raspi" ] +then + CompilerFlags_DEBUG+=" -fsanitize=address" #address sanitizer +fi + +CompilerFlags_PROD=" -O3" + +# Compiler flags that no matter what, we want to define +# for the most part these pass the build parameters into the executable +CompilerFlags_common=" -DPLATFORM_${PLATFORM}=1 -DMODE_${MODE}=1 -DARCH_${ARCH}=1" + +# Linker Flags + +LinkerFlags_win32=" -NOLOGO" +LinkerFlags_win32+=" -incremental:no" # +LinkerFlags_win32+=" -subsystem:windows" # +# add_flag LinkerFlags_win32 "-entry:WinMain" # +LinkerFlags_win32+=" -opt:ref" # eliminate functions that are never referenced + +LinkerFlags_osx="" + +LinkerFlags_wasm="--no-entry" +LinkerFlags_wasm+=" --export-dynamic" # +LinkerFlags_wasm+=" --unresolved-symbols=import-functions" # + +LinkerFlags_linux="" +LinkerFlags_raspi="-fuse-ld=lld" + +LinkerFlags_DEBUG="-debug" +LinkerFlags_PROD="" + +# Linker Libs + +LinkerLibs_win32="user32.lib kernel32.lib gdi32.lib opengl32.lib" +# winmm.lib gdi32.lib dsound.lib Ws2_32.lib Comdlg32.lib Winspool.lib" + +LinkerLibs_osx="-framework OpenGL -framework Cocoa -framework IOKit ${PROJECT_PATH}/src/libs/glfw_osx/lib-universal/libglfw3.a" +LinkerLibs_wasm="" +LinkerLibs_linux="" +LinkerLibs_raspi="" + +# -------------------------------------------- +# Varible Selection + +# Select Platform Variables + +if [ "${PLATFORM}" == "win32" ] +then + Compiler=$Compiler_win32 + PlatformEntry=$PlatformEntry_win32 + CompilerFlags=$CompilerFlags_win32 + CompilerOutput=$CompilerOutput_win32 + LinkerOutput=$LinkerOutput_win32 + LinkerFlags=$LinkerFlags_win32 + LinkerLibs=$LinkerLibs_win32 + +elif [ "${PLATFORM}" == "osx" ] +then + Compiler=$Compiler_osx + PlatformEntry=$PlatformEntry_osx + CompilerFlags=$CompilerFlags_osx + CompilerOutput=$CompilerOutput_osx + LinkerOutput=$LinkerOutput_osx + LinkerFlags=$LinkerFlags_osx + LinkerLibs=$LinkerLibs_osx + + if [ "${ARCH}" == "arm64" ] + then + CompilerFlags="${CompilerFlags} -arch arm64" + elif [ "${ARCH}" == "intel" ] + then + CompilerFlags="${CompilerFlags} -arch x86_64" + else + echo "ERROR: Unrecognized Arch: ${ARCH}" + exit 0 + fi + +elif [ "${PLATFORM}" == "wasm" ] +then + Compiler=$Compiler_wasm + PlatformEntry=$PlatformEntry_wasm + CompilerFlags=$CompilerFlags_wasm + CompilerOutput=$CompilerOutput_wasm + LinkerOutput=$LinkerOutput_wasm + LinkerFlags=$LinkerFlags_wasm + LinkerLibs=$LinkerLibs_wasm + +elif [ "${PLATFORM}" == "linux" ] +then + Compiler=$Compiler_linux + PlatformEntry=$PlatformEntry_linux + CompilerFlags=$CompilerFlags_linux + CompilerOutput=$CompilerOutput_linux + LinkerOutput=$LinkerOutput_linux + LinkerFlags=$LinkerFlags_linux + LinkerLibs=$LinkerLibs_linux + +elif [ "${PLATFORM}" == "raspi" ] +then + Compiler=$Compiler_raspi + PlatformEntry=$PlatformEntry_raspi + CompilerFlags=$CompilerFlags_raspi + CompilerOutput=$CompilerOutput_raspi + LinkerOutput=$LinkerOutput_raspi + LinkerFlags=$LinkerFlags_raspi + LinkerLibs=$LinkerLibs_raspi +else + echo "Attempting to build for an unknown platform: ${PLATFORM}" + print_usage + exit 0 + +fi + +# Select Release Mode Variables + +if [ "${MODE}" == "debug" ] +then + if [ $PLATFORM == "win32" ] + then + CompilerFlags="${CompilerFlags} ${CompilerFlags_DEBUG_win32}" + else + CompilerFlags="${CompilerFlags} ${CompilerFlags_DEBUG}" + fi + + LinkerFlags="${LinkerFlags} ${LinkerFlags_DEBUG}" + +elif [ "${MODE}" == "prod" ] +then + CompilerFlags="${CompilerFlags} ${CompilerFlags_PROD}" + LinkerFlags="${LinkerFlags} ${LinkerFlags_PROD}" + +else + echo "Attempting to build for an unknown release mode: ${MODE}" + print_usage + exit 0 + +fi + +# Common Flags +CompilerFlags="${CompilerFlags} ${CompilerFlags_common}" + +# -------------------------------------------- +# Build Path Construction +# +# This determines where the generated executable will +# be located. In general, it can be found at +# project_path/run_tree/platform/arch/release_mode/lumenarium.exe +# +# This section also ensures that the path requested actually exists + +BuildDir="${PROJECT_PATH}/run_tree/${PLATFORM}/${ARCH}/${MODE}" +EntryPath="${PROJECT_PATH}/${PlatformEntry}" + +# Exception for wasm, which doesn't care about cpu architecture +if [ $PLATFORM == "wasm" ] +then + BuildDir="${PROJECT_PATH}/run_tree/${PLATFORM}/${MODE}" + +fi + +# Make the build directory, +# "-p" flag makes it make the entire tree, and not emit errors if it +# exists. +mkdir -p "${BuildDir}" + +# -------------------------------------------- +# Compilation + +echo "Building To: ${BuildDir}/${LinkerOutput}" +echo +pushdir $BuildDir + +echo "Cleaning: ${CompilerOutput} and ${LinkerOutput}" +rm -rf ${CompilerOutput} ${LinkerOutput} + +echo "COMPILING..." +echo " COMPILE STRING: $Compiler -o $LinkerOutput $CompilerFlags $EntryPath $LinkerLibs" + +if [ $PLATFORM == "win32" ] +then + $Compiler \ + $CompilerFlags \ + $EntryPath \ + -link \ + $LinkerFlags \ + $LinkerLibs \ + -OUT:${LinkerOutput} + +elif [ $PLATFORM == "wasm" ] +then + $Compiler \ + $CompilerFlags \ + -o $LinkerOutput \ + $EntryPath + cp \ + "${PROJECT_PATH}/src/platform/wasm/lumenarium_wasm_imports.js" \ + ./lumenarium_wasm_imports.js +else + $Compiler -o $LinkerOutput $CompilerFlags $EntryPath $LinkerLibs +fi + +echo +echo "Finished..." +popdir diff --git a/build/build_.sh b/build/build_.sh deleted file mode 100755 index babe282..0000000 --- a/build/build_.sh +++ /dev/null @@ -1,378 +0,0 @@ -#!/bin/bash - -# Ensure an error makes the script bail -set -e - -# -------------------------------------------- -# Usage - -print_usage () { - echo - echo Build Command Syntax: - echo " $0 [mode] [platform] [arch]" - echo - echo "Release Mode Options:" - echo " debug" - echo " prod" - echo - echo "Platform Options:" - echo " win32" - echo " osx" - echo " wasm" - echo " raspi" - echo - echo "Arch Options: (architecture)" - echo " intel (valid with Platform Win32 and OSX) (default)" - echo " arm64 (only valid for Platform OSX)" -} - -# -------------------------------------------- -# Arguments -MODE=$1 -PLATFORM=$2 -ARCH=$3 -PACKAGE=$4 - -if [ "${MODE}" == "" ] | [ "${PLATFORM}" == "" ] -then - print_usage - exit 0 -fi - -# Default to Intel architecture if none provided -if [ "${ARCH}" == "" ] -then - ARCH="intel" -fi - -if [ "${ARCH}" != "intel" ] && [ "${ARCH}" != "arm64" ] -then - echo "Uknown target architecture: ${ARCH}" - print_usage - exit 0 - -fi - -# -------------------------------------------- -# Utilities - -pushdir () { - command pushd "$@" > /dev/null -} - -popdir () { - command popd "$@" > /dev/null -} - -add_flag () { - local -n ref=$1 - ref="$ref $2" -} - -# -------------------------------------------- -# Getting Project Path -# -# Project is stored in PROJECT_PATH - -SCRIPT_REL_DIR=$(dirname "${BASH_SOURCE[0]}") -pushdir $SCRIPT_REL_DIR -pushdir .. -PROJECT_PATH=$(pwd) -popdir -popdir - -# -------------------------------------------- -# Platform/Mode Specific Variables - -# Compiler Selection - -Compiler_win32="cl" -Compiler_osx="clang" -Compiler_raspi="clang" -WasiSdk="/c/drive/apps/wasi-sdk" -Compiler_wasm="$WasiSdk/bin/clang++" -Compiler_linux="clang++" - -# Platform Entry Points - -PlatformEntry_win32="src/platform/win32/lumenarium_first_win32.cpp" -PlatformEntry_osx="src/platform/osx/lumenarium_first_osx.c" -PlatformEntry_wasm="src/platform/wasm/lumenarium_first_wasm.cpp" -PlatformEntry_linux="src/platform/linux/lumenarium_first_linux.cpp" -PlatformEntry_raspi="src/platform/raspi/lumenarium_first_raspi.c" - -# Intermediate Outputs - -CompilerOutput_win32="lumenarium.o" -CompilerOutput_osx="lumenarium" -CompilerOutput_wasm="lumenarium.wasm" -CompilerOutput_linux="" -CompilerOutput_raspi="lumenarium" - -# Executables - -LinkerOutput_win32="lumenarium.exe" -LinkerOutput_osx="lumenarium" -LinkerOutput_wasm="lumenarium.wasm" -LinkerOutput_linux="" -LinkerOutput_raspi="lumenarium" - -# Wasm Sys Root -WasmSysRoot="${PROJECT_PATH}/src/platform/wasm/sysroot/" - -# Compiler Flags - -CompilerFlags_win32="-nologo" -CompilerFlags_win32+=" -FC" # display errors with full path -CompilerFlags_win32+=" -WX" # treat warnings as errors -CompilerFlags_win32+=" -W4" # output warning level -CompilerFlags_win32+=" -Z7" # generate C compatible debug info -# CompilerFlags_win32+="-Oi" # generate intrinsic functions -# CompilerFlags_win32+="-MTd" # create a debug multithreaded exe w/ Libcmtd.lib -# CompilerFlags_win32+="-fp:fast" # fast floating point model -CompilerFlags_win32+=" -wd4505" # -CompilerFlags_win32+=" -wd4100" # -CompilerFlags_win32+=" -wd4189" # -CompilerFlags_win32+=" -wd4702" # -CompilerFlags_win32+=" -wd4996" # _CRT_SECURE_NO_WARNINGS - -CompilerFlags_osx="" - -CompilerFlags_wasm="" -CompilerFlags_wasm+=" -Wno-writable-strings" # -CompilerFlags_wasm+=" --target=wasm32" # -CompilerFlags_wasm+=" -nostdlib" # -CompilerFlags_wasm+=" -Wl,--no-entry" # -CompilerFlags_wasm+=" -Wl,--allow-undefined" # -CompilerFlags_wasm+=" -Wl,--export-all" # - -CompilerFlags_linux=" -pthread" - -CompilerFlags_raspi=" -pthread" # "--target=arm-rpi-linux-gnueabihf" # "--target=arm-linux-gnueabihf" #target -CompilerFlags_raspi+=" -lm" # link with local system math libraries - - -CompilerFlags_DEBUG_win32="" -CompilerFlags_DEBUG_win32+=" -Od" # -CompilerFlags_DEBUG_win32+=" -Zi" # -CompilerFlags_DEBUG_win32+=" -DDEBUG" # -# add_flag CompilerFlags_DEBUG_win32 "-DPRINT_ASSERTS" - -CompilerFlags_DEBUG="-O0" -CompilerFlags_DEBUG+=" -g" # -CompilerFlags_DEBUG+=" -DDEBUG" # -if [ "${PLATFORM}" != "raspi" ] -then - CompilerFlags_DEBUG+=" -fsanitize=address" #address sanitizer -fi - -CompilerFlags_PROD=" -O3" - -# Compiler flags that no matter what, we want to define -# for the most part these pass the build parameters into the executable -CompilerFlags_common=" -DPLATFORM_${PLATFORM}=1 -DMODE_${MODE}=1 -DARCH_${ARCH}=1" - -# Linker Flags - -LinkerFlags_win32=" -NOLOGO" -LinkerFlags_win32+=" -incremental:no" # -LinkerFlags_win32+=" -subsystem:windows" # -# add_flag LinkerFlags_win32 "-entry:WinMain" # -LinkerFlags_win32+=" -opt:ref" # eliminate functions that are never referenced - -LinkerFlags_osx="" - -LinkerFlags_wasm="--no-entry" -LinkerFlags_wasm+=" --export-dynamic" # -LinkerFlags_wasm+=" --unresolved-symbols=import-functions" # - -LinkerFlags_linux="" -LinkerFlags_raspi="-fuse-ld=lld" - -LinkerFlags_DEBUG="-debug" -LinkerFlags_PROD="" - -# Linker Libs - -LinkerLibs_win32="user32.lib kernel32.lib gdi32.lib opengl32.lib" -# winmm.lib gdi32.lib dsound.lib Ws2_32.lib Comdlg32.lib Winspool.lib" - -LinkerLibs_osx="-framework OpenGL -framework Cocoa -framework IOKit ${PROJECT_PATH}/src/libs/glfw_osx/lib-universal/libglfw3.a" -LinkerLibs_wasm="" -LinkerLibs_linux="" -LinkerLibs_raspi="" - -# -------------------------------------------- -# Varible Selection - -# Select Platform Variables - -if [ "${PLATFORM}" == "win32" ] -then - Compiler=$Compiler_win32 - PlatformEntry=$PlatformEntry_win32 - CompilerFlags=$CompilerFlags_win32 - CompilerOutput=$CompilerOutput_win32 - LinkerOutput=$LinkerOutput_win32 - LinkerFlags=$LinkerFlags_win32 - LinkerLibs=$LinkerLibs_win32 - -elif [ "${PLATFORM}" == "osx" ] -then - Compiler=$Compiler_osx - PlatformEntry=$PlatformEntry_osx - CompilerFlags=$CompilerFlags_osx - CompilerOutput=$CompilerOutput_osx - LinkerOutput=$LinkerOutput_osx - LinkerFlags=$LinkerFlags_osx - LinkerLibs=$LinkerLibs_osx - - if [ "${ARCH}" == "arm64" ] - then - CompilerFlags="${CompilerFlags} -arch arm64" - elif [ "${ARCH}" == "intel" ] - then - CompilerFlags="${CompilerFlags} -arch x86_64" - else - echo "ERROR: Unrecognized Arch: ${ARCH}" - exit 0 - fi - -elif [ "${PLATFORM}" == "wasm" ] -then - Compiler=$Compiler_wasm - PlatformEntry=$PlatformEntry_wasm - CompilerFlags=$CompilerFlags_wasm - CompilerOutput=$CompilerOutput_wasm - LinkerOutput=$LinkerOutput_wasm - LinkerFlags=$LinkerFlags_wasm - LinkerLibs=$LinkerLibs_wasm - -elif [ "${PLATFORM}" == "linux" ] -then - Compiler=$Compiler_linux - PlatformEntry=$PlatformEntry_linux - CompilerFlags=$CompilerFlags_linux - CompilerOutput=$CompilerOutput_linux - LinkerOutput=$LinkerOutput_linux - LinkerFlags=$LinkerFlags_linux - LinkerLibs=$LinkerLibs_linux - -elif [ "${PLATFORM}" == "raspi" ] -then - Compiler=$Compiler_raspi - PlatformEntry=$PlatformEntry_raspi - CompilerFlags=$CompilerFlags_raspi - CompilerOutput=$CompilerOutput_raspi - LinkerOutput=$LinkerOutput_raspi - LinkerFlags=$LinkerFlags_raspi - LinkerLibs=$LinkerLibs_raspi -else - echo "Attempting to build for an unknown platform: ${PLATFORM}" - print_usage - exit 0 - -fi - -# Select Release Mode Variables - -if [ "${MODE}" == "debug" ] -then - if [ $PLATFORM == "win32" ] - then - CompilerFlags="${CompilerFlags} ${CompilerFlags_DEBUG_win32}" - else - CompilerFlags="${CompilerFlags} ${CompilerFlags_DEBUG}" - fi - - LinkerFlags="${LinkerFlags} ${LinkerFlags_DEBUG}" - -elif [ "${MODE}" == "prod" ] -then - CompilerFlags="${CompilerFlags} ${CompilerFlags_PROD}" - LinkerFlags="${LinkerFlags} ${LinkerFlags_PROD}" - -else - echo "Attempting to build for an unknown release mode: ${MODE}" - print_usage - exit 0 - -fi - -# Common Flags -CompilerFlags="${CompilerFlags} ${CompilerFlags_common}" - -# -------------------------------------------- -# Build Path Construction -# -# This determines where the generated executable will -# be located. In general, it can be found at -# project_path/run_tree/platform/arch/release_mode/lumenarium.exe -# -# This section also ensures that the path requested actually exists - -BuildDir="${PROJECT_PATH}/run_tree/${PLATFORM}/${ARCH}/${MODE}" -EntryPath="${PROJECT_PATH}/${PlatformEntry}" - -# Exception for wasm, which doesn't care about cpu architecture -if [ $PLATFORM == "wasm" ] -then - BuildDir="${PROJECT_PATH}/run_tree/${PLATFORM}/${MODE}" - -fi - -# Make the build directory, -# "-p" flag makes it make the entire tree, and not emit errors if it -# exists. -mkdir -p "${BuildDir}" - -# -------------------------------------------- -# Compilation - -echo "Building To: ${BuildDir}/${LinkerOutput}" -echo -pushdir $BuildDir - -echo "Cleaning: ${CompilerOutput} and ${LinkerOutput}" -rm -rf ${CompilerOutput} ${LinkerOutput} - -echo "COMPILING..." -if [ $PLATFORM == "win32" ] -then - $Compiler \ - $CompilerFlags \ - $EntryPath \ - -link \ - $LinkerFlags \ - $LinkerLibs \ - -OUT:${LinkerOutput} - -elif [ $PLATFORM == "wasm" ] -then - $Compiler \ - $CompilerFlags \ - -o $LinkerOutput \ - $EntryPath - cp \ - "${PROJECT_PATH}/src/platform/wasm/lumenarium_wasm_imports.js" \ - ./lumenarium_wasm_imports.js - -else - - # Preprocessing Steps - ConvertCsvEntry="${PROJECT_PATH}/src/tools/convert_csv.c" - $Compiler \ - -o convert_csv \ - $CompilerFlags \ - $ConvertCsvEntry \ - $LinkerLibs - - ./convert_csv - - echo "$Compiler -o $LinkerOutput $CompilerFlags $EntryPath $LinkerLibs" - $Compiler -o $LinkerOutput $CompilerFlags $EntryPath $LinkerLibs - -fi - -echo "Finished..." -popdir