build.sh 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. #!/bin/bash
  2. echo Starting build.sh
  3. PATH=/usr/local/bin:$PATH:$HOME/bin
  4. SCRIPTPATH=$(cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)
  5. ROOTPATH="$(dirname "$SCRIPTPATH")"
  6. echo Building from $SCRIPTPATH
  7. cd $SCRIPTPATH
  8. for i in "$@"
  9. do
  10. if [[ $i == "clean" ]]; then
  11. echo "Cleaning..."
  12. rm -rf ../jbuild
  13. rm -rf ../jbuild_d
  14. exit
  15. fi
  16. if [[ $i == "sdl" ]]; then
  17. echo "Using SDL"
  18. USE_SDL="-DBF_ENABLE_SDL=1"
  19. fi
  20. if [[ $i == "no_ffi" ]]; then
  21. echo "Disabling FFI"
  22. USE_FFI="-DBF_DISABLE_FFI=1"
  23. fi
  24. done
  25. if command -v ninja >/dev/null 2>&1 ; then
  26. CAN_USE_NINJA=1
  27. if [ -d ../jbuild_d ] && [ ! -f ../jbuild_d/build.ninja ]; then
  28. CAN_USE_NINJA=0
  29. fi
  30. if [ $CAN_USE_NINJA == 1 ]; then
  31. echo "Ninja is enabled for this build."
  32. USE_NINJA="-GNinja"
  33. else
  34. echo "Ninja couldn't be enabled for this build, consider doing a clean build to start using Ninja for faster build speeds."
  35. fi
  36. else
  37. echo "Ninja isn't installed, consider installing it for faster build speeds."
  38. fi
  39. # exit when any command fails
  40. set -e
  41. ### Dependencies ###
  42. if [ ! -f ../BeefySysLib/third_party/libffi/Makefile ]; then
  43. echo Building libffi...
  44. cd ../BeefySysLib/third_party/libffi
  45. ./configure
  46. make
  47. cd $SCRIPTPATH
  48. fi
  49. LLVM_FOUND=0
  50. LLVM_CONFIG=$(which llvm-config-13 2>/dev/null || which llvm-config 2>/dev/null)
  51. if [ -n "$LLVM_CONFIG" ]; then
  52. LLVM_VERSION=$($LLVM_CONFIG --version)
  53. LLVM_MAJOR_VERSION=$(echo "$LLVM_VERSION" | cut -d. -f1)
  54. if [ "$LLVM_MAJOR_VERSION" = "13" ]; then
  55. LLVM_FOUND=1
  56. fi
  57. fi
  58. if [ ! -f ../extern/llvm_linux_13_0_1/_Done.txt ] && [ $LLVM_FOUND == 0 ]; then
  59. echo "ERROR: LLVM 13 was not detected on your system. Please install the package 'llvm-13-dev' and try again." >&2
  60. echo "ERROR: As an alternative, you can compile LLVM from source using the script 'extern/llvm_build.sh'." >&2
  61. exit
  62. fi
  63. ### LIBS ###
  64. cd ..
  65. if [ ! -d jbuild_d ]; then
  66. mkdir jbuild_d
  67. mkdir jbuild
  68. fi
  69. cd jbuild_d
  70. echo cmake $USE_NINJA $USE_SDL -DCMAKE_BUILD_TYPE=Debug ../
  71. cmake $USE_NINJA $USE_SDL $USE_FFI -DCMAKE_BUILD_TYPE=Debug ../
  72. cmake --build .
  73. cd ../jbuild
  74. cmake $USE_NINJA $USE_SDL $USE_FFI -DCMAKE_BUILD_TYPE=RelWithDebInfo ../
  75. cmake --build .
  76. cd ../IDE/dist
  77. if [[ "$OSTYPE" == "darwin"* ]]; then
  78. LIBEXT=dylib
  79. LINKOPTS="-Wl,-no_compact_unwind -Wl,-rpath -Wl,@executable_path"
  80. else
  81. LIBEXT=so
  82. LINKOPTS="-ldl -lpthread -Wl,-rpath -Wl,\$ORIGIN"
  83. fi
  84. ln -s -f $ROOTPATH/jbuild_d/Debug/bin/libBeefRT_d.a libBeefRT_d.a
  85. ln -s -f $ROOTPATH/jbuild_d/Debug/bin/libBeefySysLib_d.$LIBEXT libBeefySysLib_d.$LIBEXT
  86. ln -s -f $ROOTPATH/jbuild_d/Debug/bin/libIDEHelper_d.$LIBEXT libIDEHelper_d.$LIBEXT
  87. ln -s -f $ROOTPATH/jbuild/Release/bin/libBeefRT.a libBeefRT.a
  88. ln -s -f $ROOTPATH/jbuild/Release/bin/libBeefySysLib.$LIBEXT libBeefySysLib.$LIBEXT
  89. ln -s -f $ROOTPATH/jbuild/Release/bin/libIDEHelper.$LIBEXT libIDEHelper.$LIBEXT
  90. ln -s -f $ROOTPATH/jbuild_d/Debug/bin/libBeefRT_d.a ../../BeefLibs/Beefy2D/dist/libBeefRT_d.a
  91. ln -s -f $ROOTPATH/jbuild_d/Debug/bin/libBeefySysLib_d.$LIBEXT ../../BeefLibs/Beefy2D/dist/libBeefySysLib_d.$LIBEXT
  92. ln -s -f $ROOTPATH/jbuild_d/Debug/bin/libIDEHelper_d.$LIBEXT ../../BeefLibs/Beefy2D/dist/libIDEHelper_d.$LIBEXT
  93. ln -s -f $ROOTPATH/jbuild/Release/bin/libBeefRT.a ../../BeefLibs/Beefy2D/dist/libBeefRT.a
  94. ln -s -f $ROOTPATH/jbuild/Release/bin/libBeefySysLib.$LIBEXT ../../BeefLibs/Beefy2D/dist/libBeefySysLib.$LIBEXT
  95. ln -s -f $ROOTPATH/jbuild/Release/bin/libIDEHelper.$LIBEXT ../../BeefLibs/Beefy2D/dist/libIDEHelper.$LIBEXT
  96. ### DEBUG ###
  97. echo Building BeefBuild_bootd
  98. ../../jbuild_d/Debug/bin/BeefBoot --out="BeefBuild_bootd" --src=../src --src=../../BeefBuild/src --src=../../BeefLibs/corlib/src --src=../../BeefLibs/Beefy2D/src --define=CLI --define=DEBUG --startup=BeefBuild.Program --linkparams="./libBeefRT_d.a ./libIDEHelper_d.$LIBEXT ./libBeefySysLib_d.$LIBEXT $(< ../../IDE/dist/IDEHelper_libs_d.txt) $LINKOPTS"
  99. echo Building BeefBuild_d
  100. ./BeefBuild_bootd -clean -proddir=../../BeefBuild -config=Debug
  101. echo Testing IDEHelper/Tests in BeefBuild_d
  102. ./BeefBuild_d -proddir=../../IDEHelper/Tests -test
  103. ### RELEASE ###
  104. echo Building BeefBuild_boot
  105. ../../jbuild/Release/bin/BeefBoot --out="BeefBuild_boot" --src=../src --src=../../BeefBuild/src --src=../../BeefLibs/corlib/src --src=../../BeefLibs/Beefy2D/src --define=CLI --startup=BeefBuild.Program --linkparams="./libBeefRT.a ./libIDEHelper.$LIBEXT ./libBeefySysLib.$LIBEXT $(< ../../IDE/dist/IDEHelper_libs.txt) $LINKOPTS"
  106. echo Building BeefBuild
  107. ./BeefBuild_boot -clean -proddir=../../BeefBuild -config=Release
  108. echo Testing IDEHelper/Tests in BeefBuild
  109. ./BeefBuild -proddir=../../IDEHelper/Tests -test