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.

245 lines
7.5KB

  1. #!/bin/bash
  2. # ---------------------------------------------------------------------------------------------------------------------
  3. # OS setup
  4. if [ "${LINUX}" -eq 1 ]; then
  5. APP_EXT=""
  6. CMAKE_SYSTEM_NAME="Linux"
  7. if [ -n "${LINUX_TARGET}" ]; then
  8. PAWPAW_TARGET="${LINUX_TARGET}"
  9. else
  10. PAWPAW_TARGET="linux"
  11. fi
  12. elif [ "${MACOS}" -eq 1 ]; then
  13. APP_EXT=""
  14. CMAKE_SYSTEM_NAME="Darwin"
  15. if [ "${MACOS_UNIVERSAL}" -eq 1 ]; then
  16. PAWPAW_TARGET="macos-universal"
  17. else
  18. PAWPAW_TARGET="macos"
  19. fi
  20. elif [ "${WASM}" -eq 1 ]; then
  21. APP_EXT=".html"
  22. CMAKE_SYSTEM_NAME="Emscripten"
  23. PAWPAW_TARGET="wasm"
  24. elif [ "${WIN32}" -eq 1 ]; then
  25. APP_EXT=".exe"
  26. CMAKE_SYSTEM_NAME="Windows"
  27. if [ "${WIN64}" -eq 1 ]; then
  28. PAWPAW_TARGET="win64"
  29. else
  30. PAWPAW_TARGET="win32"
  31. fi
  32. else
  33. echo "Unknown target '${target}'"
  34. if [ -z "${SOURCING_FILES}" ]; then
  35. exit 4
  36. else
  37. APP_EXT=""
  38. CMAKE_SYSTEM_NAME="Unknown"
  39. PAWPAW_TARGET="unknown"
  40. INVALID_TARGET=1
  41. fi
  42. fi
  43. # ---------------------------------------------------------------------------------------------------------------------
  44. # PawPaw setup
  45. PAWPAW_DIR="${HOME}/PawPawBuilds"
  46. PAWPAW_DOWNLOADDIR="${PAWPAW_DIR}/downloads"
  47. PAWPAW_BUILDDIR="${PAWPAW_DIR}/builds/${PAWPAW_TARGET}"
  48. PAWPAW_PREFIX="${PAWPAW_DIR}/targets/${PAWPAW_TARGET}"
  49. PAWPAW_TMPDIR="/tmp"
  50. if [ -z "${PAWPAW_SKIP_LTO}" ] || [ "${PAWPAW_SKIP_LTO}" -eq 0 ]; then
  51. PAWPAW_BUILDDIR+="-lto"
  52. PAWPAW_PREFIX+="-lto"
  53. fi
  54. # ---------------------------------------------------------------------------------------------------------------------
  55. # build environment
  56. ## build flags
  57. BUILD_FLAGS="-O3 -pipe -I${PAWPAW_PREFIX}/include ${EXTRA_FLAGS}"
  58. BUILD_FLAGS+=" -ffast-math"
  59. BUILD_FLAGS+=" -fomit-frame-pointer -ftree-vectorize -funroll-loops"
  60. BUILD_FLAGS+=" -fPIC -DPIC -DNDEBUG=1"
  61. BUILD_FLAGS+=" -fdata-sections -ffunction-sections -fno-common -fvisibility=hidden"
  62. if [ "${GCC}" -eq 1 ]; then
  63. # not supported in riscv64 yet
  64. if [ -n "${LINUX_TARGET}" ] && [ "${LINUX_TARGET}" != "linux-riscv64" ]; then
  65. BUILD_FLAGS+=" -fprefetch-loop-arrays"
  66. fi
  67. BUILD_FLAGS+=" -fno-gnu-unique"
  68. fi
  69. if [ -z "${PAWPAW_SKIP_FORTIFY}" ] || [ "${PAWPAW_SKIP_FORTIFY}" -eq 0 ]; then
  70. BUILD_FLAGS+=" -D_FORTIFY_SOURCE=2 -fstack-protector"
  71. fi
  72. if [ -z "${PAWPAW_SKIP_LTO}" ] || [ "${PAWPAW_SKIP_LTO}" -eq 0 ]; then
  73. BUILD_FLAGS+=" -fno-strict-aliasing -flto"
  74. fi
  75. if [ "${WASM}" -eq 1 ]; then
  76. BUILD_FLAGS+=" -msse -msse2 -msse3 -msimd128"
  77. elif [ -n "${LINUX_TARGET}" ] && [ "${LINUX_TARGET}" = "linux-armhf" ]; then
  78. BUILD_FLAGS+=" -mfpu=neon-vfpv4 -mfloat-abi=hard"
  79. elif [ -n "${LINUX_TARGET}" ] && [ "${LINUX_TARGET}" != "linux-aarch64" ] && [ "${LINUX_TARGET}" != "linux-riscv64" ]; then
  80. BUILD_FLAGS+=" -mtune=generic -msse -msse2"
  81. if [ "${MACOS_UNIVERSAL}" -eq 0 ]; then
  82. BUILD_FLAGS+=" -mfpmath=sse"
  83. fi
  84. fi
  85. if [ "${MACOS}" -eq 1 ]; then
  86. if [ "${MACOS_UNIVERSAL}" -eq 1 ]; then
  87. BUILD_FLAGS+=" -DMAC_OS_X_VERSION_MAX_ALLOWED=MAC_OS_X_VERSION_10_12"
  88. BUILD_FLAGS+=" -DMAC_OS_X_VERSION_MIN_REQUIRED=MAC_OS_X_VERSION_10_12"
  89. BUILD_FLAGS+=" -mmacosx-version-min=10.12"
  90. BUILD_FLAGS+=" -arch x86_64 -arch arm64"
  91. export MACOSX_DEPLOYMENT_TARGET="10.12"
  92. else
  93. BUILD_FLAGS+=" -DMAC_OS_X_VERSION_MAX_ALLOWED=MAC_OS_X_VERSION_10_8"
  94. BUILD_FLAGS+=" -DMAC_OS_X_VERSION_MIN_REQUIRED=MAC_OS_X_VERSION_10_8"
  95. BUILD_FLAGS+=" -mmacosx-version-min=10.8"
  96. BUILD_FLAGS+=" -stdlib=libc++"
  97. BUILD_FLAGS+=" -arch x86_64"
  98. BUILD_FLAGS+=" -Wno-deprecated-declarations"
  99. export MACOSX_DEPLOYMENT_TARGET="10.8"
  100. fi
  101. BUILD_FLAGS+=" -Werror=objc-method-access"
  102. elif [ "${WASM}" -eq 1 ]; then
  103. # do we need anything here?
  104. BUILD_FLAGS+=""
  105. elif [ "${WIN32}" -eq 1 ]; then
  106. BUILD_FLAGS+=" -mstackrealign"
  107. BUILD_FLAGS+=" -posix"
  108. BUILD_FLAGS+=" -D__STDC_FORMAT_MACROS=1"
  109. BUILD_FLAGS+=" -D__USE_MINGW_ANSI_STDIO=1"
  110. BUILD_FLAGS+=" -DPTW32_STATIC_LIB"
  111. fi
  112. # anything that talks to db should have this
  113. BUILD_FLAGS+=" -DHAVE_MIXED_SIZE_ADDRESSING"
  114. TARGET_CFLAGS="${BUILD_FLAGS}"
  115. TARGET_CXXFLAGS="${BUILD_FLAGS} -fvisibility-inlines-hidden"
  116. ## link flags
  117. LINK_FLAGS="-L${PAWPAW_PREFIX}/lib ${BUILD_FLAGS} ${EXTRA_FLAGS}"
  118. if [ -z "${PAWPAW_SKIP_LTO}" ] || [ "${PAWPAW_SKIP_LTO}" -eq 0 ]; then
  119. LINK_FLAGS+=" -Werror=odr"
  120. if [ "${GCC}" -eq 1 ]; then
  121. LINK_FLAGS+=" -Werror=lto-type-mismatch"
  122. fi
  123. fi
  124. if [ "${MACOS}" -eq 1 ]; then
  125. if [ -z "${PAWPAW_SKIP_STRIPPING}" ] || [ "${PAWPAW_SKIP_STRIPPING}" -eq 0 ]; then
  126. LINK_FLAGS+=" -Wl,-dead_strip,-dead_strip_dylibs,-x"
  127. fi
  128. elif [ "${WASM}" -eq 1 ]; then
  129. LINK_FLAGS+=" -Wl,--gc-sections"
  130. LINK_FLAGS+=" -sENVIRONMENT=web"
  131. LINK_FLAGS+=" -sLLD_REPORT_UNDEFINED"
  132. if [ -z "${PAWPAW_SKIP_STRIPPING}" ] || [ "${PAWPAW_SKIP_STRIPPING}" -eq 0 ]; then
  133. LINK_FLAGS+=" -sAGGRESSIVE_VARIABLE_ELIMINATION=1"
  134. fi
  135. else
  136. LINK_FLAGS+=" -Wl,-O1,--as-needed,--gc-sections,--no-undefined"
  137. if [ -z "${PAWPAW_SKIP_STRIPPING}" ] || [ "${PAWPAW_SKIP_STRIPPING}" -eq 0 ]; then
  138. LINK_FLAGS+=" -Wl,--strip-all"
  139. fi
  140. if [ "${WIN32}" -eq 1 ]; then
  141. LINK_FLAGS+=" -static -static-libgcc -static-libstdc++ -Wl,-Bstatic"
  142. if [ "${CROSS_COMPILING}" -eq 0 ] && [ -e "/usr/lib/libssp.a" ]; then
  143. LINK_FLAGS+=" -lssp"
  144. else
  145. LINK_FLAGS+=" -lssp_nonshared"
  146. fi
  147. else
  148. LINK_FLAGS+=" -static-libgcc -static-libstdc++"
  149. fi
  150. fi
  151. TARGET_LDFLAGS="${LINK_FLAGS}"
  152. ## toolchain
  153. TARGET_AR="${TOOLCHAIN_PREFIX_}ar"
  154. TARGET_CC="${TOOLCHAIN_PREFIX_}gcc"
  155. TARGET_CXX="${TOOLCHAIN_PREFIX_}g++"
  156. TARGET_DLLWRAP="${TOOLCHAIN_PREFIX_}dllwrap"
  157. TARGET_LD="${TOOLCHAIN_PREFIX_}ld"
  158. TARGET_NM="${TOOLCHAIN_PREFIX_}nm"
  159. TARGET_RANLIB="${TOOLCHAIN_PREFIX_}ranlib"
  160. TARGET_STRIP="${TOOLCHAIN_PREFIX_}strip"
  161. TARGET_WINDRES="${TOOLCHAIN_PREFIX_}windres"
  162. TARGET_PATH="${PAWPAW_PREFIX}/bin:/usr/${TOOLCHAIN_PREFIX}/bin:${PATH}"
  163. TARGET_PKG_CONFIG="${PAWPAW_PREFIX}/bin/pkg-config --static"
  164. TARGET_PKG_CONFIG_PATH="${PAWPAW_PREFIX}/lib/pkgconfig"
  165. if [ "${WASM}" -eq 1 ]; then
  166. TARGET_AR="emar"
  167. TARGET_CC="emcc"
  168. TARGET_CXX="em++"
  169. TARGET_NM="emnm"
  170. TARGET_RANLIB="emranlib"
  171. TARGET_STRIP="emstrip"
  172. fi
  173. if [ -n "${PAWPAW_SKIP_STRIPPING}" ] && [ "${PAWPAW_SKIP_STRIPPING}" -eq 1 ]; then
  174. TARGET_STRIP="true"
  175. fi
  176. # ---------------------------------------------------------------------------------------------------------------------
  177. # other
  178. MAKE_ARGS=""
  179. WAF_ARGS=""
  180. unset WINEARCH
  181. unset WINEDLLOVERRIDES
  182. unset WINEPREFIX
  183. if [ "${MACOS}" -eq 1 ]; then
  184. MAKE_ARGS+="-j $(sysctl -n hw.logicalcpu)"
  185. WAF_ARGS+="-j $(sysctl -n hw.logicalcpu)"
  186. elif which nproc > /dev/null; then
  187. MAKE_ARGS+="-j $(nproc)"
  188. WAF_ARGS+="-j $(nproc)"
  189. fi
  190. if [ "${CROSS_COMPILING}" -eq 1 ]; then
  191. MAKE_ARGS+=" CROSS_COMPILING=true"
  192. if [ "${EXE_WRAPPER}" = "wine" ]; then
  193. export WINEARCH="${PAWPAW_TARGET}"
  194. export WINEDLLOVERRIDES="mscoree,mshtml="
  195. export WINEPREFIX="${PAWPAW_PREFIX}/wine"
  196. fi
  197. fi
  198. if [ "${MACOS}" -eq 1 ]; then
  199. MAKE_ARGS+=" MACOS=true"
  200. if [ "${MACOS_UNIVERSAL}" -eq 1 ]; then
  201. MAKE_ARGS+=" MACOS_UNIVERSAL=true"
  202. fi
  203. elif [ "${WIN32}" -eq 1 ]; then
  204. MAKE_ARGS+=" WINDOWS=true WIN32=true"
  205. if [ "${WIN64}" -eq 1 ]; then
  206. MAKE_ARGS+=" WIN64=true"
  207. fi
  208. fi
  209. # ---------------------------------------------------------------------------------------------------------------------