package.sh 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. #!/bin/bash
  2. # SPDX-License-Identifier: GPL-3.0-or-later
  3. # Copyright (c) 2012-2026 Daniele Bartolini et al.
  4. set -eu
  5. . scripts/dist/version.sh
  6. NOCONFIRM=0
  7. BRANCH=""
  8. ARGS=()
  9. while [ $# -gt 0 ]; do
  10. case "$1" in
  11. -h|--help)
  12. echo "Usage: $0 [options] <platform> <arch>"
  13. echo ""
  14. echo "Options:"
  15. echo " --noconfirm Skip any user confirmations."
  16. echo ""
  17. echo "Examples:"
  18. echo "$0 android arm64 # Create android-arm64 package. Version is inferred from config.h."
  19. echo "$0 linux x64 master # Create linux-x64 package. Append \"-master-<commit>\" to version name."
  20. echo ""
  21. exit 0
  22. ;;
  23. --noconfirm)
  24. NOCONFIRM=1
  25. shift
  26. ;;
  27. --branch)
  28. BRANCH="$2"
  29. shift 2
  30. ;;
  31. -*)
  32. echo "Unknown option $1"
  33. exit 1
  34. ;;
  35. *)
  36. ARGS+=("$1")
  37. shift
  38. ;;
  39. esac
  40. done
  41. set -- "${ARGS[@]}"
  42. PLATFORM=${1-}
  43. ARCH=${2-}
  44. # Validate platform/arch combination.
  45. if [ "${PLATFORM}" = "android" ]; then
  46. if [ "${ARCH}" != "arm" ] && [ "${ARCH}" != "arm64" ]; then
  47. echo "Invalid architecture ${ARCH}"
  48. exit 1
  49. fi
  50. elif [ "${PLATFORM}" = "html5" ]; then
  51. if [ "${ARCH}" != "wasm" ]; then
  52. echo "Invalid architecture ${ARCH}"
  53. exit 1
  54. fi
  55. elif [ "${PLATFORM}" = "linux" ]; then
  56. if [ "${ARCH}" != "x64" ]; then
  57. echo "Invalid architecture ${ARCH}"
  58. exit 1
  59. fi
  60. elif [ "${PLATFORM}" = "windows" ]; then
  61. if [ "${ARCH}" != "x64" ] && [ "${ARCH}" != "x32" ]; then
  62. echo "Invalid architecture ${ARCH}"
  63. exit 1
  64. fi
  65. else
  66. echo "Invalid platform ${PLATFORM}"
  67. exit 1
  68. fi
  69. VERSION=$(crown_version)
  70. BUILD_JOBS=$(nproc)
  71. if [ "${BRANCH}" != "" ]; then
  72. VERSION_SUFFIX="-${BRANCH}-"$(git rev-parse --short HEAD)
  73. else
  74. VERSION_SUFFIX=
  75. fi
  76. # Destination folder.
  77. TARGETNAME=${PLATFORM}-${ARCH}
  78. VERSIONNAME=crown-"${VERSION}""${VERSION_SUFFIX}"
  79. PACKAGENAME="${VERSIONNAME}"-"${TARGETNAME}"
  80. if [ "${NOCONFIRM}" -eq 0 ]; then
  81. echo "Crown '${VERSION}' will be packaged as '${PACKAGENAME}'"
  82. echo "Continue? [y/N]"
  83. read -r answer
  84. if [ "${answer}" != "y" ] && [ "${answer}" != "Y" ]; then
  85. echo "Bye."
  86. exit;
  87. fi
  88. fi
  89. # Build engine and tools.
  90. if [ "${PLATFORM}" = "android" ]; then
  91. make android-"${ARCH}"-development MAKE_JOBS="${BUILD_JOBS}"
  92. make android-"${ARCH}"-release MAKE_JOBS="${BUILD_JOBS}"
  93. elif [ "${PLATFORM}" = "html5" ]; then
  94. make wasm-development MAKE_JOBS="${BUILD_JOBS}"
  95. make wasm-release MAKE_JOBS="${BUILD_JOBS}"
  96. elif [ "${PLATFORM}" = "linux" ]; then
  97. make tools-linux-release32 MAKE_JOBS="${BUILD_JOBS}"
  98. make tools-linux-release64 MAKE_JOBS="${BUILD_JOBS}"
  99. make crown-launcher-linux-release64 MAKE_JOBS="${BUILD_JOBS}"
  100. make linux-release64 MAKE_JOBS="${BUILD_JOBS}"
  101. elif [ "${PLATFORM}" = "windows" ]; then
  102. if [ "${ARCH}" = "x64" ]; then
  103. export MINGW=/mingw64
  104. export PATH="${MINGW}/bin:${PATH}"
  105. make tools-mingw-release64 MAKE_JOBS="${BUILD_JOBS}"
  106. make crown-launcher-mingw-release64 MAKE_JOBS="${BUILD_JOBS}"
  107. make mingw-release64 MAKE_JOBS="${BUILD_JOBS}"
  108. # Copy required DLLs.
  109. ldd build/mingw64/bin/crown-editor-release.exe | grep '\/mingw.*\.dll' -o | xargs -I{} cp "{}" build/mingw64/bin
  110. # Copy GTK-related executables.
  111. cp /mingw64/bin/fc-cache.exe build/mingw64/bin
  112. cp /mingw64/bin/fc-cat.exe build/mingw64/bin
  113. cp /mingw64/bin/fc-list.exe build/mingw64/bin
  114. cp /mingw64/bin/fc-match.exe build/mingw64/bin
  115. cp /mingw64/bin/fc-pattern.exe build/mingw64/bin
  116. cp /mingw64/bin/fc-query.exe build/mingw64/bin
  117. cp /mingw64/bin/fc-scan.exe build/mingw64/bin
  118. cp /mingw64/bin/fc-validate.exe build/mingw64/bin
  119. cp /mingw64/bin/gdbus.exe build/mingw64/bin
  120. cp /mingw64/bin/gdk-pixbuf-query-loaders.exe build/mingw64/bin
  121. cp /mingw64/bin/gspawn-win64-helper-console.exe build/mingw64/bin
  122. cp /mingw64/bin/gspawn-win64-helper.exe build/mingw64/bin
  123. cp /mingw64/bin/gtk-query-immodules-3.0.exe build/mingw64/bin
  124. cp /mingw64/bin/gtk-update-icon-cache.exe build/mingw64/bin
  125. # Copy additional DLLs.
  126. cp /mingw64/bin/liblzma-5.dll build/mingw64/bin
  127. cp /mingw64/bin/librsvg-2-2.dll build/mingw64/bin
  128. cp /mingw64/bin/libxml2-16.dll build/mingw64/bin
  129. # Copy GDK pixbuf loaders.
  130. mkdir -p build/mingw64/lib/gdk-pixbuf-2.0/2.10.0/loaders
  131. cp -r /mingw64/lib/gdk-pixbuf-2.0/2.10.0/loaders/*pixbufloader*.dll build/mingw64/lib/gdk-pixbuf-2.0/2.10.0/loaders
  132. cp -r /mingw64/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache build/mingw64/lib/gdk-pixbuf-2.0/2.10.0
  133. # Copy GLib schemas.
  134. mkdir -p build/mingw64/share/glib-2.0/schemas
  135. cp -r /mingw64/share/glib-2.0/schemas/gschemas.compiled build/mingw64/share/glib-2.0/schemas
  136. # Copy Adwaita and hicolor icons.
  137. mkdir -p build/mingw64/share/icons/Adwaita/scalable
  138. mkdir -p build/mingw64/share/icons/Adwaita/symbolic
  139. mkdir -p build/mingw64/share/icons/Adwaita/cursors
  140. cp -r /mingw64/share/icons/Adwaita/icon-theme.cache build/mingw64/share/icons/Adwaita
  141. cp -r /mingw64/share/icons/Adwaita/index.theme build/mingw64/share/icons/Adwaita
  142. cp -r /mingw64/share/icons/Adwaita/scalable/* build/mingw64/share/icons/Adwaita/scalable
  143. cp -r /mingw64/share/icons/Adwaita/symbolic/* build/mingw64/share/icons/Adwaita/symbolic
  144. cp -r /mingw64/share/icons/Adwaita/cursors/* build/mingw64/share/icons/Adwaita/cursors
  145. cp -r /mingw64/share/icons/hicolor build/mingw64/share/icons
  146. mv build/mingw64 build/windows64 # Rename mingw* to windows*.
  147. else
  148. export MINGW=/mingw32
  149. export PATH="${MINGW}/bin:${PATH}"
  150. make -B tools-mingw-release32 MAKE_JOBS="${BUILD_JOBS}"
  151. mv build/mingw32 build/windows32 # Rename mingw* to windows*.
  152. fi
  153. fi
  154. # Strip unnecessary files from build dir.
  155. find build -iname 'obj' \
  156. -o -iname 'projects' \
  157. -o -wholename 'android-*/bin/jit' \
  158. -o -iname '*.a' \
  159. -o -iname '*.exp' \
  160. -o -iname '*.ilk' \
  161. -o -iname '*.lib' \
  162. -o -iname 'bgfx-*' \
  163. -o -iname 'bimg_decode-*' \
  164. -o -iname 'bimg_encode-*' \
  165. -o -iname 'bimg-*' \
  166. -o -iname 'bullet-*' \
  167. -o -iname 'bx-*' \
  168. | tr '\n' '\0' \
  169. | xargs -0 -n1 rm -rf
  170. # Create release package from build dir.
  171. DISTDIR=dist
  172. PARTIALSDIR="${DISTDIR}"/"${VERSIONNAME}"/partials
  173. PARTIALPACKAGE="${PARTIALSDIR}"/"${PACKAGENAME}"
  174. mkdir -p "${PARTIALPACKAGE}"
  175. mv build "${PARTIALPACKAGE}"/platforms
  176. if [ "${PLATFORM}" = "linux" ] || [ "${PLATFORM}" = "windows" ]; then
  177. if [ "${ARCH}" = "x64" ]; then
  178. # Copy exporters, samples etc. to package dir.
  179. cp LICENSE "${PARTIALPACKAGE}"
  180. cp -r exporters "${PARTIALPACKAGE}"
  181. cp -r samples "${PARTIALPACKAGE}"
  182. mv "${PARTIALPACKAGE}"/samples/core "${PARTIALPACKAGE}"
  183. if [ "${PLATFORM}" = "linux" ]; then
  184. # Copy crown-launcher.
  185. mv "${PARTIALPACKAGE}"/platforms/linux64/bin/crown-launcher-release "${PARTIALPACKAGE}"/crown-launcher
  186. # Copy app icon and .desktop file.
  187. cp tools/level_editor/resources/org.crownengine.Crown.desktop "${PARTIALPACKAGE}"
  188. cp tools/level_editor/resources/icons/hicolor/scalable/apps/org.crownengine.Crown.svg "${PARTIALPACKAGE}"
  189. elif [ "${PLATFORM}" = "windows" ]; then
  190. # Copy crown-launcher.
  191. mv "${PARTIALPACKAGE}"/platforms/windows64/bin/crown-launcher-release.exe "${PARTIALPACKAGE}"/crown-launcher.exe
  192. fi
  193. fi
  194. fi
  195. # Compress dist directory preserving file attributes.
  196. tar -czf "${DISTDIR}"-"${TARGETNAME}".tar.gz "${DISTDIR}"