Cross-Platform build scripts for audio plugins
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

210 lines
6.1KB

  1. #!/bin/bash
  2. CLANG=0
  3. GCC=0
  4. CROSS_COMPILING=0
  5. INVALID_TARGET=0
  6. LINUX=0
  7. MACOS=0
  8. MACOS_10_15=0
  9. MACOS_UNIVERSAL=0
  10. WASM=0
  11. WIN32=0
  12. WIN64=0
  13. unset EXE_WRAPPER
  14. unset TOOLCHAIN_PREFIX
  15. unset TOOLCHAIN_PREFIX_
  16. function check_target() {
  17. case "${target}" in
  18. "Darwin")
  19. CLANG=1
  20. MACOS=1
  21. if [ "$(uname -m)" = "x86_64" ]; then
  22. MACOS_UNIVERSAL=1
  23. fi
  24. ;;
  25. "macos"|"macos-intel")
  26. CLANG=1
  27. MACOS=1
  28. ;;
  29. "macos-10.15")
  30. CLANG=1
  31. MACOS=1
  32. MACOS_10_15=1
  33. ;;
  34. "macos-universal")
  35. CLANG=1
  36. MACOS=1
  37. MACOS_UNIVERSAL=1
  38. ;;
  39. "macos-universal-10.15")
  40. CLANG=1
  41. MACOS=1
  42. MACOS_10_15=1
  43. MACOS_UNIVERSAL=1
  44. ;;
  45. "wasm")
  46. CLANG=1
  47. CROSS_COMPILING=1
  48. WASM=1
  49. PAWPAW_SKIP_LTO=1
  50. export EXE_WRAPPER="emrun --no_server"
  51. ;;
  52. "win32"|"MINGW32"*)
  53. GCC=1
  54. WIN32=1
  55. if [ "$(uname -o)" != "Msys" ] && [ "$(uname -o)" != "Cygwin" ]; then
  56. CROSS_COMPILING=1
  57. CMAKE_SYSTEM_PROCESSOR="i686"
  58. PAWPAW_SKIP_LTO=1
  59. TOOLCHAIN_PREFIX="i686-w64-mingw32"
  60. TOOLCHAIN_PREFIX_="${TOOLCHAIN_PREFIX}-"
  61. export EXE_WRAPPER="wine"
  62. fi
  63. ;;
  64. "win64"|"MINGW64"*)
  65. GCC=1
  66. WIN32=1
  67. WIN64=1
  68. if [ "$(uname -o)" != "Msys" ] && [ "$(uname -o)" != "Cygwin" ]; then
  69. CROSS_COMPILING=1
  70. CMAKE_SYSTEM_PROCESSOR="x86_64"
  71. PAWPAW_SKIP_LTO=1
  72. TOOLCHAIN_PREFIX="x86_64-w64-mingw32"
  73. TOOLCHAIN_PREFIX_="${TOOLCHAIN_PREFIX}-"
  74. export EXE_WRAPPER="wine"
  75. fi
  76. ;;
  77. "CYGWIN"*|"MSYS"*)
  78. GCC=1
  79. WIN32=1
  80. if [ "$(uname -m)" = "x86_64" ]; then
  81. WIN64=1
  82. fi
  83. ;;
  84. "linux"|"Linux")
  85. GCC=1
  86. LINUX=1
  87. if [ "$(uname -m)" = "aarch64" ]; then
  88. LINUX_TARGET="linux-aarch64"
  89. elif [ "$(uname -m)" = "arm" ]; then
  90. LINUX_TARGET="linux-armhf"
  91. elif [ "$(uname -m)" = "i386" ] || [ "$(uname -m)" = "i686" ]; then
  92. LINUX_TARGET="linux-i686"
  93. elif [ "$(uname -m)" = "riscv64" ]; then
  94. LINUX_TARGET="linux-riscv64"
  95. elif [ "$(uname -m)" = "x86_64" ]; then
  96. LINUX_TARGET="linux-x86_64"
  97. fi
  98. ;;
  99. "linux-aarch64"|"linux-arm64")
  100. GCC=1
  101. LINUX=1
  102. LINUX_TARGET="linux-aarch64"
  103. TOOLCHAIN_PREFIX="aarch64-linux-gnu"
  104. TOOLCHAIN_PREFIX_="${TOOLCHAIN_PREFIX}-"
  105. if [ "$(uname -m)" != "aarch64" ]; then
  106. CROSS_COMPILING=1
  107. CMAKE_SYSTEM_PROCESSOR="aarch64"
  108. export EXE_WRAPPER="qemu-aarch64-static"
  109. fi
  110. ;;
  111. "linux-armhf")
  112. GCC=1
  113. LINUX=1
  114. LINUX_TARGET="linux-armhf"
  115. TOOLCHAIN_PREFIX="arm-linux-gnueabihf"
  116. TOOLCHAIN_PREFIX_="${TOOLCHAIN_PREFIX}-"
  117. if [ "$(uname -m)" != "arm" ]; then
  118. CROSS_COMPILING=1
  119. CMAKE_SYSTEM_PROCESSOR="armv7"
  120. export EXE_WRAPPER="qemu-arm-static"
  121. fi
  122. ;;
  123. "linux-i686"|"linux-i386")
  124. GCC=1
  125. LINUX=1
  126. LINUX_TARGET="linux-i686"
  127. EXTRA_FLAGS="-m32"
  128. TOOLCHAIN_PREFIX="i686-linux-gnu"
  129. TOOLCHAIN_PREFIX_="${TOOLCHAIN_PREFIX}-"
  130. if [ "$(uname -m)" != "i386" ] && [ "$(uname -m)" != "i686" ] && [ "$(uname -m)" != "x86_64" ]; then
  131. CROSS_COMPILING=1
  132. CMAKE_SYSTEM_PROCESSOR="i386"
  133. export EXE_WRAPPER="qemu-i386-static"
  134. fi
  135. ;;
  136. "linux-riscv64")
  137. GCC=1
  138. LINUX=1
  139. LINUX_TARGET="linux-riscv64"
  140. TOOLCHAIN_PREFIX="riscv64-linux-gnu"
  141. TOOLCHAIN_PREFIX_="${TOOLCHAIN_PREFIX}-"
  142. if [ "$(uname -m)" != "riscv64" ]; then
  143. CROSS_COMPILING=1
  144. CMAKE_SYSTEM_PROCESSOR="riscv64"
  145. export EXE_WRAPPER="qemu-riscv64-static"
  146. fi
  147. ;;
  148. "linux-x86_64")
  149. GCC=1
  150. LINUX=1
  151. LINUX_TARGET="linux-x86_64"
  152. EXTRA_FLAGS="-m64"
  153. TOOLCHAIN_PREFIX="x86_64-linux-gnu"
  154. TOOLCHAIN_PREFIX_="${TOOLCHAIN_PREFIX}-"
  155. if [ "$(uname -m)" != "x86_64" ]; then
  156. CROSS_COMPILING=1
  157. CMAKE_SYSTEM_PROCESSOR="x86_64"
  158. export EXE_WRAPPER="qemu-x86_64-static"
  159. fi
  160. ;;
  161. "native")
  162. target=$(uname -s)
  163. check_target
  164. if [ "${target}" = "Darwin" ] && [ "$(uname -m)" = "arm64" ]; then
  165. MACOS_UNIVERSAL=1
  166. fi
  167. ;;
  168. default|*)
  169. echo "Invalid target '${target}', possible values are:"
  170. echo "\tlinux"
  171. echo "\tlinux-aarch64|linux-arm64"
  172. echo "\tlinux-armhf"
  173. echo "\tlinux-i686|linux-i386"
  174. echo "\tlinux-riscv64"
  175. echo "\tlinux-x86_64"
  176. echo "\tmacos|macos-intel"
  177. echo "\tmacos-10.15"
  178. echo "\tmacos-universal"
  179. echo "\tmacos-universal-10.15"
  180. echo "\twasm"
  181. echo "\twin32"
  182. echo "\twin64"
  183. echo "\tnative"
  184. if [ -z "${SOURCING_FILES}" ]; then
  185. exit 2
  186. else
  187. INVALID_TARGET=1
  188. fi
  189. ;;
  190. esac
  191. }
  192. check_target
  193. # always skip tests when cross-compiling
  194. if [ "${CROSS_COMPILING}" -eq 1 ]; then
  195. PAWPAW_SKIP_TESTS=${PAWPAW_SKIP_TESTS:=1}
  196. fi
  197. # always skip lto and stripping if building in debug mode
  198. if [ -n "${PAWPAW_DEBUG}" ] && [ "${PAWPAW_DEBUG}" -eq 1 ]; then
  199. PAWPAW_SKIP_LTO=1
  200. PAWPAW_SKIP_STRIPPING=1
  201. fi