Audio plugin host https://kx.studio/carla
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.

388 lines
12KB

  1. #!/bin/bash
  2. # ---------------------------------------------------------------------------------------------------------------------
  3. # stop on error
  4. set -e
  5. # ---------------------------------------------------------------------------------------------------------------------
  6. # cd to correct path
  7. cd $(dirname $0)
  8. # ---------------------------------------------------------------------------------------------------------------------
  9. # set variables
  10. source common.env
  11. # ---------------------------------------------------------------------------------------------------------------------
  12. # function to remove old stuff
  13. cleanup_prefix()
  14. {
  15. rm -rf ${TARGETDIR}/carla-w32nosse ${TARGETDIR}/carla-w32 ${TARGETDIR}/carla-w64
  16. }
  17. cleanup_pkgs()
  18. {
  19. rm -rf flac-*
  20. rm -rf fluidsynth-*
  21. rm -rf fftw-*
  22. rm -rf glib-*
  23. rm -rf liblo-*
  24. rm -rf libogg-*
  25. rm -rf libsndfile-*
  26. rm -rf libvorbis-*
  27. rm -rf mxml-*
  28. rm -rf pkg-config-*
  29. rm -rf zlib-*
  30. }
  31. cleanup()
  32. {
  33. cleanup_prefix
  34. cleanup_pkgs
  35. exit 0
  36. }
  37. # ------------------------------------------------------------------------------------
  38. # function to build base libs
  39. build_base()
  40. {
  41. # ---------------------------------------------------------------------------------------------------------------------
  42. # clean env
  43. unset AR
  44. unset CC
  45. unset CXX
  46. unset STRIP
  47. unset WINDRES
  48. unset PKG_CONFIG_PATH
  49. unset CFLAGS
  50. unset CPPFLAGS
  51. unset CXXFLAGS
  52. unset LDFLAGS
  53. export PREFIX=${TARGETDIR}/carla-w${ARCH_PREFIX}
  54. export PATH=${PREFIX}/bin:/usr/sbin:/usr/bin:/sbin:/bin
  55. export PKG_CONFIG_PATH=${PREFIX}/lib/pkgconfig
  56. # ---------------------------------------------------------------------------------------------------------------------
  57. # pkgconfig
  58. if [ ! -d pkg-config-${PKG_CONFIG_VERSION} ]; then
  59. wget -c https://pkg-config.freedesktop.org/releases/pkg-config-${PKG_CONFIG_VERSION}.tar.gz
  60. tar -xf pkg-config-${PKG_CONFIG_VERSION}.tar.gz
  61. fi
  62. if [ ! -f pkg-config-${PKG_CONFIG_VERSION}/build-done ]; then
  63. cd pkg-config-${PKG_CONFIG_VERSION}
  64. env AR="ar" CC="gcc" STRIP="strip" CFLAGS="" LDFLAGS="" PATH="/usr/sbin:/usr/bin:/sbin:/bin" \
  65. ./configure --enable-indirect-deps --with-internal-glib --with-pc-path=${PKG_CONFIG_PATH} --prefix=${PREFIX}
  66. make ${MAKE_ARGS}
  67. make install
  68. touch build-done
  69. cd ..
  70. fi
  71. # ---------------------------------------------------------------------------------------------------------------------
  72. # setup
  73. if [ x"${ARCH}" != x"32" ]; then
  74. CPUARCH="x86_64"
  75. else
  76. CPUARCH="i686"
  77. fi
  78. HOST_ARCH=$(dpkg-architecture -qDEB_BUILD_GNU_TYPE)
  79. MINGW_PREFIX="${CPUARCH}-w64-mingw32"
  80. export AR=${MINGW_PREFIX}-ar
  81. export CC=${MINGW_PREFIX}-gcc
  82. export CXX=${MINGW_PREFIX}-g++
  83. export STRIP=${MINGW_PREFIX}-strip
  84. export WINDRES=${MINGW_PREFIX}-windres
  85. if [ -z "${NOSSE}" ]; then
  86. export CFLAGS="-O3 -mtune=generic -msse -msse2 -mfpmath=sse -mstackrealign -fvisibility=hidden -fdata-sections -ffunction-sections"
  87. else
  88. export CFLAGS="-O2 -mstackrealign -fvisibility=hidden -fdata-sections -ffunction-sections"
  89. fi
  90. export CFLAGS="${CFLAGS} -DNDEBUG -DPTW32_STATIC_LIB -DFLUIDSYNTH_NOT_A_DLL -I${PREFIX}/include -I/opt/mingw${ARCH}/include"
  91. export CXXFLAGS="${CFLAGS} -fvisibility-inlines-hidden"
  92. export CPPFLAGS="-DPIC -DNDEBUG -DPTW32_STATIC_LIB -I${PREFIX}/include -I/opt/mingw${ARCH}/include"
  93. export LDFLAGS="-fdata-sections -ffunction-sections -Wl,--gc-sections -Wl,-O1 -Wl,--as-needed -Wl,--strip-all"
  94. export LDFLAGS="${LDFLAGS} -L${PREFIX}/lib -L/opt/mingw${ARCH}/lib"
  95. # ---------------------------------------------------------------------------------------------------------------------
  96. # liblo
  97. if [ ! -d liblo-${LIBLO_VERSION} ]; then
  98. wget -c https://github.com/radarsat1/liblo/releases/download/${LIBLO_VERSION}/liblo-${LIBLO_VERSION}.tar.gz
  99. tar -xf liblo-${LIBLO_VERSION}.tar.gz
  100. fi
  101. if [ ! -f liblo-${LIBLO_VERSION}/build-done ]; then
  102. cd liblo-${LIBLO_VERSION}
  103. sed -i "s/@extralibs@/@extralibs@ -lm/" liblo.pc.in
  104. ./configure --enable-static --disable-shared --prefix=${PREFIX} \
  105. --target=${MINGW_PREFIX} --host=${MINGW_PREFIX} --build=${HOST_ARCH} \
  106. --enable-threads \
  107. --disable-examples --disable-tools
  108. make ${MAKE_ARGS}
  109. make install
  110. touch build-done
  111. cd ..
  112. fi
  113. # ---------------------------------------------------------------------------------------------------------------------
  114. # zlib
  115. if [ ! -d zlib-${ZLIB_VERSION} ]; then
  116. wget -c https://github.com/madler/zlib/archive/v${ZLIB_VERSION}.tar.gz -O zlib-${ZLIB_VERSION}.tar.gz
  117. tar -xf zlib-${ZLIB_VERSION}.tar.gz
  118. fi
  119. if [ ! -f zlib-${ZLIB_VERSION}/build-done ]; then
  120. cd zlib-${ZLIB_VERSION}
  121. ./configure --static --prefix=${PREFIX}
  122. make ${MAKE_ARGS}
  123. make install
  124. touch build-done
  125. cd ..
  126. fi
  127. # ---------------------------------------------------------------------------------------------------------------------
  128. # libogg
  129. if [ ! -d libogg-${LIBOGG_VERSION} ]; then
  130. wget -c https://ftp.osuosl.org/pub/xiph/releases/ogg/libogg-${LIBOGG_VERSION}.tar.gz
  131. tar -xf libogg-${LIBOGG_VERSION}.tar.gz
  132. fi
  133. if [ ! -f libogg-${LIBOGG_VERSION}/build-done ]; then
  134. cd libogg-${LIBOGG_VERSION}
  135. ./configure --enable-static --disable-shared --prefix=${PREFIX} \
  136. --target=${MINGW_PREFIX} --host=${MINGW_PREFIX} --build=${HOST_ARCH}
  137. make ${MAKE_ARGS}
  138. make install
  139. touch build-done
  140. cd ..
  141. fi
  142. # ---------------------------------------------------------------------------------------------------------------------
  143. # libvorbis
  144. if [ ! -d libvorbis-${LIBVORBIS_VERSION} ]; then
  145. wget -c https://ftp.osuosl.org/pub/xiph/releases/vorbis/libvorbis-${LIBVORBIS_VERSION}.tar.gz
  146. tar -xf libvorbis-${LIBVORBIS_VERSION}.tar.gz
  147. fi
  148. if [ ! -f libvorbis-${LIBVORBIS_VERSION}/build-done ]; then
  149. cd libvorbis-${LIBVORBIS_VERSION}
  150. ./configure --enable-static --disable-shared --prefix=${PREFIX} \
  151. --target=${MINGW_PREFIX} --host=${MINGW_PREFIX} --build=${HOST_ARCH}
  152. make ${MAKE_ARGS}
  153. make install
  154. touch build-done
  155. cd ..
  156. fi
  157. # ---------------------------------------------------------------------------------------------------------------------
  158. # flac
  159. if [ ! -d flac-${FLAC_VERSION} ]; then
  160. wget -c https://ftp.osuosl.org/pub/xiph/releases/flac/flac-${FLAC_VERSION}.tar.xz
  161. tar -xf flac-${FLAC_VERSION}.tar.xz
  162. fi
  163. if [ ! -f flac-${FLAC_VERSION}/build-done ]; then
  164. cd flac-${FLAC_VERSION}
  165. chmod +x configure install-sh
  166. ./configure --enable-static --disable-shared --prefix=${PREFIX} \
  167. --target=${MINGW_PREFIX} --host=${MINGW_PREFIX} --build=${HOST_ARCH} \
  168. --disable-cpplibs
  169. make ${MAKE_ARGS}
  170. make install
  171. touch build-done
  172. cd ..
  173. fi
  174. # ---------------------------------------------------------------------------------------------------------------------
  175. # libsndfile
  176. if [ ! -d libsndfile-${LIBSNDFILE_VERSION} ]; then
  177. wget -c http://www.mega-nerd.com/libsndfile/files/libsndfile-${LIBSNDFILE_VERSION}.tar.gz
  178. tar -xf libsndfile-${LIBSNDFILE_VERSION}.tar.gz
  179. fi
  180. if [ ! -f libsndfile-${LIBSNDFILE_VERSION}/build-done ]; then
  181. cd libsndfile-${LIBSNDFILE_VERSION}
  182. ./configure --enable-static --disable-shared --prefix=${PREFIX} \
  183. --target=${MINGW_PREFIX} --host=${MINGW_PREFIX} --build=${HOST_ARCH} \
  184. --disable-full-suite --disable-alsa --disable-sqlite
  185. make ${MAKE_ARGS}
  186. make install
  187. touch build-done
  188. cd ..
  189. fi
  190. # ------------------------------------------------------------------------------------
  191. # glib
  192. if [ ! -d glib-${GLIB_VERSION} ]; then
  193. wget -c http://caesar.ftp.acc.umu.se/pub/GNOME/sources/glib/${GLIB_MVERSION}/glib-${GLIB_VERSION}.tar.gz
  194. tar -xf glib-${GLIB_VERSION}.tar.gz
  195. fi
  196. if [ ! -f glib-${GLIB_VERSION}/build-done ]; then
  197. cd glib-${GLIB_VERSION}
  198. if [ ! -f patched ]; then
  199. patch -p1 -i ../patches/glib_skip-gettext.patch
  200. sed -i "s|po docs|po|" Makefile.in
  201. touch patched
  202. fi
  203. chmod +x configure install-sh
  204. autoconf
  205. ./configure --enable-static --disable-shared --disable-docs --prefix=${PREFIX} \
  206. --target=${MINGW_PREFIX} --host=${MINGW_PREFIX} --build=${HOST_ARCH} \
  207. --with-threads=win32
  208. make ${MAKE_ARGS}
  209. make install
  210. touch build-done
  211. cd ..
  212. fi
  213. # ---------------------------------------------------------------------------------------------------------------------
  214. # fluidsynth
  215. if [ ! -d fluidsynth-${FLUIDSYNTH_VERSION} ]; then
  216. wget -c https://github.com/FluidSynth/fluidsynth/archive/v${FLUIDSYNTH_VERSION}.tar.gz -O fluidsynth-${FLUIDSYNTH_VERSION}.tar.gz
  217. tar -xf fluidsynth-${FLUIDSYNTH_VERSION}.tar.gz
  218. fi
  219. if [ ! -f fluidsynth-${FLUIDSYNTH_VERSION}/build-done ]; then
  220. cd fluidsynth-${FLUIDSYNTH_VERSION}
  221. if [ ! -f patched ]; then
  222. patch -p1 -i ../../patches/fluidsynth-skip-drivers-build.patch
  223. touch patched
  224. fi
  225. cmake . -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=${PREFIX} -DBUILD_SHARED_LIBS=OFF \
  226. -Denable-debug=OFF -Denable-profiling=OFF -Denable-ladspa=OFF -Denable-fpe-check=OFF -Denable-portaudio=OFF \
  227. -Denable-trap-on-fpe=OFF -Denable-aufile=OFF -Denable-dbus=OFF -Denable-ipv6=OFF -Denable-jack=OFF \
  228. -Denable-midishare=OFF -Denable-oss=OFF -Denable-pulseaudio=OFF -Denable-readline=OFF -Denable-ladcca=OFF \
  229. -Denable-lash=OFF -Denable-alsa=OFF -Denable-coreaudio=OFF -Denable-coremidi=OFF -Denable-framework=OFF \
  230. -Denable-floats=ON \
  231. -DCMAKE_C_COMPILER_WORKS=1 \
  232. -DCMAKE_CROSSCOMPILING=1 \
  233. -DCMAKE_SYSTEM_NAME="Windows" \
  234. -DCMAKE_HOST_SYSTEM_NAME=${HOST_ARCH}
  235. make ${MAKE_ARGS}
  236. make install
  237. sed -i -e "s|-lfluidsynth|-lfluidsynth -lglib-2.0 -lgthread-2.0 -lsndfile -lFLAC -lvorbisenc -lvorbis -logg -lm -ldsound -lwinmm -lole32 -lws2_32|" ${PREFIX}/lib/pkgconfig/fluidsynth.pc
  238. touch build-done
  239. cd ..
  240. fi
  241. # ---------------------------------------------------------------------------------------------------------------------
  242. # mxml
  243. if [ ! -d mxml-${MXML_VERSION} ]; then
  244. wget -c https://github.com/michaelrsweet/mxml/releases/download/v${MXML_VERSION}/mxml-${MXML_VERSION}.tar.gz -O mxml-${MXML_VERSION}.tar.gz
  245. tar -xf mxml-${MXML_VERSION}.tar.gz
  246. fi
  247. if [ ! -f mxml-${MXML_VERSION}/build-done ]; then
  248. cd mxml-${MXML_VERSION}
  249. ./configure --disable-shared --prefix=${PREFIX} \
  250. --target=${MINGW_PREFIX} --host=${MINGW_PREFIX} --build=${HOST_ARCH}
  251. make libmxml.a
  252. cp *.a ${PREFIX}/lib/
  253. cp *.pc ${PREFIX}/lib/pkgconfig/
  254. cp mxml.h ${PREFIX}/include/
  255. touch build-done
  256. cd ..
  257. fi
  258. # ---------------------------------------------------------------------------------------------------------------------
  259. # fftw3 (needs to be last as it modifies C[XX]FLAGS)
  260. if [ ! -d fftw-${FFTW3_VERSION} ]; then
  261. curl -O http://www.fftw.org/fftw-${FFTW3_VERSION}.tar.gz
  262. tar -xf fftw-${FFTW3_VERSION}.tar.gz
  263. fi
  264. if [ ! -f fftw-${FFTW3_VERSION}/build-done ]; then
  265. export CFLAGS="${CFLAGS} -ffast-math"
  266. export CXXFLAGS="${CXXFLAGS} -ffast-math"
  267. EXTRA_ARGS=""
  268. cd fftw-${FFTW3_VERSION}
  269. if [ -z "${NOSSE}" ]; then
  270. EXTRA_ARGS="--enable-sse2"
  271. fi
  272. ./configure --enable-static --disable-shared --prefix=${PREFIX} \
  273. --target=${MINGW_PREFIX} --host=${MINGW_PREFIX} --build=${HOST_ARCH} \
  274. ${EXTRA_ARGS} \
  275. --disable-debug --disable-alloca --disable-fortran \
  276. --with-our-malloc
  277. make
  278. make install
  279. make clean
  280. if [ -z "${NOSSE}" ]; then
  281. EXTRA_ARGS="--enable-sse2 --enable-sse"
  282. fi
  283. ./configure --enable-static --disable-shared --prefix=${PREFIX} \
  284. --target=${MINGW_PREFIX} --host=${MINGW_PREFIX} --build=${HOST_ARCH} \
  285. ${EXTRA_ARGS} --enable-single \
  286. --disable-debug --disable-alloca --disable-fortran \
  287. --with-our-malloc
  288. make
  289. make install
  290. make clean
  291. touch build-done
  292. cd ..
  293. fi
  294. }
  295. # ---------------------------------------------------------------------------------------------------------------------
  296. # build base libs
  297. cleanup_prefix
  298. cleanup_pkgs
  299. export ARCH=32
  300. export ARCH_PREFIX=32nosse
  301. export NOSSE=1
  302. build_base
  303. cleanup_pkgs
  304. unset NOSSE
  305. export ARCH=32
  306. export ARCH_PREFIX=32
  307. build_base
  308. cleanup_pkgs
  309. export ARCH=64
  310. export ARCH_PREFIX=64
  311. build_base
  312. cleanup_pkgs
  313. # ---------------------------------------------------------------------------------------------------------------------