build_odin.sh 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. #!/bin/bash
  2. set -eu
  3. GIT_SHA=$(git rev-parse --short HEAD)
  4. DISABLED_WARNINGS="-Wno-switch -Wno-macro-redefined -Wno-unused-value"
  5. LDFLAGS="-pthread -lm -lstdc++"
  6. CFLAGS="-std=c++14 -DGIT_SHA=\"$GIT_SHA\""
  7. CFLAGS="$CFLAGS -DODIN_VERSION_RAW=\"dev-$(date +"%Y-%m")\""
  8. CC=clang
  9. OS=$(uname)
  10. panic() {
  11. printf "%s\n" "$1"
  12. exit 1
  13. }
  14. version() { echo "$@" | awk -F. '{ printf("%d%03d%03d%03d\n", $1,$2,$3,$4); }'; }
  15. config_darwin() {
  16. ARCH=$(uname -m)
  17. LLVM_CONFIG=llvm-config
  18. # allow for arm only llvm's with version 13
  19. if [ ARCH == arm64 ]; then
  20. MIN_LLVM_VERSION=("13.0.0")
  21. else
  22. # allow for x86 / amd64 all llvm versions begining from 11
  23. MIN_LLVM_VERSION=("11.1.0")
  24. fi
  25. if [ $(version $($LLVM_CONFIG --version)) -lt $(version $MIN_LLVM_VERSION) ]; then
  26. if [ ARCH == arm64 ]; then
  27. panic "Requirement: llvm-config must be base version 13 for arm64"
  28. else
  29. panic "Requirement: llvm-config must be base version greater than 11 for amd64/x86"
  30. fi
  31. fi
  32. LDFLAGS="$LDFLAGS -liconv -ldl"
  33. CFLAGS="$CFLAGS $($LLVM_CONFIG --cxxflags --ldflags)"
  34. LDFLAGS="$LDFLAGS -lLLVM-C"
  35. }
  36. config_freebsd() {
  37. LLVM_CONFIG=/usr/local/bin/llvm-config11
  38. CFLAGS="$CFLAGS $($LLVM_CONFIG --cxxflags --ldflags)"
  39. LDFLAGS="$LDFLAGS $($LLVM_CONFIG --libs core native --system-libs)"
  40. }
  41. config_openbsd() {
  42. LLVM_CONFIG=/usr/local/bin/llvm-config
  43. LDFLAGS="$LDFLAGS -liconv"
  44. CFLAGS="$CFLAGS $($LLVM_CONFIG --cxxflags --ldflags)"
  45. LDFLAGS="$LDFLAGS $($LLVM_CONFIG --libs core native --system-libs)"
  46. }
  47. config_linux() {
  48. if which llvm-config > /dev/null 2>&1; then
  49. LLVM_CONFIG=llvm-config
  50. elif which llvm-config-11 > /dev/null 2>&1; then
  51. LLVM_CONFIG=llvm-config-11
  52. elif which llvm-config-11-64 > /dev/null 2>&1; then
  53. LLVM_CONFIG=llvm-config-11-64
  54. else
  55. panic "Unable to find LLVM-config"
  56. fi
  57. MIN_LLVM_VERSION=("11.0.0")
  58. if [ $(version $($LLVM_CONFIG --version)) -lt $(version $MIN_LLVM_VERSION) ]; then
  59. echo "Tried to use " $(which $LLVM_CONFIG) "version" $($LLVM_CONFIG --version)
  60. panic "Requirement: llvm-config must be base version greater than 11"
  61. fi
  62. LDFLAGS="$LDFLAGS -ldl"
  63. CFLAGS="$CFLAGS $($LLVM_CONFIG --cxxflags --ldflags)"
  64. LDFLAGS="$LDFLAGS $($LLVM_CONFIG --libs core native --system-libs)"
  65. }
  66. build_odin() {
  67. case $1 in
  68. debug)
  69. EXTRAFLAGS="-g"
  70. ;;
  71. release)
  72. EXTRAFLAGS="-O3"
  73. ;;
  74. release-native)
  75. EXTRAFLAGS="-O3 -march=native"
  76. ;;
  77. nightly)
  78. EXTRAFLAGS="-DNIGHTLY -O3"
  79. ;;
  80. *)
  81. panic "Build mode unsupported!"
  82. esac
  83. set -x
  84. $CC src/main.cpp src/libtommath.cpp $DISABLED_WARNINGS $CFLAGS $EXTRAFLAGS $LDFLAGS -o odin
  85. set +x
  86. }
  87. run_demo() {
  88. ./odin run examples/demo/demo.odin
  89. }
  90. case $OS in
  91. Linux)
  92. config_linux
  93. ;;
  94. Darwin)
  95. config_darwin
  96. ;;
  97. OpenBSD)
  98. config_openbsd
  99. ;;
  100. FreeBSD)
  101. config_freebsd
  102. ;;
  103. *)
  104. panic "Platform unsupported!"
  105. esac
  106. if [[ $# -eq 0 ]]; then
  107. build_odin debug
  108. run_demo
  109. exit 0
  110. fi
  111. if [[ $# -eq 1 ]]; then
  112. case $1 in
  113. report)
  114. if [[ ! -f "./odin" ]]; then
  115. build_odin debug
  116. fi
  117. ./odin report
  118. exit 0
  119. ;;
  120. *)
  121. build_odin $1
  122. ;;
  123. esac
  124. run_demo
  125. exit 0
  126. else
  127. panic "Too many arguments!"
  128. fi