mirror of
https://github.com/nesbox/TIC-80.git
synced 2026-04-18 22:42:27 +00:00
163 lines
4.4 KiB
Bash
Executable File
163 lines
4.4 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
FRESH=false
|
|
ASAN=false
|
|
PRO=false
|
|
DEBUG=false
|
|
MACPORTS=false
|
|
HOMEBREW=false
|
|
STATIC=false
|
|
WARNINGS=false
|
|
BUILD_TYPE="MinSizeRel"
|
|
COMPILER_FLAGS=""
|
|
DEBUG_FLAGS=""
|
|
PRO_VERSION_FLAG=""
|
|
STATIC_FLAG=""
|
|
WARNING_FLAGS="-Wall -Wextra"
|
|
|
|
while (( "$#" )); do
|
|
case "$1" in
|
|
-f|--fresh)
|
|
FRESH=true
|
|
shift
|
|
;;
|
|
-a|--asan)
|
|
ASAN=true
|
|
shift
|
|
;;
|
|
-p|--pro)
|
|
PRO=true
|
|
shift
|
|
;;
|
|
-d|--debug)
|
|
DEBUG=true
|
|
shift
|
|
;;
|
|
-m|--macports)
|
|
MACPORTS=true
|
|
shift
|
|
;;
|
|
-h|--homebrew)
|
|
HOMEBREW=true
|
|
shift
|
|
;;
|
|
-s|--static)
|
|
STATIC=true
|
|
shift
|
|
;;
|
|
-w|--warnings)
|
|
WARNINGS=true
|
|
shift
|
|
;;
|
|
--)
|
|
shift
|
|
break
|
|
;;
|
|
-*)
|
|
echo "Unknown option: $1" >&2
|
|
exit 1
|
|
;;
|
|
*)
|
|
echo "Invalid argument: $1" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [ "$MACPORTS" = true ] && [ "$HOMEBREW" = true ]; then
|
|
echo "Error: -m/--macports and -h/--homebrew options are mutually exclusive."
|
|
exit 1
|
|
fi
|
|
|
|
# remove MacPorts from PATH if we're not using it or we're using Homebrew
|
|
if [ "$MACPORTS" = false ] || [ "$HOMEBREW" = true ]; then
|
|
PATH=${PATH/\/opt\/local\/bin:/}
|
|
fi
|
|
|
|
if [ "$FRESH" = true ]; then
|
|
rm -rf .cache CMakeCache.txt CMakeFiles/ cmake_install.cmake
|
|
rm -rf build && git restore 'build/*'
|
|
fi
|
|
|
|
if [ "$ASAN" = true ]; then
|
|
DEBUG=true
|
|
DEBUG_FLAGS="-DBUILD_NO_OPTIMIZATION=On -DBUILD_ASAN_DEBUG=On"
|
|
fi
|
|
|
|
if [ "$PRO" = true ]; then
|
|
PRO_VERSION_FLAG="-DBUILD_PRO=On"
|
|
fi
|
|
|
|
if [ "$DEBUG" = true ]; then
|
|
BUILD_TYPE="Debug"
|
|
fi
|
|
|
|
if [ "$MACPORTS" = true ]; then
|
|
CLANG=$(which clang)
|
|
CLANGPP=$(which clang++)
|
|
if [ -z "$CLANG" ] || [ -z "$CLANGPP" ]; then
|
|
echo "clang or clang++ not found. Please ensure they are installed and in your PATH."
|
|
exit 1
|
|
fi
|
|
COMPILER_FLAGS="-DCMAKE_C_COMPILER=$CLANG -DCMAKE_CXX_COMPILER=$CLANGPP"
|
|
export CPPFLAGS='-isystem/opt/local/include'
|
|
export LDFLAGS='-L/opt/local/lib'
|
|
echo
|
|
echo "Using clang at $CLANG and clang++ at $CLANGPP from MacPorts"
|
|
fi
|
|
|
|
if [ "$HOMEBREW" = true ]; then
|
|
export PATH="/opt/homebrew/opt/llvm/bin:$PATH"
|
|
export LDFLAGS="-L/opt/homebrew/opt/llvm/lib/c++ -Wl,-rpath,/opt/homebrew/opt/llvm/lib/c++ -L/opt/homebrew/opt/llvm/lib"
|
|
export CPPFLAGS="-I/opt/homebrew/opt/llvm/include"
|
|
|
|
# Add explicit compiler flags like MacPorts does
|
|
CLANG="/opt/homebrew/opt/llvm/bin/clang"
|
|
CLANGPP="/opt/homebrew/opt/llvm/bin/clang++"
|
|
if [ -z "$CLANG" ] || [ -z "$CLANGPP" ]; then
|
|
echo "Homebrew clang or clang++ not found. Please ensure llvm is installed via Homebrew."
|
|
exit 1
|
|
fi
|
|
COMPILER_FLAGS="$COMPILER_FLAGS -DCMAKE_C_COMPILER=$CLANG -DCMAKE_CXX_COMPILER=$CLANGPP"
|
|
|
|
echo
|
|
echo "Using clang at $CLANG and clang++ at $CLANGPP from Homebrew"
|
|
fi
|
|
|
|
if [ "$STATIC" = true ]; then
|
|
STATIC_FLAG="-DBUILD_STATIC=On"
|
|
fi
|
|
|
|
if [ "$WARNINGS" = true ]; then
|
|
COMPILER_FLAGS="$COMPILER_FLAGS -DCMAKE_C_FLAGS=$WARNING_FLAGS -DCMAKE_CXX_FLAGS=$WARNING_FLAGS"
|
|
fi
|
|
|
|
echo
|
|
echo "+--------------------------------+-------+"
|
|
echo "| Build Options | Value |"
|
|
echo "+--------------------------------+-------+"
|
|
echo "| Fresh build (-f, --fresh) | $(printf "%-5s" $([ "$FRESH" = true ] && echo "Yes" || echo "No")) |"
|
|
echo "| Address Sanitizer (-a, --asan) | $(printf "%-5s" $([ "$ASAN" = true ] && echo "Yes" || echo "No")) |"
|
|
echo "| Pro version (-p, --pro) | $(printf "%-5s" $([ "$PRO" = true ] && echo "Yes" || echo "No")) |"
|
|
echo "| Debug build (-d, --debug) | $(printf "%-5s" $([ "$DEBUG" = true ] && echo "Yes" || echo "No")) |"
|
|
echo "| MacPorts (-m, --macports) | $(printf "%-5s" $([ "$MACPORTS" = true ] && echo "Yes" || echo "No")) |"
|
|
echo "| Homebrew (-h, --homebrew) | $(printf "%-5s" $([ "$HOMEBREW" = true ] && echo "Yes" || echo "No")) |"
|
|
echo "| Static build (-s, --static) | $(printf "%-5s" $([ "$STATIC" = true ] && echo "Yes" || echo "No")) |"
|
|
echo "| Warnings (-w, --warnings) | $(printf "%-5s" $([ "$WARNINGS" = true ] && echo "Yes" || echo "No")) |"
|
|
echo "+--------------------------------+-------+"
|
|
echo
|
|
|
|
cd ./build || exit
|
|
|
|
cmake -DCMAKE_BUILD_TYPE="$BUILD_TYPE" \
|
|
$PRO_VERSION_FLAG \
|
|
-DBUILD_SDLGPU=On \
|
|
$DEBUG_FLAGS \
|
|
$COMPILER_FLAGS \
|
|
$STATIC_FLAG \
|
|
-DBUILD_WITH_ALL=On \
|
|
-DCMAKE_EXPORT_COMPILE_COMMANDS=On \
|
|
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
|
|
.. && \
|
|
cmake --build . --config "$BUILD_TYPE" --parallel
|