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.

403 lines
15KB

  1. #!/bin/bash
  2. set -e
  3. cd $(dirname ${0})
  4. PAWPAW_ROOT="${PWD}"
  5. # ---------------------------------------------------------------------------------------------------------------------
  6. # check target
  7. target="${1}"
  8. if [ -z "${target}" ]; then
  9. echo "usage: ${0} <target>"
  10. exit 1
  11. fi
  12. # ---------------------------------------------------------------------------------------------------------------------
  13. # LTO is unwanted for MOD builds, make sure it is off
  14. export PAWPAW_SKIP_LTO=1
  15. # ---------------------------------------------------------------------------------------------------------------------
  16. # run bootstrap dependencies
  17. ./bootstrap-common.sh "${target}"
  18. ./bootstrap-jack2.sh "${target}"
  19. ./bootstrap-plugins.sh "${target}"
  20. ./bootstrap-python.sh "${target}"
  21. # ---------------------------------------------------------------------------------------------------------------------
  22. # source setup code
  23. source setup/check_target.sh
  24. source setup/env.sh
  25. source setup/functions.sh
  26. source setup/versions.sh
  27. # Use local Qt on Linux builds
  28. if [ "${LINUX}" -eq 1 ]; then
  29. if [ "${LINUX_TARGET}" = "linux-aarch64" ]; then
  30. export PKG_CONFIG_PATH=/usr/lib/aarch64-linux-gnu/pkgconfig
  31. elif [ "${LINUX_TARGET}" = "linux-armhf" ]; then
  32. export PKG_CONFIG_PATH=/usr/lib/arm-linux-gnueabihf/pkgconfig
  33. elif [ "${LINUX_TARGET}" = "linux-i686" ]; then
  34. export PKG_CONFIG_PATH=/usr/lib/i386-linux-gnu/pkgconfig
  35. elif [ "${LINUX_TARGET}" = "linux-riscv64" ]; then
  36. export PKG_CONFIG_PATH=/usr/lib/riscv64-linux-gnu/pkgconfig
  37. elif [ "${LINUX_TARGET}" = "linux-x86_64" ]; then
  38. export PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig
  39. fi
  40. if ! pkg-config --exists Qt5Core Qt5Gui Qt5Svg Qt5Widgets; then
  41. echo "Qt system libs are not available, cannot continue"
  42. exit 2
  43. fi
  44. if [ ! -e "${TARGET_PKG_CONFIG_PATH}/Qt5Core.pc" ]; then
  45. cp $(pkg-config --variable=pcfiledir Qt5Core)/Qt5Core.pc ${TARGET_PKG_CONFIG_PATH}/
  46. sed -i '/Libs.private/d' ${TARGET_PKG_CONFIG_PATH}/Qt5Core.pc
  47. fi
  48. if [ ! -e "${TARGET_PKG_CONFIG_PATH}/Qt5Gui.pc" ]; then
  49. cp $(pkg-config --variable=pcfiledir Qt5Gui)/Qt5Gui.pc ${TARGET_PKG_CONFIG_PATH}/
  50. sed -i '/Libs.private/d' ${TARGET_PKG_CONFIG_PATH}/Qt5Gui.pc
  51. fi
  52. if [ ! -e "${TARGET_PKG_CONFIG_PATH}/Qt5Svg.pc" ]; then
  53. cp $(pkg-config --variable=pcfiledir Qt5Svg)/Qt5Svg.pc ${TARGET_PKG_CONFIG_PATH}/
  54. sed -i '/Libs.private/d' ${TARGET_PKG_CONFIG_PATH}/Qt5Svg.pc
  55. fi
  56. if [ ! -e "${TARGET_PKG_CONFIG_PATH}/Qt5Widgets.pc" ]; then
  57. cp $(pkg-config --variable=pcfiledir Qt5Widgets)/Qt5Widgets.pc ${TARGET_PKG_CONFIG_PATH}/
  58. sed -i '/Libs.private/d' ${TARGET_PKG_CONFIG_PATH}/Qt5Widgets.pc
  59. fi
  60. else
  61. ./bootstrap-qt.sh "${target}"
  62. fi
  63. # ---------------------------------------------------------------------------------------------------------------------
  64. # merged usr mode
  65. mkdir -p "${PAWPAW_PREFIX}/bin"
  66. mkdir -p "${PAWPAW_PREFIX}/docs"
  67. mkdir -p "${PAWPAW_PREFIX}/etc"
  68. mkdir -p "${PAWPAW_PREFIX}/include"
  69. mkdir -p "${PAWPAW_PREFIX}/lib"
  70. mkdir -p "${PAWPAW_PREFIX}/share"
  71. mkdir -p "${PAWPAW_PREFIX}/usr"
  72. if [ ! -e "${PAWPAW_PREFIX}/usr/bin" ]; then
  73. ln -s ../bin "${PAWPAW_PREFIX}/usr/bin"
  74. fi
  75. if [ ! -e "${PAWPAW_PREFIX}/usr/docs" ]; then
  76. ln -s ../docs "${PAWPAW_PREFIX}/usr/docs"
  77. fi
  78. if [ ! -e "${PAWPAW_PREFIX}/usr/etc" ]; then
  79. ln -s ../etc "${PAWPAW_PREFIX}/usr/etc"
  80. fi
  81. if [ ! -e "${PAWPAW_PREFIX}/usr/include" ]; then
  82. ln -s ../include "${PAWPAW_PREFIX}/usr/include"
  83. fi
  84. if [ ! -e "${PAWPAW_PREFIX}/usr/lib" ]; then
  85. ln -s ../lib "${PAWPAW_PREFIX}/usr/lib"
  86. fi
  87. if [ ! -e "${PAWPAW_PREFIX}/usr/share" ]; then
  88. ln -s ../share "${PAWPAW_PREFIX}/usr/share"
  89. fi
  90. # ---------------------------------------------------------------------------------------------------------------------
  91. # merged usr mode (host)
  92. mkdir -p "${PAWPAW_PREFIX}-host/bin"
  93. mkdir -p "${PAWPAW_PREFIX}-host/usr"
  94. if [ ! -e "${PAWPAW_PREFIX}-host/usr/bin" ]; then
  95. ln -s ../bin "${PAWPAW_PREFIX}-host/usr/bin"
  96. fi
  97. # ---------------------------------------------------------------------------------------------------------------------
  98. # GNU tools by default on macOS
  99. if [ "${MACOS}" -eq 1 ]; then
  100. if [ ! -e "${PAWPAW_PREFIX}-host/bin/awk" ]; then
  101. ln -s $(command -v gawk) "${PAWPAW_PREFIX}-host/bin/awk"
  102. fi
  103. if [ ! -e "${PAWPAW_PREFIX}-host/bin/cp" ]; then
  104. ln -s $(command -v gcp) "${PAWPAW_PREFIX}-host/bin/cp"
  105. fi
  106. if [ ! -e "${PAWPAW_PREFIX}-host/bin/install" ]; then
  107. ln -s $(command -v ginstall) "${PAWPAW_PREFIX}-host/bin/install"
  108. fi
  109. if [ ! -e "${PAWPAW_PREFIX}-host/bin/libtool" ]; then
  110. ln -s $(command -v glibtool) "${PAWPAW_PREFIX}-host/bin/libtool"
  111. fi
  112. if [ ! -e "${PAWPAW_PREFIX}-host/bin/libtoolize" ]; then
  113. ln -s $(command -v glibtoolize) "${PAWPAW_PREFIX}-host/bin/libtoolize"
  114. fi
  115. if [ ! -e "${PAWPAW_PREFIX}-host/bin/m4" ]; then
  116. ln -s $(command -v gm4) "${PAWPAW_PREFIX}-host/bin/m4"
  117. fi
  118. if [ ! -e "${PAWPAW_PREFIX}-host/bin/make" ]; then
  119. ln -s $(command -v gmake) "${PAWPAW_PREFIX}-host/bin/make"
  120. fi
  121. if [ ! -e "${PAWPAW_PREFIX}-host/bin/readlink" ]; then
  122. ln -s $(command -v greadlink) "${PAWPAW_PREFIX}-host/bin/readlink"
  123. fi
  124. if [ ! -e "${PAWPAW_PREFIX}-host/bin/realpath" ]; then
  125. ln -s $(command -v grealpath) "${PAWPAW_PREFIX}-host/bin/realpath"
  126. fi
  127. if [ ! -e "${PAWPAW_PREFIX}-host/bin/sed" ]; then
  128. ln -s $(command -v gsed) "${PAWPAW_PREFIX}-host/bin/sed"
  129. fi
  130. fi
  131. # ---------------------------------------------------------------------------------------------------------------------
  132. # armadillo
  133. ARMADILLO_VERSION="12.6.5"
  134. ARMADILLO_URL="http://download.sourceforge.net/arma"
  135. download armadillo "${ARMADILLO_VERSION}" "${ARMADILLO_URL}" "tar.xz"
  136. build_cmake armadillo "${ARMADILLO_VERSION}" "${ARMADILLO_EXTRAFLAGS}"
  137. # ---------------------------------------------------------------------------------------------------------------------
  138. # hylia
  139. HYLIA_VERSION="6421909123974ffd431ace47589975f5929bc746"
  140. HYLIA_URL="https://github.com/falkTX/hylia.git"
  141. HYLIA_EXTRAFLAGS="NOOPT=true"
  142. download hylia "${HYLIA_VERSION}" "${HYLIA_URL}" "" "git"
  143. build_make hylia "${HYLIA_VERSION}" "${HYLIA_EXTRAFLAGS}"
  144. # ---------------------------------------------------------------------------------------------------------------------
  145. # jack2
  146. JACK2_VERSION="0d730dd3567f250edaa899af906b8a8593e3492f"
  147. JACK2_URL="https://github.com/jackaudio/jack2.git"
  148. JACK2_EXTRAFLAGS=""
  149. JACK2_EXTRAFLAGS+=" --autostart=none"
  150. JACK2_EXTRAFLAGS+=" --classic"
  151. JACK2_EXTRAFLAGS+=" --db=no"
  152. JACK2_EXTRAFLAGS+=" --doxygen=no"
  153. JACK2_EXTRAFLAGS+=" --firewire=no"
  154. JACK2_EXTRAFLAGS+=" --iio=no"
  155. JACK2_EXTRAFLAGS+=" --celt=no"
  156. JACK2_EXTRAFLAGS+=" --opus=no"
  157. JACK2_EXTRAFLAGS+=" --samplerate=no"
  158. JACK2_EXTRAFLAGS+=" --systemd=no"
  159. if [ "${LINUX}" -eq 1 ]; then
  160. JACK2_EXTRAFLAGS+=" --platform=linux --portaudio=yes --alsa=yes"
  161. elif [ "${MACOS}" -eq 1 ]; then
  162. JACK2_EXTRAFLAGS+=" --platform=darwin"
  163. elif [ "${WIN32}" -eq 1 ]; then
  164. JACK2_EXTRAFLAGS+=" --platform=win32"
  165. fi
  166. if [ "${WIN32}" -eq 1 ]; then
  167. JACK2_EXTRAFLAGS+=" --static"
  168. fi
  169. if [ "${LINUX}" -eq 1 ]; then
  170. export EXTRA_LDFLAGS='-Wl,-rpath,$ORIGIN -Wl,-rpath,$ORIGIN/.. -Wl,-rpath,$ORIGIN/../lib'
  171. fi
  172. download jack2 "${JACK2_VERSION}" "${JACK2_URL}" "" "git"
  173. build_waf jack2 "${JACK2_VERSION}" "${JACK2_EXTRAFLAGS}"
  174. # patch pkg-config file for static win32 builds
  175. if [ "${WIN32}" -eq 1 ]; then
  176. if [ "${WIN64}" -eq 1 ]; then
  177. s="64"
  178. else
  179. s=""
  180. fi
  181. sed -i -e "s/-L\${libdir} -ljack${s}/-L\${libdir} -Wl,-Bdynamic -ljackserver${s} -Wl,-Bstatic/" "${PAWPAW_PREFIX}/lib/pkgconfig/jack.pc"
  182. fi
  183. # ---------------------------------------------------------------------------------------------------------------------
  184. # jack-example-tools
  185. JACK_EXAMPLE_TOOLS_VERSION="7cf014d3b3b75ad88a0785957b0f2cffad243b6b"
  186. JACK_EXAMPLE_TOOLS_URL="https://github.com/jackaudio/jack-example-tools.git"
  187. JACK_EXAMPLE_TOOLS_EXTRAFLAGS=""
  188. JACK_EXAMPLE_TOOLS_EXTRAFLAGS+=" -Dalsa_in_out=disabled"
  189. JACK_EXAMPLE_TOOLS_EXTRAFLAGS+=" -Djack_net=disabled"
  190. JACK_EXAMPLE_TOOLS_EXTRAFLAGS+=" -Djack_netsource=disabled"
  191. JACK_EXAMPLE_TOOLS_EXTRAFLAGS+=" -Djack_rec=disabled"
  192. JACK_EXAMPLE_TOOLS_EXTRAFLAGS+=" -Dopus_support=disabled"
  193. JACK_EXAMPLE_TOOLS_EXTRAFLAGS+=" -Dreadline_support=disabled"
  194. JACK_EXAMPLE_TOOLS_EXTRAFLAGS+=" -Dzalsa=disabled"
  195. if [ "${LINUX}" -eq 1 ]; then
  196. JACK_EXAMPLE_TOOLS_EXTRAFLAGS+=" -Dalsa_midi=enabled"
  197. else
  198. JACK_EXAMPLE_TOOLS_EXTRAFLAGS+=" -Dalsa_midi=disabled"
  199. fi
  200. download jack-example-tools "${JACK_EXAMPLE_TOOLS_VERSION}" "${JACK_EXAMPLE_TOOLS_URL}" "" "git"
  201. build_meson jack-example-tools "${JACK_EXAMPLE_TOOLS_VERSION}" "${JACK_EXAMPLE_TOOLS_EXTRAFLAGS}"
  202. # ---------------------------------------------------------------------------------------------------------------------
  203. # lvtk1
  204. LVTK1_VERSION="c105fd5077b4f7d963ad543b9979b94b9b052551"
  205. LVTK1_URL="https://github.com/lvtk/lvtk.git"
  206. LVTK1_EXTRAFLAGS=""
  207. LVTK1_EXTRAFLAGS+=" --disable-examples"
  208. LVTK1_EXTRAFLAGS+=" --disable-tools"
  209. LVTK1_EXTRAFLAGS+=" --disable-ui"
  210. download lvtk1 "${LVTK1_VERSION}" "${LVTK1_URL}" "" "git"
  211. # force waf update for py3 compat
  212. if [ ! -e "${PAWPAW_BUILDDIR}/lvtk1-${LVTK1_VERSION}/.stamp_configured" ]; then
  213. cp -v "${PAWPAW_BUILDDIR}/jack2-${JACK2_VERSION}/waf" "${PAWPAW_BUILDDIR}/lvtk1-${LVTK1_VERSION}/"
  214. cp -rv "${PAWPAW_BUILDDIR}/jack2-${JACK2_VERSION}/waflib" "${PAWPAW_BUILDDIR}/lvtk1-${LVTK1_VERSION}/"
  215. fi
  216. build_waf lvtk1 "${LVTK1_VERSION}" "${LVTK1_EXTRAFLAGS}"
  217. # ---------------------------------------------------------------------------------------------------------------------
  218. # aggdraw
  219. AGGDRAW_VERSION="1.3.11"
  220. export EXTRA_CFLAGS="$(${PAWPAW_PREFIX}/bin/pkg-config --cflags python3 freetype2 libpng)"
  221. export EXTRA_LDFLAGS="$(${PAWPAW_PREFIX}/bin/pkg-config --libs python3 freetype2 libpng) -shared"
  222. if [ "${MACOS}" -eq 1 ]; then
  223. export EXTRA_LDFLAGS+=" -Wl,-undefined,dynamic_lookup"
  224. elif [ "${WIN32}" -eq 1 ]; then
  225. export EXTRA_LDFLAGS+=" -lgdi32 -lkernel32 -luser32"
  226. fi
  227. export AGGDRAW_FREETYPE_ROOT="${PAWPAW_PREFIX}"
  228. export LDSHARED="${TARGET_CXX}"
  229. download aggdraw "${AGGDRAW_VERSION}" "https://files.pythonhosted.org/packages/ef/29/fddf555c68920bb0aff977425af786226db2a78379e706951ff32b4492ef"
  230. build_python aggdraw "${AGGDRAW_VERSION}"
  231. unset AGGDRAW_FREETYPE_ROOT
  232. unset LDSHARED
  233. if [ "${WIN32}" -eq 1 ] && [ "${CROSS_COMPILING}" -eq 1 ]; then
  234. PYTHONPATH="${PAWPAW_PREFIX}/lib/python3.8/site-packages"
  235. if [ ! -e "${PYTHONPATH}/aggdraw.py" ]; then
  236. ln -sv "${PYTHONPATH}"/aggdraw-*.egg/aggdraw.py "${PYTHONPATH}/aggdraw.py"
  237. fi
  238. if [ ! -e "${PYTHONPATH}/aggdraw.pyd" ]; then
  239. ln -sv "${PYTHONPATH}"/aggdraw-*.egg/*.so "${PYTHONPATH}/aggdraw.pyd"
  240. fi
  241. unset PYTHONPATH
  242. fi
  243. # ---------------------------------------------------------------------------------------------------------------------
  244. # setuptools
  245. SETUPTOOLS_VERSION="68.2.2"
  246. download setuptools "${SETUPTOOLS_VERSION}" "https://files.pythonhosted.org/packages/ef/cc/93f7213b2ab5ed383f98ce8020e632ef256b406b8569606c3f160ed8e1c9"
  247. build_python setuptools "${SETUPTOOLS_VERSION}"
  248. if [ "${WIN32}" -eq 1 ] && [ "${CROSS_COMPILING}" -eq 1 ]; then
  249. PYTHONPATH="${PAWPAW_PREFIX}/lib/python3.8/site-packages"
  250. if [ ! -e "${PYTHONPATH}/_distutils_hack" ]; then
  251. ln -sv "${PYTHONPATH}"/setuptools-*.egg/_distutils_hack "${PYTHONPATH}/_distutils_hack"
  252. fi
  253. if [ ! -e "${PYTHONPATH}/pkg_resources" ]; then
  254. ln -sv "${PYTHONPATH}"/setuptools-*.egg/pkg_resources "${PYTHONPATH}/pkg_resources"
  255. fi
  256. if [ ! -e "${PYTHONPATH}/setuptools" ]; then
  257. ln -sv "${PYTHONPATH}"/setuptools-*.egg/setuptools "${PYTHONPATH}/setuptools"
  258. fi
  259. unset PYTHONPATH
  260. fi
  261. # ---------------------------------------------------------------------------------------------------------------------
  262. # Pillow
  263. PILLOW_VERSION="8.2.0"
  264. export EXTRA_CFLAGS="$(${PAWPAW_PREFIX}/bin/pkg-config --cflags python3 freetype2 libpng)"
  265. export EXTRA_LDFLAGS="$(${PAWPAW_PREFIX}/bin/pkg-config --libs python3 freetype2 libpng) -shared"
  266. if [ "${MACOS}" -eq 1 ]; then
  267. export EXTRA_LDFLAGS+=" -Wl,-undefined,dynamic_lookup"
  268. elif [ "${WIN32}" -eq 1 ]; then
  269. export EXTRA_LDFLAGS+=" -lgdi32 -lkernel32 -lpsapi -luser32"
  270. fi
  271. export LDSHARED="${TARGET_CXX}"
  272. PILLOW_EXTRAFLAGS=""
  273. PILLOW_EXTRAFLAGS+=" --enable-freetype"
  274. PILLOW_EXTRAFLAGS+=" --enable-zlib"
  275. PILLOW_EXTRAFLAGS+=" --disable-imagequant"
  276. PILLOW_EXTRAFLAGS+=" --disable-jpeg"
  277. PILLOW_EXTRAFLAGS+=" --disable-jpeg2000"
  278. PILLOW_EXTRAFLAGS+=" --disable-tiff"
  279. PILLOW_EXTRAFLAGS+=" --disable-webp"
  280. PILLOW_EXTRAFLAGS+=" --disable-webpmux"
  281. PILLOW_EXTRAFLAGS+=" --disable-xcb"
  282. if [ "${WIN32}" -eq 1 ] && [ "${CROSS_COMPILING}" -eq 1 ]; then
  283. PILLOW_EXTRAFLAGS+=" --disable-platform-guessing"
  284. fi
  285. download Pillow "${PILLOW_VERSION}" "https://files.pythonhosted.org/packages/21/23/af6bac2a601be6670064a817273d4190b79df6f74d8012926a39bc7aa77f"
  286. build_python Pillow "${PILLOW_VERSION}" "${PILLOW_EXTRAFLAGS}"
  287. unset LDSHARED
  288. if [ "${WIN32}" -eq 1 ] && [ "${CROSS_COMPILING}" -eq 1 ]; then
  289. PYTHONPATH="${PAWPAW_PREFIX}/lib/python3.8/site-packages"
  290. if [ ! -e "${PYTHONPATH}/PIL" ]; then
  291. ln -sv "${PYTHONPATH}"/Pillow-*.egg/PIL "${PYTHONPATH}/PIL"
  292. fi
  293. if [ ! -e "${PYTHONPATH}/PIL/_imaging.pyd" ]; then
  294. ln -sv "${PYTHONPATH}"/Pillow-*.egg/PIL/_imaging.*.so "${PYTHONPATH}/PIL/_imaging.pyd"
  295. fi
  296. if [ ! -e "${PYTHONPATH}/PIL/_imagingft.pyd" ]; then
  297. ln -sv "${PYTHONPATH}"/Pillow-*.egg/PIL/_imagingft.*.so "${PYTHONPATH}/PIL/_imagingft.pyd"
  298. fi
  299. if [ ! -e "${PYTHONPATH}/PIL/_imagingmath.pyd" ]; then
  300. ln -sv "${PYTHONPATH}"/Pillow-*.egg/PIL/_imagingmath.*.so "${PYTHONPATH}/PIL/_imagingmath.pyd"
  301. fi
  302. if [ ! -e "${PYTHONPATH}/PIL/_imagingmorph.pyd" ]; then
  303. ln -sv "${PYTHONPATH}"/Pillow-*.egg/PIL/_imagingmorph.*.so "${PYTHONPATH}/PIL/_imagingmorph.pyd"
  304. fi
  305. if [ ! -e "${PYTHONPATH}/PIL/_imagingtk.pyd" ]; then
  306. ln -sv "${PYTHONPATH}"/Pillow-*.egg/PIL/_imagingtk.*.so "${PYTHONPATH}/PIL/_imagingtk.pyd"
  307. fi
  308. unset PYTHONPATH
  309. fi
  310. # ---------------------------------------------------------------------------------------------------------------------
  311. # tornado
  312. TORNADO_VERSION="4.3"
  313. download tornado "${TORNADO_VERSION}" "https://files.pythonhosted.org/packages/21/29/e64c97013e97d42d93b3d5997234a6f17455f3744847a7c16289289f8fa6"
  314. build_python tornado "${TORNADO_VERSION}"
  315. if [ "${WIN32}" -eq 1 ] && [ "${CROSS_COMPILING}" -eq 1 ]; then
  316. PYTHONPATH="${PAWPAW_PREFIX}/lib/python3.8/site-packages"
  317. if [ ! -e "${PYTHONPATH}/tornado" ]; then
  318. ln -sv "${PYTHONPATH}"/tornado-*.egg/tornado "${PYTHONPATH}/tornado"
  319. fi
  320. unset PYTHONPATH
  321. fi
  322. # ---------------------------------------------------------------------------------------------------------------------