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.

258 lines
8.0KB

  1. #!/bin/bash
  2. set -e
  3. cd $(dirname ${0})
  4. PAWPAW_ROOT="${PWD}"
  5. # ---------------------------------------------------------------------------------------------------------------------
  6. target="${1}"
  7. if [ -z "${target}" ]; then
  8. echo "usage: ${0} <target>"
  9. exit 1
  10. fi
  11. # ---------------------------------------------------------------------------------------------------------------------
  12. # TODO check that bootstrap.sh has been run
  13. source setup/check_target.sh
  14. source setup/env.sh
  15. source setup/functions.sh
  16. source setup/versions.sh
  17. # ---------------------------------------------------------------------------------------------------------------------
  18. qtsuffix="-opensource-src"
  19. # ---------------------------------------------------------------------------------------------------------------------
  20. function download_qt() {
  21. local name="${1}"
  22. local dlfile="${PAWPAW_DOWNLOADDIR}/${name}${qtsuffix}-${QT5_VERSION}.tar.xz"
  23. local dlfolder="${PAWPAW_BUILDDIR}/${name}${qtsuffix}-${QT5_VERSION}"
  24. if [ ! -f "${dlfile}" ]; then
  25. dlurl="https://download.qt.io/archive/qt/${QT5_MVERSION}/${QT5_VERSION}/submodules/${name}${qtsuffix}-${QT5_VERSION}.tar.xz"
  26. curl -L "${dlurl}" -o "${dlfile}"
  27. fi
  28. if [ ! -d "${dlfolder}" ]; then
  29. mkdir "${dlfolder}"
  30. tar -xf "${dlfile}" -C "${dlfolder}" --strip-components=1
  31. fi
  32. # if [ ! -d "${dlfolder}" ]; then
  33. # unzip "${dlfile}" -d "${PAWPAW_BUILDDIR}"
  34. # chmod +x "${dlfolder}/configure"
  35. # dos2unix "${dlfolder}/configure"
  36. # fi
  37. }
  38. # ---------------------------------------------------------------------------------------------------------------------
  39. function build_qt_conf() {
  40. local name="${1}"
  41. local extraconfrules="${2}"
  42. local pkgdir="${PAWPAW_BUILDDIR}/${name}${qtsuffix}-${QT5_VERSION}"
  43. unset AR
  44. unset CC
  45. unset CXX
  46. unset LD
  47. unset STRIP
  48. unset CFLAGS
  49. unset CPPFLAGS
  50. unset CXXFLAGS
  51. unset LDFLAGS
  52. export PKG_CONFIG="${TARGET_PKG_CONFIG}"
  53. export PKG_CONFIG_LIBDIR="${TARGET_PKG_CONFIG_PATH}"
  54. export PKG_CONFIG_PATH="${TARGET_PKG_CONFIG_PATH}"
  55. export PKG_CONFIG_SYSROOT_DIR="${TARGET_PKG_CONFIG_PATH}"
  56. if [ -d "${PAWPAW_ROOT}/patches/${name}" ]; then
  57. for p in $(ls "${PAWPAW_ROOT}/patches/${name}/" | grep "\.patch" | sort); do
  58. if [ ! -f "${pkgdir}/.stamp_applied_${p}" ]; then
  59. patch -p1 -d "${pkgdir}" -i "${PAWPAW_ROOT}/patches/${name}/${p}"
  60. touch "${pkgdir}/.stamp_applied_${p}"
  61. fi
  62. done
  63. fi
  64. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  65. pushd "${pkgdir}"
  66. ./configure ${extraconfrules}
  67. touch .stamp_configured
  68. popd
  69. fi
  70. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  71. pushd "${pkgdir}"
  72. make ${MAKE_ARGS}
  73. touch .stamp_built
  74. popd
  75. fi
  76. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  77. pushd "${pkgdir}"
  78. make ${MAKE_ARGS} -j 1 install
  79. touch .stamp_installed
  80. popd
  81. fi
  82. unset PKG_CONFIG
  83. unset PKG_CONFIG_LIBDIR
  84. unset PKG_CONFIG_PATH
  85. unset PKG_CONFIG_SYSROOT_DIR
  86. }
  87. # ---------------------------------------------------------------------------------------------------------------------
  88. # base
  89. qtbase_conf_args="-opensource -confirm-license"
  90. qtbase_conf_args+=" -c++std c++11"
  91. # qtbase_conf_args+=" -optimized-qmake"
  92. qtbase_conf_args+=" -optimize-size"
  93. qtbase_conf_args+=" -release -strip"
  94. # qtbase_conf_args+=" -static"
  95. qtbase_conf_args+=" -shared"
  96. qtbase_conf_args+=" -silent"
  97. # qtbase_conf_args+=" -verbose"
  98. # build type
  99. qtbase_conf_args+=" -make libs"
  100. qtbase_conf_args+=" -make tools"
  101. qtbase_conf_args+=" -gui"
  102. qtbase_conf_args+=" -widgets"
  103. # paths
  104. qtbase_conf_args+=" -prefix ${PAWPAW_PREFIX}"
  105. qtbase_conf_args+=" -headerdir ${PAWPAW_PREFIX}/include/qt5"
  106. qtbase_conf_args+=" -libexecdir ${PAWPAW_PREFIX}/libexec"
  107. qtbase_conf_args+=" -plugindir ${PAWPAW_PREFIX}/lib/qt5/plugins"
  108. # enable optimizations (sse2 only)
  109. qtbase_conf_args+=" -sse2"
  110. qtbase_conf_args+=" -no-sse3 -no-ssse3 -no-sse4.1 -no-sse4.2 -no-avx -no-avx2 -no-avx512"
  111. # enable some basic stuff
  112. qtbase_conf_args+=" -opengl desktop"
  113. qtbase_conf_args+=" -qt-doubleconversion"
  114. qtbase_conf_args+=" -qt-pcre"
  115. qtbase_conf_args+=" -qt-sqlite"
  116. # disable examples and tests
  117. qtbase_conf_args+=" -nomake examples"
  118. qtbase_conf_args+=" -nomake tests"
  119. qtbase_conf_args+=" -no-compile-examples"
  120. # disable a couple of things
  121. qtbase_conf_args+=" -no-cups"
  122. qtbase_conf_args+=" -no-dbus"
  123. qtbase_conf_args+=" -no-directfb"
  124. qtbase_conf_args+=" -no-eglfs"
  125. qtbase_conf_args+=" -no-evdev"
  126. qtbase_conf_args+=" -no-eventfd"
  127. qtbase_conf_args+=" -no-journald"
  128. qtbase_conf_args+=" -no-glib"
  129. qtbase_conf_args+=" -no-gtk"
  130. qtbase_conf_args+=" -no-icu"
  131. qtbase_conf_args+=" -no-inotify"
  132. qtbase_conf_args+=" -no-libinput"
  133. qtbase_conf_args+=" -no-libproxy"
  134. qtbase_conf_args+=" -no-mtdev"
  135. qtbase_conf_args+=" -no-openssl"
  136. qtbase_conf_args+=" -no-pch"
  137. qtbase_conf_args+=" -no-sctp"
  138. qtbase_conf_args+=" -no-securetransport"
  139. qtbase_conf_args+=" -no-syslog"
  140. qtbase_conf_args+=" -no-tslib"
  141. qtbase_conf_args+=" -no-xinput2"
  142. qtbase_conf_args+=" -no-xkbcommon-evdev"
  143. qtbase_conf_args+=" -no-xkbcommon-x11"
  144. # font stuff
  145. qtbase_conf_args+=" -qt-freetype"
  146. qtbase_conf_args+=" -no-fontconfig"
  147. qtbase_conf_args+=" -no-harfbuzz"
  148. # supported image formats
  149. qtbase_conf_args+=" -qt-libjpeg"
  150. qtbase_conf_args+=" -qt-libpng"
  151. qtbase_conf_args+=" -no-gif"
  152. qtbase_conf_args+=" -no-ico"
  153. # use pkg-config
  154. qtbase_conf_args+=" -pkg-config"
  155. qtbase_conf_args+=" -force-pkg-config"
  156. # platform specific
  157. if [ "${CROSS_COMPILING}" -eq 1 ]; then
  158. if [ "${LINUX}" -eq 1 ]; then
  159. qtbase_conf_args+=" -xplatform linux-g++"
  160. elif [ "${MACOS}" -eq 1 ]; then
  161. qtbase_conf_args+=" -xplatform macx-clang"
  162. elif [ "${WIN32}" -eq 1 ]; then
  163. qtbase_conf_args+=" -xplatform win32-g++"
  164. fi
  165. qtbase_conf_args+=" -device-option CROSS_COMPILE=${TOOLCHAIN_PREFIX_}"
  166. else
  167. if [ "${LINUX}" -eq 1 ]; then
  168. qtbase_conf_args+=" -platform linux-g++"
  169. elif [ "${MACOS}" -eq 1 ]; then
  170. qtbase_conf_args+=" -platform macx-clang"
  171. elif [ "${WIN32}" -eq 1 ]; then
  172. qtbase_conf_args+=" -platform win32-g++"
  173. fi
  174. fi
  175. # platform specific
  176. if [ "${LINUX}" -eq 1 ]; then
  177. qtbase_conf_args+=" -qpa xcb"
  178. qtbase_conf_args+=" -qt-xcb"
  179. qtbase_conf_args+=" -xcb-xlib"
  180. elif [ "${MACOS}" -eq 1 ]; then
  181. qtbase_conf_args+=" -qpa cocoa"
  182. elif [ "${WIN32}" -eq 1 ]; then
  183. qtbase_conf_args+=" -qpa windows"
  184. fi
  185. # zlib
  186. if [ "${MACOS}" -eq 1 ]; then
  187. qtbase_conf_args+=" -system-zlib"
  188. else
  189. qtbase_conf_args+=" -qt-zlib"
  190. fi
  191. download_qt qtbase
  192. # patch_file qtbase${qtsuffix} ${QT5_VERSION} "configure" 's/ --sdk $sdk / /'
  193. # patch_file qtbase${qtsuffix} ${QT5_VERSION} "mkspecs/features/mac/sdk.prf" 's/ --sdk $$sdk / /'
  194. patch_file qtbase${qtsuffix} ${QT5_VERSION} "mkspecs/macx-clang/qmake.conf" 's/10.10/10.8/'
  195. patch_file qtbase${qtsuffix} ${QT5_VERSION} "mkspecs/win32-g++/qmake.conf" 's/= -shared/= -static -shared/'
  196. patch_file qtbase${qtsuffix} ${QT5_VERSION} "src/plugins/platforms/direct2d/direct2d.pro" 's/-lVersion/-lversion/'
  197. build_qt_conf qtbase "${qtbase_conf_args}"
  198. if [ "${MACOS}" -eq 1 ] && [ ! -e "ln -s ${PAWPAW_PREFIX}/include/qt5/QtCore" ]; then
  199. ln -sfv ${PAWPAW_PREFIX}/lib/QtCore.framework/Headers ${PAWPAW_PREFIX}/include/qt5/QtCore
  200. ln -sfv ${PAWPAW_PREFIX}/lib/QtGui.framework/Headers ${PAWPAW_PREFIX}/include/qt5/QtGui
  201. ln -sfv ${PAWPAW_PREFIX}/lib/QtWidgets.framework/Headers ${PAWPAW_PREFIX}/include/qt5/QtWidgets
  202. fi
  203. # ---------------------------------------------------------------------------------------------------------------------
  204. download_qt qtsvg
  205. build_qmake qtsvg${qtsuffix} ${QT5_VERSION}
  206. # ---------------------------------------------------------------------------------------------------------------------
  207. if [ "${CROSS_COMPILING}" -eq 0 ]; then
  208. download_qt qttools
  209. build_qmake qttools${qtsuffix} ${QT5_VERSION}
  210. fi
  211. # ---------------------------------------------------------------------------------------------------------------------