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.

382 lines
9.6KB

  1. #!/bin/bash
  2. # ---------------------------------------------------------------------------------------------------------------------
  3. function download() {
  4. local name="${1}"
  5. local version="${2}"
  6. local dlbaseurl="${3}"
  7. local dlext="${4}"
  8. local dlmethod="${5}"
  9. if [ -z "${dlext}" ]; then
  10. dlext="tar.gz"
  11. fi
  12. local dlfile="${PAWPAW_DOWNLOADDIR}/${name}-${version}.${dlext}"
  13. local dlfolder="${PAWPAW_BUILDDIR}/${name}-${version}"
  14. if [ ! -f "${dlfile}" ]; then
  15. if [ -n "${dlmethod}" ] && [ "${dlmethod}" = "git" ]; then
  16. local tmprepodir="${PAWPAW_TMPDIR}/${name}-${version}"
  17. rm -rf "${tmprepodir}"
  18. git clone --recursive "${dlbaseurl}" "${tmprepodir}"
  19. git -C "${tmprepodir}" checkout "${version}"
  20. git -C "${tmprepodir}" submodule update
  21. tar --exclude=".git" -czf "${dlfile}" -C "${PAWPAW_TMPDIR}" "${name}-${version}"
  22. rm -rf "${tmprepodir}"
  23. else
  24. local dlurl
  25. if echo ${dlbaseurl} | grep -q github.com; then
  26. dlurl="${dlbaseurl}/v${version}.${dlext}"
  27. else
  28. dlurl="${dlbaseurl}/${name}-${version}.${dlext}"
  29. fi
  30. curl -L "${dlurl}" -o "${dlfile}"
  31. fi
  32. fi
  33. if [ ! -d "${dlfolder}" ]; then
  34. mkdir "${dlfolder}"
  35. tar -xf "${dlfile}" -C "${dlfolder}" --strip-components=1
  36. fi
  37. }
  38. function copy_download() {
  39. local name1="${1}"
  40. local name2="${2}"
  41. local version="${3}"
  42. local dlext="${4}"
  43. if [ -z "${dlext}" ]; then
  44. dlext="tar.gz"
  45. fi
  46. local dlfile1="${PAWPAW_DOWNLOADDIR}/${name1}-${version}.${dlext}"
  47. local dlfolder2="${PAWPAW_BUILDDIR}/${name2}-${version}"
  48. if [ ! -d "${dlfolder2}" ]; then
  49. mkdir "${dlfolder2}"
  50. tar -xf "${dlfile1}" -C "${dlfolder2}" --strip-components=1
  51. fi
  52. }
  53. # ---------------------------------------------------------------------------------------------------------------------
  54. function _prebuild() {
  55. local name="${1}"
  56. local pkgdir="${2}"
  57. export AR="${TARGET_AR}"
  58. export CC="${TARGET_CC}"
  59. export CXX="${TARGET_CXX}"
  60. export LD="${TARGET_LD}"
  61. export STRIP="${TARGET_STRIP}"
  62. export CFLAGS="${TARGET_CFLAGS}"
  63. export CXXFLAGS="${TARGET_CXXFLAGS}"
  64. export LDFLAGS="${TARGET_LDFLAGS}"
  65. export PKG_CONFIG_PATH="${TARGET_PKG_CONFIG_PATH}"
  66. unset CPPFLAGS
  67. export OLD_PATH="${PATH}"
  68. export PATH="${TARGET_PATH}"
  69. if [ -d "${PAWPAW_ROOT}/patches/${name}" ]; then
  70. for p in $(ls "${PAWPAW_ROOT}/patches/${name}/" | grep "\.patch" | sort); do
  71. if [ ! -f "${pkgdir}/.stamp_applied_${p}" ]; then
  72. patch -p1 -d "${pkgdir}" -i "${PAWPAW_ROOT}/patches/${name}/${p}"
  73. touch "${pkgdir}/.stamp_applied_${p}"
  74. fi
  75. done
  76. fi
  77. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  78. rm -f "${pkgdir}/.stamp_built"
  79. rm -f "${pkgdir}/.stamp_installed"
  80. rm -f "${pkgdir}/CMakeCache.txt"
  81. elif [ ! -f "${pkgdir}/.stamp_built" ]; then
  82. rm -f "${pkgdir}/.stamp_installed"
  83. fi
  84. }
  85. function _postbuild() {
  86. unset AR
  87. unset CC
  88. unset CXX
  89. unset LD
  90. unset STRIP
  91. unset CFLAGS
  92. unset CPPFLAGS
  93. unset CXXFLAGS
  94. unset LDFLAGS
  95. unset PKG_CONFIG_PATH
  96. export PATH="${OLD_PATH}"
  97. }
  98. # ---------------------------------------------------------------------------------------------------------------------
  99. function build_autoconf() {
  100. local name="${1}"
  101. local version="${2}"
  102. local extraconfrules="${3}"
  103. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  104. if [ "${CROSS_COMPILING}" -eq 1 ]; then
  105. extraconfrules="--host=${TOOLCHAIN_PREFIX} ${extraconfrules}"
  106. fi
  107. _prebuild "${name}" "${pkgdir}"
  108. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  109. pushd "${pkgdir}"
  110. ./configure --enable-static --disable-shared --disable-doc --disable-maintainer-mode --prefix="${PAWPAW_PREFIX}" ${extraconfrules}
  111. touch .stamp_configured
  112. popd
  113. fi
  114. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  115. pushd "${pkgdir}"
  116. make ${MAKE_ARGS}
  117. touch .stamp_built
  118. popd
  119. fi
  120. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  121. pushd "${pkgdir}"
  122. make ${MAKE_ARGS} install
  123. touch .stamp_installed
  124. popd
  125. fi
  126. _postbuild
  127. }
  128. function build_conf() {
  129. local name="${1}"
  130. local version="${2}"
  131. local extraconfrules="${3}"
  132. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  133. _prebuild "${name}" "${pkgdir}"
  134. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  135. pushd "${pkgdir}"
  136. ./configure ${extraconfrules}
  137. touch .stamp_configured
  138. popd
  139. fi
  140. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  141. pushd "${pkgdir}"
  142. make ${MAKE_ARGS}
  143. touch .stamp_built
  144. popd
  145. fi
  146. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  147. pushd "${pkgdir}"
  148. make ${MAKE_ARGS} install
  149. touch .stamp_installed
  150. popd
  151. fi
  152. _postbuild
  153. }
  154. function build_cmake() {
  155. local name="${1}"
  156. local version="${2}"
  157. local extraconfrules="${3}"
  158. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  159. if [ "${CROSS_COMPILING}" -eq 1 ]; then
  160. extraconfrules="-DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME} ${extraconfrules}"
  161. fi
  162. _prebuild "${name}" "${pkgdir}"
  163. mkdir -p "${pkgdir}/build"
  164. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  165. pushd "${pkgdir}/build"
  166. cmake -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_PREFIX="${PAWPAW_PREFIX}" ${extraconfrules} ..
  167. touch ../.stamp_configured
  168. popd
  169. fi
  170. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  171. pushd "${pkgdir}/build"
  172. make ${MAKE_ARGS}
  173. touch ../.stamp_built
  174. popd
  175. fi
  176. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  177. pushd "${pkgdir}/build"
  178. make ${MAKE_ARGS} install
  179. touch ../.stamp_installed
  180. popd
  181. fi
  182. _postbuild
  183. }
  184. function build_make() {
  185. local name="${1}"
  186. local version="${2}"
  187. local extraconfrules="${3}"
  188. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  189. _prebuild "${name}" "${pkgdir}"
  190. touch "${pkgdir}/.stamp_configured"
  191. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  192. pushd "${pkgdir}"
  193. make PREFIX="${PAWPAW_PREFIX}" PKG_CONFIG="${TARGET_PKG_CONFIG}" ${MAKE_ARGS} ${extraconfrules}
  194. touch .stamp_built
  195. popd
  196. fi
  197. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  198. pushd "${pkgdir}"
  199. make PREFIX="${PAWPAW_PREFIX}" PKG_CONFIG="${TARGET_PKG_CONFIG}" ${MAKE_ARGS} install
  200. touch .stamp_installed
  201. popd
  202. fi
  203. _postbuild
  204. }
  205. function build_meson() {
  206. local name="${1}"
  207. local version="${2}"
  208. local extraconfrules="${3}"
  209. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  210. if [ "${CROSS_COMPILING}" -eq 1 ]; then
  211. extraconfrules="--cross-file ${PAWPAW_ROOT}/setup/meson/${PAWPAW_TARGET}.ini ${extraconfrules}"
  212. fi
  213. _prebuild "${name}" "${pkgdir}"
  214. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  215. pushd "${pkgdir}"
  216. meson build --buildtype release --prefix "${PAWPAW_PREFIX}" ${extraconfrules}
  217. touch .stamp_configured
  218. popd
  219. fi
  220. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  221. pushd "${pkgdir}"
  222. ninja -v -C build
  223. touch .stamp_built
  224. popd
  225. fi
  226. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  227. pushd "${pkgdir}"
  228. ninja -C build install
  229. touch .stamp_installed
  230. popd
  231. fi
  232. _postbuild
  233. }
  234. function build_waf() {
  235. local name="${1}"
  236. local version="${2}"
  237. local extraconfrules="${3}"
  238. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  239. _prebuild "${name}" "${pkgdir}"
  240. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  241. pushd "${pkgdir}"
  242. ./waf configure --prefix="${PAWPAW_PREFIX}" ${extraconfrules}
  243. touch .stamp_configured
  244. popd
  245. fi
  246. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  247. pushd "${pkgdir}"
  248. ./waf build
  249. touch .stamp_built
  250. popd
  251. fi
  252. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  253. pushd "${pkgdir}"
  254. ./waf install
  255. touch .stamp_installed
  256. popd
  257. fi
  258. _postbuild
  259. }
  260. # ---------------------------------------------------------------------------------------------------------------------
  261. function build_host_autoconf() {
  262. local name="${1}"
  263. local version="${2}"
  264. local extraconfrules="${3}"
  265. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  266. unset AR
  267. unset CC
  268. unset CXX
  269. unset LD
  270. unset STRIP
  271. unset CFLAGS
  272. unset CPPFLAGS
  273. unset CXXFLAGS
  274. unset LDFLAGS
  275. if [ ! -f "${pkgdir}/.stamp_configured" ]; then
  276. pushd "${pkgdir}"
  277. ./configure --enable-static --disable-shared --disable-maintainer-mode --prefix="${PAWPAW_PREFIX}" ${extraconfrules}
  278. touch .stamp_configured
  279. popd
  280. fi
  281. if [ ! -f "${pkgdir}/.stamp_built" ]; then
  282. pushd "${pkgdir}"
  283. make ${MAKE_ARGS}
  284. touch .stamp_built
  285. popd
  286. fi
  287. if [ ! -f "${pkgdir}/.stamp_installed" ]; then
  288. pushd "${pkgdir}"
  289. make install
  290. touch .stamp_installed
  291. popd
  292. fi
  293. }
  294. # ---------------------------------------------------------------------------------------------------------------------
  295. function patch_file() {
  296. local name="${1}"
  297. local version="${2}"
  298. local file="${3}"
  299. local rule="${4}"
  300. local pkgdir="${PAWPAW_BUILDDIR}/${name}-${version}"
  301. sed -i -e "${rule}" "${pkgdir}/${file}"
  302. }
  303. # ---------------------------------------------------------------------------------------------------------------------