build_package_image.py 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. # Copyright (c) Contributors to the Open 3D Engine Project.
  2. # For complete copyright and license terms please see the LICENSE at the root
  3. # of this distribution.
  4. #
  5. # SPDX-License-Identifier: Apache-2.0 OR MIT
  6. #
  7. #
  8. import argparse
  9. from pathlib import Path
  10. import re
  11. import shutil
  12. from tempfile import TemporaryDirectory
  13. import sys
  14. sys.path.append(str(Path(__file__).parent.parent.parent / 'Scripts'))
  15. from builders.vcpkgbuilder import VcpkgBuilder
  16. import builders.monkeypatch_tempdir_cleanup
  17. def main():
  18. parser = argparse.ArgumentParser(description='Builds this package')
  19. parser.add_argument(
  20. '--platform-name',
  21. choices=['windows', 'android', 'mac', 'ios', 'linux'],
  22. default=VcpkgBuilder.defaultPackagePlatformName(),
  23. )
  24. args = parser.parse_args()
  25. vcpkg_platform_map = {
  26. 'windows': 'windows',
  27. 'android': 'android',
  28. 'mac': 'mac',
  29. 'ios': 'ios',
  30. 'linux': 'linux',
  31. 'linux-aarch64': 'linux' }
  32. vcpkg_platform = vcpkg_platform_map[args.platform_name]
  33. if args.platform_name == 'linux-aarch64':
  34. os.environ['VCPKG_FORCE_SYSTEM_BINARIES'] = '1'
  35. package_system_dir = Path(__file__).resolve().parents[1]
  36. crashpad_package_source_dir = package_system_dir / 'Crashpad'
  37. output_dir = package_system_dir / f'Crashpad-{args.platform_name}'
  38. crashpad_patch = crashpad_package_source_dir / 'add_o3de_handler_extensions.patch'
  39. cmake_find_file = crashpad_package_source_dir / f'FindCrashpad_{args.platform_name}.cmake.template'
  40. if not cmake_find_file.exists():
  41. cmake_find_file = crashpad_package_source_dir / 'FindCrashpad.cmake.template'
  42. cmake_find_file_template = cmake_find_file.open().read()
  43. extraLibsPerPlatform = {
  44. 'linux': {
  45. 'EXTRA_SHARED_LIBS': '',
  46. 'EXTRA_STATIC_LIBS': '',
  47. 'KEEP_LIBS': [],
  48. },
  49. 'windows': {
  50. 'EXTRA_SHARED_LIBS': '',
  51. 'EXTRA_STATIC_LIBS': '',
  52. 'KEEP_LIBS': [],
  53. },
  54. 'mac': {
  55. 'EXTRA_SHARED_LIBS': '',
  56. 'EXTRA_STATIC_LIBS': '',
  57. 'KEEP_LIBS': [],
  58. },
  59. 'ios': {
  60. 'EXTRA_SHARED_LIBS': '',
  61. 'EXTRA_STATIC_LIBS': '',
  62. 'KEEP_LIBS': [],
  63. },
  64. 'android': {
  65. 'EXTRA_SHARED_LIBS': '',
  66. 'EXTRA_STATIC_LIBS': '',
  67. 'KEEP_LIBS': [],
  68. },
  69. }
  70. with TemporaryDirectory() as tempdir:
  71. tempdir = Path(tempdir)
  72. builder = VcpkgBuilder('Crashpad', 'crashpad', tempdir, args.platform_name, static=False)
  73. builder.cloneVcpkg('5c41ff21f6feda702a7d5a1afc765f88d25783c5') # v2024-04-11#7. Crashpad repo at 7e0af1d4d45b526f01677e74a56f4a951b70517d
  74. builder.bootstrap()
  75. builder.patch(crashpad_patch)
  76. builder.build(allow_unsupported=True) # Required for the python package on linux which is in native triplet
  77. builder.copyBuildOutputTo(
  78. output_dir,
  79. extraFiles={
  80. Path(f'{builder.vcpkgDir}/buildtrees/{builder.portName}/{builder.triplet}-rel/gen/build/chromeos_buildflags.h'):
  81. Path(f'{output_dir}/{builder.packageName}/include/{builder.portName}/mini_chromium/build/'),
  82. Path(f'{builder.vcpkgDir}/ports/{builder.portName}/o3de_handler_extensions.patch'):
  83. Path(f'{output_dir}/{builder.packageName}/share/{builder.portName}/')
  84. })
  85. port_dir = output_dir / builder.packageName / 'include' / builder.portName
  86. package_info_list = [
  87. {
  88. 'dir': output_dir,
  89. 'settings': {
  90. 'PackageName': f'Crashpad-0.8.0-rev2-{args.platform_name}',
  91. 'URL': 'https://chromium.googlesource.com/crashpad/crashpad/+/master/README.md',
  92. 'License': 'Apache-2.0',
  93. 'LicenseFile': f'{builder.packageName}/share/{builder.portName}/copyright'
  94. }
  95. },
  96. {
  97. 'dir': port_dir / 'mini_chromium' / 'base' / 'third_party' / 'icu',
  98. 'settings': {
  99. 'PackageName': 'ICU',
  100. 'URL': 'http://site.icu-project.org/',
  101. 'License': 'Unicode-DFS-2016',
  102. 'LicenseFile': 'LICENSE'
  103. }
  104. },
  105. {
  106. 'dir': port_dir / 'mini_chromium',
  107. 'settings': {
  108. 'PackageName': 'mini_chromium',
  109. 'URL': 'https://chromium.googlesource.com/chromium/mini_chromium/',
  110. 'License': 'BSD-3-Clause',
  111. 'LicenseFile': 'LICENSE'
  112. }
  113. }
  114. ]
  115. if args.platform_name == 'windows':
  116. package_info_list += [
  117. {
  118. 'dir': port_dir / 'getopt',
  119. 'settings': {
  120. 'PackageName': 'getopt',
  121. 'URL': 'https://sourceware.org/legacy-ml/newlib/2005/msg00758.html',
  122. 'License': 'custom',
  123. 'LicenseFile': 'LICENSE'
  124. }
  125. },
  126. {
  127. 'dir': port_dir / 'zlib',
  128. 'settings': {
  129. 'PackageName': 'zlib',
  130. 'URL': 'https://zlib.net/',
  131. 'License': 'Zlib',
  132. 'LicenseFile': 'LICENSE'
  133. }
  134. }
  135. ]
  136. for package_info in package_info_list:
  137. builder.writePackageInfoFile(
  138. package_info.get('dir', ''),
  139. settings=package_info.get('settings', {})
  140. )
  141. builder.writeCMakeFindFile(
  142. output_dir,
  143. template=cmake_find_file_template,
  144. templateEnv=extraLibsPerPlatform[vcpkg_platform],
  145. overwrite_find_file=None
  146. )
  147. if __name__ == '__main__':
  148. main()