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.

204 lines
6.6KB

  1. #!/bin/bash
  2. # ---------------------------------------------------------------------------------------------------------------------
  3. # OS setup
  4. if [ "${LINUX}" -eq 1 ]; then
  5. APP_EXT=""
  6. CMAKE_SYSTEM_NAME="Linux"
  7. PAWPAW_TARGET="linux"
  8. elif [ "${MACOS}" -eq 1 ]; then
  9. APP_EXT=""
  10. CMAKE_SYSTEM_NAME="Darwin"
  11. if [ "${MACOS_OLD}" -eq 1 ]; then
  12. PAWPAW_TARGET="macos-old"
  13. elif [ "${MACOS_UNIVERSAL}" -eq 1 ]; then
  14. PAWPAW_TARGET="macos-universal"
  15. else
  16. PAWPAW_TARGET="macos"
  17. fi
  18. elif [ "${WIN32}" -eq 1 ]; then
  19. APP_EXT=".exe"
  20. CMAKE_SYSTEM_NAME="Windows"
  21. if [ "${WIN64}" -eq 1 ]; then
  22. PAWPAW_TARGET="win64"
  23. else
  24. PAWPAW_TARGET="win32"
  25. fi
  26. else
  27. echo "Unknown target '${target}'"
  28. if [ -z "${SOURCING_FILES}" ]; then
  29. exit 4
  30. else
  31. APP_EXT=""
  32. CMAKE_SYSTEM_NAME="Unknown"
  33. PAWPAW_TARGET="unknown"
  34. INVALID_TARGET=1
  35. fi
  36. fi
  37. # ---------------------------------------------------------------------------------------------------------------------
  38. # PawPaw setup
  39. PAWPAW_DIR="${HOME}/PawPawBuilds"
  40. PAWPAW_DOWNLOADDIR="${PAWPAW_DIR}/downloads"
  41. PAWPAW_BUILDDIR="${PAWPAW_DIR}/builds/${PAWPAW_TARGET}"
  42. PAWPAW_PREFIX="${PAWPAW_DIR}/targets/${PAWPAW_TARGET}"
  43. PAWPAW_TMPDIR="/tmp"
  44. # ---------------------------------------------------------------------------------------------------------------------
  45. # build environment
  46. # Force compiler path on macOS universal builds
  47. # FIXME remove this after github actions macos-11 image is available for public use
  48. if [ "${MACOS_UNIVERSAL}" -eq 1 ] && [ "${CROSS_COMPILING}" -eq 0 ]; then
  49. xcode_sysroot=""$(xcrun --sdk macosx --show-sdk-path)""
  50. EXTRA_FLAGS="-isysroot ${xcode_sysroot} -isystem ${xcode_sysroot}"
  51. EXTRA_FLAGS+=" -DHAVE_FCNTL_H=1"
  52. EXTRA_FLAGS+=" -DHAVE_LRINT=1"
  53. EXTRA_FLAGS+=" -DHAVE_LRINTF=1"
  54. EXTRA_FLAGS+=" -DSTDC_HEADERS=1"
  55. fi
  56. ## build flags
  57. BUILD_FLAGS="-O2 -pipe -I${PAWPAW_PREFIX}/include ${EXTRA_FLAGS}"
  58. BUILD_FLAGS+=" -mtune=generic -msse -msse2 -ffast-math"
  59. BUILD_FLAGS+=" -fPIC -DPIC -DNDEBUG -D_FORTIFY_SOURCE=2"
  60. BUILD_FLAGS+=" -fdata-sections -ffunction-sections -fno-common -fstack-protector -fvisibility=hidden"
  61. if [ "${MACOS_UNIVERSAL}" -eq 0 ]; then
  62. BUILD_FLAGS+=" -mfpmath=sse"
  63. fi
  64. if [ "${MACOS}" -eq 1 ]; then
  65. if [ "${MACOS_OLD}" -eq 1 ]; then
  66. BUILD_FLAGS+=" -DMAC_OS_X_VERSION_MAX_ALLOWED=MAC_OS_X_VERSION_10_5 -mmacosx-version-min=10.5 -arch i686"
  67. elif [ "${MACOS_UNIVERSAL}" -eq 1 ]; then
  68. BUILD_FLAGS+=" -DMAC_OS_X_VERSION_MAX_ALLOWED=MAC_OS_X_VERSION_10_12 -mmacosx-version-min=10.12 -arch x86_64 -arch arm64"
  69. else
  70. BUILD_FLAGS+=" -DMAC_OS_X_VERSION_MAX_ALLOWED=MAC_OS_X_VERSION_10_8 -mmacosx-version-min=10.8 -stdlib=libc++ -Wno-deprecated-declarations -arch x86_64"
  71. fi
  72. elif [ "${WIN32}" -eq 1 ]; then
  73. BUILD_FLAGS+=" -DFLUIDSYNTH_NOT_A_DLL -DPTW32_STATIC_LIB -mstackrealign"
  74. fi
  75. # anything that talks to db should have this
  76. BUILD_FLAGS+=" -DHAVE_MIXED_SIZE_ADDRESSING"
  77. TARGET_CFLAGS="${BUILD_FLAGS}"
  78. TARGET_CXXFLAGS="${BUILD_FLAGS} -fvisibility-inlines-hidden"
  79. ## link flags
  80. LINK_FLAGS="-L${PAWPAW_PREFIX}/lib ${EXTRA_FLAGS}"
  81. LINK_FLAGS+=" -fdata-sections -ffunction-sections -fstack-protector"
  82. if [ "${MACOS}" -eq 1 ]; then
  83. LINK_FLAGS+=" -Wl,-dead_strip -Wl,-dead_strip_dylibs -Wl,-x"
  84. if [ "${MACOS_OLD}" -eq 1 ]; then
  85. LINK_FLAGS+=" -mmacosx-version-min=10.5 -arch i686"
  86. elif [ "${MACOS_UNIVERSAL}" -eq 1 ]; then
  87. LINK_FLAGS+=" -mmacosx-version-min=10.12 -arch x86_64 -arch arm64"
  88. else
  89. LINK_FLAGS+=" -mmacosx-version-min=10.8 -stdlib=libc++ -arch x86_64"
  90. fi
  91. else
  92. LINK_FLAGS+=" -Wl,-O1 -Wl,--as-needed -Wl,--gc-sections -Wl,--no-undefined -Wl,--strip-all"
  93. if [ "${WIN32}" -eq 1 ]; then
  94. LINK_FLAGS+=" -static -static-libgcc -static-libstdc++ -Wl,-Bstatic"
  95. if [ "${CROSS_COMPILING}" -eq 0 ] && [ -e "/usr/lib/libssp.a" ]; then
  96. LINK_FLAGS+=" -lssp"
  97. else
  98. LINK_FLAGS+=" -lssp_nonshared"
  99. fi
  100. fi
  101. fi
  102. TARGET_LDFLAGS="${LINK_FLAGS}"
  103. ## toolchain
  104. if [ "${CROSS_COMPILING}" -eq 1 ]; then
  105. if [ "${MACOS}" -eq 1 ]; then
  106. TOOLCHAIN_PREFIX="i686-apple-darwin10"
  107. TOOLCHAIN_PREFIX_="${TOOLCHAIN_PREFIX}-"
  108. elif [ "${WIN64}" -eq 1 ]; then
  109. TOOLCHAIN_PREFIX="x86_64-w64-mingw32"
  110. TOOLCHAIN_PREFIX_="${TOOLCHAIN_PREFIX}-"
  111. elif [ "${WIN32}" -eq 1 ]; then
  112. TOOLCHAIN_PREFIX="i686-w64-mingw32"
  113. TOOLCHAIN_PREFIX_="${TOOLCHAIN_PREFIX}-"
  114. fi
  115. else
  116. unset TOOLCHAIN_PREFIX
  117. unset TOOLCHAIN_PREFIX_
  118. fi
  119. TARGET_AR="${TOOLCHAIN_PREFIX_}ar"
  120. TARGET_CC="${TOOLCHAIN_PREFIX_}gcc"
  121. TARGET_CXX="${TOOLCHAIN_PREFIX_}g++"
  122. TARGET_DLLWRAP="${TOOLCHAIN_PREFIX_}dllwrap"
  123. TARGET_LD="${TOOLCHAIN_PREFIX_}ld"
  124. TARGET_STRIP="${TOOLCHAIN_PREFIX_}strip"
  125. TARGET_WINDRES="${TOOLCHAIN_PREFIX_}windres"
  126. TARGET_PATH="${PAWPAW_PREFIX}/bin:/usr/${TOOLCHAIN_PREFIX}/bin:${PATH}"
  127. TARGET_PKG_CONFIG="${PAWPAW_PREFIX}/bin/pkg-config --static"
  128. TARGET_PKG_CONFIG_PATH="${PAWPAW_PREFIX}/lib/pkgconfig"
  129. # Force compiler path on macOS universal builds
  130. # FIXME remove this after github actions macos-11 image is available for public use
  131. if [ "${MACOS_UNIVERSAL}" -eq 1 ] && [ "${CROSS_COMPILING}" -eq 0 ]; then
  132. xcode_dir="$(xcode-select -p | head -1)"
  133. TARGET_CC="${xcode_dir}/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang"
  134. TARGET_CXX="${xcode_dir}/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++"
  135. fi
  136. # ---------------------------------------------------------------------------------------------------------------------
  137. # other
  138. MAKE_ARGS=""
  139. WAF_ARGS=""
  140. unset EXE_WRAPPER
  141. unset WINEARCH
  142. unset WINEDLLOVERRIDES
  143. unset WINEPREFIX
  144. if which nproc > /dev/null; then
  145. MAKE_ARGS+="-j $(nproc)"
  146. WAF_ARGS+="-j $(nproc)"
  147. elif [ "${MACOS}" -eq 1 ]; then
  148. MAKE_ARGS+="-j $(sysctl -n hw.logicalcpu)"
  149. WAF_ARGS+="-j $(sysctl -n hw.logicalcpu)"
  150. fi
  151. if [ "${CROSS_COMPILING}" -eq 1 ]; then
  152. MAKE_ARGS+=" CROSS_COMPILING=true"
  153. if [ "${WIN32}" -eq 1 ]; then
  154. export EXE_WRAPPER="wine"
  155. export WINEARCH="${PAWPAW_TARGET}"
  156. export WINEDLLOVERRIDES="mscoree,mshtml="
  157. export WINEPREFIX="${PAWPAW_PREFIX}/wine"
  158. fi
  159. fi
  160. if [ "${MACOS}" -eq 1 ]; then
  161. MAKE_ARGS+=" MACOS=true"
  162. if [ "${MACOS_OLD}" -eq 1 ]; then
  163. MAKE_ARGS+=" MACOS_OLD=true"
  164. elif [ "${MACOS_UNIVERSAL}" -eq 1 ]; then
  165. MAKE_ARGS+=" MACOS_UNIVERSAL=true"
  166. fi
  167. elif [ "${WIN32}" -eq 1 ]; then
  168. MAKE_ARGS+=" WINDOWS=true WIN32=true"
  169. if [ "${WIN64}" -eq 1 ]; then
  170. MAKE_ARGS+=" WIN64=true"
  171. fi
  172. fi
  173. # ---------------------------------------------------------------------------------------------------------------------