package.sh 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. #!/bin/sh
  2. # SPDX-License-Identifier: GPL-3.0-or-later
  3. # Copyright (c) 2012-2023 Daniele Bartolini et al.
  4. if [ $# -lt 1 ]; then
  5. echo "Usage: $0 <platform> <arch> [version]"
  6. echo ""
  7. echo "e.g."
  8. echo "$0 linux x64 0.38.0" # Create package for linux x64, v0.38.0
  9. echo "$0 android arm64" # Version is inferred from last Git tag
  10. exit
  11. fi
  12. PLATFORM=$1
  13. ARCH=$2
  14. VERSION=$3
  15. # Validate platform/arch combination.
  16. if [ "${PLATFORM}" = "android" ]; then
  17. if [ "${ARCH}" != "arm" ] && [ "${ARCH}" != "arm64" ]; then
  18. echo "Invalid architecture ${ARCH}"
  19. exit 1
  20. fi
  21. elif [ "${PLATFORM}" = "linux" ]; then
  22. if [ "${ARCH}" != "x64" ]; then
  23. echo "Invalid architecture ${ARCH}"
  24. exit 1
  25. fi
  26. elif [ "${PLATFORM}" = "windows" ]; then
  27. if [ "${ARCH}" != "x64" ]; then
  28. echo "Invalid architecture ${ARCH}"
  29. exit 1
  30. fi
  31. else
  32. echo "Invalid platform ${PLATFORM}"
  33. exit 1
  34. fi
  35. # If version is not specified, extract it from most recent tag name.
  36. if [ -z "${VERSION}" ]; then
  37. VERSION=$(git tag | tail -n 1| cut -c2-)
  38. fi
  39. BUILD_JOBS=$(nproc)
  40. if [ "${PLATFORM}" = "windows" ]; then
  41. EXE_SUFFIX=.exe
  42. else
  43. EXE_SUFFIX=
  44. fi
  45. # Build folder.
  46. BINARIES_DIR="${PLATFORM}"64
  47. if [ "${PLATFORM}" = "android" ]; then
  48. BINARIES_DIR="${PLATFORM}-${ARCH}"
  49. fi
  50. # Destination folder.
  51. PACKAGENAME=crown-"${VERSION}"
  52. # Tarball name.
  53. ZIP="tar -zcf"
  54. TARBALLEXTENSION=tar.gz
  55. if [ "${PLATFORM}" = "windows" ]; then
  56. ZIP="zip -rq"
  57. TARBALLEXTENSION=zip
  58. fi
  59. TARBALLNAME="crown-${VERSION}-${PLATFORM}-${ARCH}.${TARBALLEXTENSION}"
  60. echo "Crown v${VERSION} will be packaged as ${TARBALLNAME}"
  61. echo "Continue? [y/N]"
  62. read -r answer
  63. if [ "${answer}" != "y" ] && [ "${answer}" != "Y" ]; then
  64. echo "Bye."
  65. exit;
  66. fi
  67. # Cleanup previous builds.
  68. rm -rf "${TARBALLNAME}"
  69. rm -rf "${PACKAGENAME}"
  70. # Switch to desired tag.
  71. git checkout v"${VERSION}"
  72. # Build engine and tools.
  73. make clean
  74. if [ "${PLATFORM}" = "android" ]; then
  75. export ANDROID_NDK_ROOT="$HOME"/android-sdk/ndk/21.0.6113669
  76. export ANDROID_NDK_ABI=23
  77. make android-"${ARCH}"-development MAKE_JOBS="${BUILD_JOBS}"
  78. make android-"${ARCH}"-release MAKE_JOBS="${BUILD_JOBS}"
  79. elif [ "${PLATFORM}" = "linux" ]; then
  80. make tools-linux-release64 MAKE_JOBS="${BUILD_JOBS}"
  81. make linux-release64 MAKE_JOBS="${BUILD_JOBS}"
  82. elif [ "${PLATFORM}" = "windows" ]; then
  83. /c/Windows/System32/cmd.exe //C "scripts\\dist\\windows-release.bat"
  84. export MINGW=/mingw64
  85. export PATH="${PATH}:${MINGW}/bin"
  86. make tools-mingw-release64 MAKE_JOBS="${BUILD_JOBS}"
  87. fi
  88. # Copy license to build dir.
  89. cp LICENSE build
  90. if [ "${PLATFORM}" = "linux" ] || [ "${PLATFORM}" = "windows" ]; then
  91. # Copy exporters, samples etc. to build dir.
  92. cp -r exporters build
  93. cp -r samples build
  94. mv build/samples/core build
  95. if [ "${PLATFORM}" = "linux" ]; then
  96. # Create script that launches the editor.
  97. rm build/crown
  98. {
  99. echo "#!/bin/sh"
  100. echo "PROJECT=\$1"
  101. echo "LEVEL=\$2"
  102. echo "if [ ! -z \$PROJECT ]; then"
  103. echo " PROJECT=\$(readlink -f \${PROJECT})"
  104. echo "fi"
  105. # https://stackoverflow.com/questions/59895/how-to-get-the-source-directory-of-a-bash-script-from-within-the-script-itself
  106. echo "DIR=\"\$( cd \"\$( dirname \"\$0\" )\" >/dev/null 2>&1 && pwd )\""
  107. echo "cd \${DIR}/linux64/bin"
  108. echo "export UBUNTU_MENUPROXY="
  109. echo "./level-editor-release \${PROJECT} \${LEVEL}"
  110. } >> build/crown
  111. chmod +x build/crown
  112. elif [ "${PLATFORM}" = "windows" ]; then
  113. # Create script that launches the editor.
  114. rm build/crown.bat
  115. {
  116. echo "@echo off"
  117. echo "call :ABSOLUTEPATH %1"
  118. echo "set PROJECT=%RETVAL%"
  119. echo "set LEVEL=%2"
  120. echo ""
  121. echo "cd windows64\bin"
  122. echo "start level-editor-release.exe %PROJECT% %LEVEL%"
  123. echo ""
  124. echo "exit"
  125. echo ""
  126. echo ":ABSOLUTEPATH"
  127. echo " SET RETVAL=%~dpfn1"
  128. echo " EXIT /B"
  129. } >> build/crown.bat
  130. export MINGW=/mingw64
  131. export PATH="${PATH}:${MINGW}/bin"
  132. # Copy editor from MinGW build.
  133. cp build/mingw64/bin/level-editor-release.exe build/windows64/bin
  134. # Copy required DLLs.
  135. ldd build/mingw64/bin/level-editor-release.exe | grep '\/mingw.*\.dll' -o | xargs -I{} cp "{}" build/windows64/bin
  136. # Copy GTK-related executables.
  137. cp /mingw64/bin/fc-cache.exe build/windows64/bin
  138. cp /mingw64/bin/fc-cat.exe build/windows64/bin
  139. cp /mingw64/bin/fc-list.exe build/windows64/bin
  140. cp /mingw64/bin/fc-match.exe build/windows64/bin
  141. cp /mingw64/bin/fc-pattern.exe build/windows64/bin
  142. cp /mingw64/bin/fc-query.exe build/windows64/bin
  143. cp /mingw64/bin/fc-scan.exe build/windows64/bin
  144. cp /mingw64/bin/fc-validate.exe build/windows64/bin
  145. cp /mingw64/bin/gdbus.exe build/windows64/bin
  146. cp /mingw64/bin/gdk-pixbuf-query-loaders.exe build/windows64/bin
  147. cp /mingw64/bin/gspawn-win64-helper-console.exe build/windows64/bin
  148. cp /mingw64/bin/gspawn-win64-helper.exe build/windows64/bin
  149. cp /mingw64/bin/gtk-query-immodules-3.0.exe build/windows64/bin
  150. cp /mingw64/bin/gtk-update-icon-cache.exe build/windows64/bin
  151. # Copy additional DLLs.
  152. cp /mingw64/bin/liblzma-5.dll build/windows64/bin
  153. cp /mingw64/bin/librsvg-2-2.dll build/windows64/bin
  154. cp /mingw64/bin/libxml2-2.dll build/windows64/bin
  155. # Copy GDK pixbuf loaders.
  156. mkdir -p build/windows64/lib/gdk-pixbuf-2.0/2.10.0/loaders
  157. cp -r /mingw64/lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-*.dll build/windows64/lib/gdk-pixbuf-2.0/2.10.0/loaders
  158. cp -r /mingw64/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache build/windows64/lib/gdk-pixbuf-2.0/2.10.0
  159. # Copy GLib schemas.
  160. mkdir -p build/windows64/share/glib-2.0/schemas
  161. cp -r /mingw64/share/glib-2.0/schemas/gschemas.compiled build/windows64/share/glib-2.0/schemas
  162. # Copy Adwaita and hicolor icons.
  163. mkdir -p build/windows64/share/icons/Adwaita/scalable
  164. cp -r /mingw64/share/icons/Adwaita/icon-theme.cache build/windows64/share/icons/Adwaita
  165. cp -r /mingw64/share/icons/Adwaita/index.theme build/windows64/share/icons/Adwaita
  166. cp -r /mingw64/share/icons/Adwaita/scalable/* build/windows64/share/icons/Adwaita/scalable
  167. cp -r /mingw64/share/icons/hicolor build/windows64/share/icons
  168. fi
  169. fi
  170. # Strip unnecessary files from build dir.
  171. rm -r build/mingw64 2> /dev/null
  172. rm -r build/projects 2> /dev/null
  173. rm -r build/"${BINARIES_DIR}"/obj/ 2> /dev/null
  174. rm build/"${BINARIES_DIR}"/bin/*.a 2> /dev/null
  175. rm build/"${BINARIES_DIR}"/bin/*.exp 2> /dev/null
  176. rm build/"${BINARIES_DIR}"/bin/*.ilk 2> /dev/null
  177. rm build/"${BINARIES_DIR}"/bin/*.lib 2> /dev/null
  178. for build_cfg in debug development release; do
  179. rm build/"${BINARIES_DIR}"/bin/bgfx-"${build_cfg}".* 2> /dev/null
  180. rm build/"${BINARIES_DIR}"/bin/bimg_decode-"${build_cfg}".* 2> /dev/null
  181. rm build/"${BINARIES_DIR}"/bin/bimg_encode-"${build_cfg}".* 2> /dev/null
  182. rm build/"${BINARIES_DIR}"/bin/bimg-"${build_cfg}".* 2> /dev/null
  183. rm build/"${BINARIES_DIR}"/bin/bullet-"${build_cfg}".* 2> /dev/null
  184. rm build/"${BINARIES_DIR}"/bin/bx-"${build_cfg}".* 2> /dev/null
  185. done
  186. if [ "${PLATFORM}" = "android" ]; then
  187. rm -r build/"${BINARIES_DIR}"/bin/jit
  188. fi
  189. # Create release package from build dir.
  190. mv build "${PACKAGENAME}"
  191. ${ZIP} "${TARBALLNAME}" "${PACKAGENAME}"
  192. # Copy package to server.
  193. if [ ! -z "${PACKAGESERVER}" ]; then
  194. if [ "${PLATFORM}" = "linux" ]; then
  195. ssh "${PACKAGESERVER}" "mkdir -p ~/Data/vms/${PACKAGENAME}"
  196. fi
  197. scp "${TARBALLNAME}" "${PACKAGESERVER}":~/Data/vms/"${PACKAGENAME}"
  198. fi