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.

188 lines
7.1KB

  1. #!/bin/bash
  2. set -e
  3. cd $(dirname ${0})
  4. PAWPAW_ROOT="${PWD}"
  5. JACK2_VERSION=${JACK2_VERSION:=git}
  6. JACK_EXAMPLE_TOOLS_VERSION=${JACK_EXAMPLE_TOOLS_VERSION:=git}
  7. JACK_ROUTER_VERSION=${JACK_ROUTER_VERSION:=6c2e532bb05d2ba59ef210bef2fe270d588c2fdf}
  8. QJACKCTL_VERSION=${QJACKCTL_VERSION:=0.9.7}
  9. # ---------------------------------------------------------------------------------------------------------------------
  10. target="${1}"
  11. if [ -z "${target}" ]; then
  12. echo "usage: ${0} <target>"
  13. exit 1
  14. fi
  15. # TODO check that bootstrap-jack.sh has been run
  16. # ---------------------------------------------------------------------------------------------------------------------
  17. source setup/check_target.sh
  18. source setup/env.sh
  19. source setup/functions.sh
  20. source setup/versions.sh
  21. # ---------------------------------------------------------------------------------------------------------------------
  22. jack2_repo="https://github.com/jackaudio/jack2.git"
  23. if [ -n "${PAWPAW_JACK2_NO_CUSTOM_PREFIX}" ]; then
  24. jack2_prefix="${PAWPAW_PREFIX}"
  25. else
  26. jack2_prefix="${PAWPAW_PREFIX}-jack2"
  27. if [ "${MACOS}" -eq 1 ]; then
  28. jack2_extra_prefix="/usr/local"
  29. fi
  30. fi
  31. # ---------------------------------------------------------------------------------------------------------------------
  32. # jack2
  33. jack2_args=""
  34. if [ -n "${jack2_extra_prefix}" ]; then
  35. jack2_args+=" --prefix=${jack2_extra_prefix}"
  36. jack2_args+=" --destdir="${jack2_prefix}""
  37. else
  38. jack2_args+=" --prefix=${jack2_prefix}"
  39. fi
  40. if [ "${CROSS_COMPILING}" -eq 1 ]; then
  41. if [ "${LINUX}" -eq 1 ]; then
  42. jack2_args+=" --platform=linux"
  43. elif [ "${MACOS}" -eq 1 ]; then
  44. jack2_args+=" --platform=darwin"
  45. elif [ "${WIN32}" -eq 1 ]; then
  46. jack2_args+=" --platform=win32"
  47. fi
  48. fi
  49. if [ "${WIN32}" -eq 1 ]; then
  50. jack2_args+=" --static"
  51. fi
  52. if [ "${WIN64}" -eq 1 ]; then
  53. jack2_args="${jack2_args} --mixed"
  54. # win32 toolchain prefix
  55. TOOLCHAIN_PREFIX32=$(echo ${TOOLCHAIN_PREFIX} | sed 's/x86_64/i686/')
  56. # let jack2 find win32 binaries
  57. TARGET_PATH="${TARGET_PATH}:/usr/${TOOLCHAIN_PREFIX32}/bin"
  58. # setup linker for our custom folder
  59. export EXTRA_LDFLAGS="-L${PAWPAW_PREFIX}/lib32"
  60. fi
  61. if [ "${JACK2_VERSION}" = "git" ]; then
  62. if [ ! -d jack2 ]; then
  63. git clone --recursive "${jack2_repo}"
  64. fi
  65. if [ ! -e "${PAWPAW_BUILDDIR}/jack2-git" ]; then
  66. ln -sf "$(pwd)/jack2" "${PAWPAW_BUILDDIR}/jack2-git"
  67. fi
  68. rm -f "${PAWPAW_BUILDDIR}/jack2-git/.stamp_built"
  69. else
  70. download jack2 "${JACK2_VERSION}" "${jack2_repo}" "" "git"
  71. fi
  72. build_waf jack2 "${JACK2_VERSION}" "${jack2_args}"
  73. # remove useless dbus-specific file
  74. rm -f "${jack2_prefix}${jack2_extra_prefix}/bin/jack_control"
  75. # generate MSVC lib files
  76. if [ "${WIN64}" -eq 1 ]; then
  77. llvm-dlltool -m i386 -D libjack.dll -d ${jack2_prefix}${jack2_extra_prefix}/lib32/libjack.def -l ${jack2_prefix}${jack2_extra_prefix}/lib32/libjack.lib
  78. llvm-dlltool -m i386:x86-64 -D libjack64.dll -d ${jack2_prefix}${jack2_extra_prefix}/lib/libjack64.def -l ${jack2_prefix}${jack2_extra_prefix}/lib/libjack64.lib
  79. llvm-dlltool -m i386:x86-64 -D libjacknet64.dll -d ${jack2_prefix}${jack2_extra_prefix}/lib/libjacknet64.def -l ${jack2_prefix}${jack2_extra_prefix}/lib/libjacknet64.lib
  80. llvm-dlltool -m i386:x86-64 -D libjackserver64.dll -d ${jack2_prefix}${jack2_extra_prefix}/lib/libjackserver64.def -l ${jack2_prefix}${jack2_extra_prefix}/lib/libjackserver64.lib
  81. elif [ "${WIN32}" -eq 1 ]; then
  82. llvm-dlltool -m i386 -D libjack.dll -d ${jack2_prefix}${jack2_extra_prefix}/lib/libjack.def -l ${jack2_prefix}${jack2_extra_prefix}/lib/libjack.lib
  83. llvm-dlltool -m i386 -D libjacknet.dll -d ${jack2_prefix}${jack2_extra_prefix}/lib/libjacknet.def -l ${jack2_prefix}${jack2_extra_prefix}/lib/libjacknet.lib
  84. llvm-dlltool -m i386 -D libjackserver.dll -d ${jack2_prefix}${jack2_extra_prefix}/lib/libjackserver.def -l ${jack2_prefix}${jack2_extra_prefix}/lib/libjackserver.lib
  85. fi
  86. # copy jack pkg-config file to main system, so qjackctl can find it
  87. if [ ! -e "${PAWPAW_PREFIX}/lib/pkgconfig/jack.pc" ]; then
  88. cp -v "${jack2_prefix}${jack2_extra_prefix}/lib/pkgconfig/jack.pc" "${PAWPAW_PREFIX}/lib/pkgconfig/jack.pc"
  89. # patch pkg-config file for static win32 builds in regular prefix
  90. if [ "${WIN32}" -eq 1 ]; then
  91. if [ "${WIN64}" -eq 1 ]; then
  92. s="64"
  93. else
  94. s=""
  95. fi
  96. sed -i -e "s/lib -ljack${s}/lib -Wl,-Bdynamic -ljack${s} -Wl,-Bstatic/" "${PAWPAW_PREFIX}/lib/pkgconfig/jack.pc"
  97. fi
  98. fi
  99. # ---------------------------------------------------------------------------------------------------------------------
  100. # jack-example-tools
  101. jack_example_tools_repo="https://github.com/jackaudio/jack-example-tools.git"
  102. jack_example_tools_args=" --prefix=${jack2_prefix}${jack2_extra_prefix}"
  103. echo ${jack2_prefix}${jack2_extra_prefix}
  104. if [ "${JACK_EXAMPLE_TOOLS_VERSION}" = "git" ]; then
  105. if [ ! -d jack-example-tools ]; then
  106. git clone --recursive "${jack_example_tools_repo}"
  107. fi
  108. if [ ! -e "${PAWPAW_BUILDDIR}/jack-example-tools-git" ]; then
  109. ln -sf "$(pwd)/jack-example-tools" "${PAWPAW_BUILDDIR}/jack-example-tools-git"
  110. fi
  111. rm -f "${PAWPAW_BUILDDIR}/jack-example-tools-git/.stamp_built"
  112. else
  113. download jack-example-tools "${JACK_EXAMPLE_TOOLS_VERSION}" "${jack_example_tools_repo}" "" "git"
  114. fi
  115. build_meson jack-example-tools "${JACK_EXAMPLE_TOOLS_VERSION}" "${jack_example_tools_args}"
  116. # ---------------------------------------------------------------------------------------------------------------------
  117. # jack-router (download, win32 only)
  118. if [ "${WIN32}" -eq 1 ]; then
  119. download jack-router "${JACK_ROUTER_VERSION}" "https://github.com/jackaudio/jack-router.git" "" "git"
  120. fi
  121. # ---------------------------------------------------------------------------------------------------------------------
  122. # qjackctl (if qt is available)
  123. if [ -f "${PAWPAW_PREFIX}/bin/moc" ]; then
  124. # Join $2+ arguments into a string separated by $1
  125. function join() {
  126. local IFS=$1
  127. shift
  128. echo "$*"
  129. }
  130. if [ "${CROSS_COMPILING}" -eq 1 ]; then
  131. # Use system's Qt tools for translations
  132. qjackctl_CMAKE_PREFIX_PATH="${PAWPAW_PREFIX}/lib/cmake;$(join ';' /usr/{lib/$(gcc -print-multiarch),lib*,share}/cmake)"
  133. echo "Using CMake prefix: ${qjackctl_CMAKE_PREFIX_PATH}"
  134. else
  135. qjackctl_CMAKE_PREFIX_PATH="${PAWPAW_PREFIX}/lib/cmake"
  136. fi
  137. QJACKCTL_EXTRAFLAGS="-DJack_ROOT=${jack2_prefix}${jack2_extra_prefix}"
  138. QJACKCTL_EXTRAFLAGS+=" -DCONFIG_ALSA_SEQ:BOOL=OFF"
  139. QJACKCTL_EXTRAFLAGS+=" -DCONFIG_DBUS:BOOL=OFF"
  140. QJACKCTL_EXTRAFLAGS+=" -DCMAKE_PREFIX_PATH=${qjackctl_CMAKE_PREFIX_PATH}"
  141. QJACKCTL_EXTRAFLAGS+=" -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON"
  142. download qjackctl "${QJACKCTL_VERSION}" https://download.sourceforge.net/qjackctl
  143. build_cmake qjackctl "${QJACKCTL_VERSION}" "${QJACKCTL_EXTRAFLAGS}"
  144. if [ "${WIN32}" -eq 1 ]; then
  145. copy_file qjackctl "${QJACKCTL_VERSION}" "build/src/qjackctl.exe" "${jack2_prefix}/bin/qjackctl.exe"
  146. fi
  147. fi
  148. # ---------------------------------------------------------------------------------------------------------------------