From f9a6f68ef9f53a660f47061501b48d21ad343471 Mon Sep 17 00:00:00 2001 From: Relintai Date: Wed, 9 Feb 2022 15:19:59 +0100 Subject: [PATCH] Add the build tools from broken seals. --- game/.gitignore => .gitignore | 0 .sconsign.dblite | Bin 0 -> 333 bytes HEADS | 1 + LICENSE | 19 + Makefile | 20 + SConstruct | 644 ++++++++++++++++++ build.config | 44 ++ build.config.example | 45 ++ build_ios.sh | 19 + build_ios_release.sh | 21 + build_osx.sh | 15 + build_pi.sh | 12 + build_uwp.bat | 14 + editor.bat | 6 + editor.sh | 6 + export_all.sh | 52 ++ ged.sh | 6 + make_release.sh | 53 ++ module_config.py | 27 + play.sh | 6 + podman_build_all.sh | 126 ++++ tools/build-containers/.gitignore | 12 + tools/build-containers/Dockerfile.android | 18 + tools/build-containers/Dockerfile.base | 10 + tools/build-containers/Dockerfile.ios | 39 ++ tools/build-containers/Dockerfile.javascript | 13 + tools/build-containers/Dockerfile.linux | 7 + tools/build-containers/Dockerfile.msvc | 29 + tools/build-containers/Dockerfile.osx | 18 + tools/build-containers/Dockerfile.windows | 7 + tools/build-containers/Dockerfile.xcode | 77 +++ tools/build-containers/README.md | 10 + tools/build-containers/build_containers.sh | 55 ++ tools/build-containers/files/msvc-fixup.sh | 24 + .../patches/osxcross-pr284-compiler-rt.patch | 118 ++++ tools/build-containers/upload.sh | 27 + tools/copy_repos.py | 111 +++ tools/export_presets.cfg.example | 590 ++++++++++++++++ tools/osx/create_editor_app.sh | 12 + tools/osx/create_export_templates.sh | 12 + tools/osx/lipo.sh | 6 + .../pre_release_check_files_present.sh | 48 ++ tools/vscode-setup/launch.json | 67 ++ tools/vscode-setup/settings.json | 6 + tools/vscode-setup/tasks.json | 26 + 45 files changed, 2478 insertions(+) rename game/.gitignore => .gitignore (100%) create mode 100644 .sconsign.dblite create mode 100644 HEADS create mode 100644 LICENSE create mode 100644 Makefile create mode 100644 SConstruct create mode 100644 build.config create mode 100644 build.config.example create mode 100755 build_ios.sh create mode 100755 build_ios_release.sh create mode 100755 build_osx.sh create mode 100755 build_pi.sh create mode 100644 build_uwp.bat create mode 100644 editor.bat create mode 100755 editor.sh create mode 100755 export_all.sh create mode 100755 ged.sh create mode 100755 make_release.sh create mode 100644 module_config.py create mode 100755 play.sh create mode 100755 podman_build_all.sh create mode 100644 tools/build-containers/.gitignore create mode 100644 tools/build-containers/Dockerfile.android create mode 100644 tools/build-containers/Dockerfile.base create mode 100644 tools/build-containers/Dockerfile.ios create mode 100644 tools/build-containers/Dockerfile.javascript create mode 100644 tools/build-containers/Dockerfile.linux create mode 100644 tools/build-containers/Dockerfile.msvc create mode 100644 tools/build-containers/Dockerfile.osx create mode 100644 tools/build-containers/Dockerfile.windows create mode 100644 tools/build-containers/Dockerfile.xcode create mode 100644 tools/build-containers/README.md create mode 100755 tools/build-containers/build_containers.sh create mode 100755 tools/build-containers/files/msvc-fixup.sh create mode 100644 tools/build-containers/files/patches/osxcross-pr284-compiler-rt.patch create mode 100644 tools/build-containers/upload.sh create mode 100644 tools/copy_repos.py create mode 100644 tools/export_presets.cfg.example create mode 100755 tools/osx/create_editor_app.sh create mode 100755 tools/osx/create_export_templates.sh create mode 100755 tools/osx/lipo.sh create mode 100755 tools/release/pre_release_check_files_present.sh create mode 100644 tools/vscode-setup/launch.json create mode 100644 tools/vscode-setup/settings.json create mode 100644 tools/vscode-setup/tasks.json diff --git a/game/.gitignore b/.gitignore similarity index 100% rename from game/.gitignore rename to .gitignore diff --git a/.sconsign.dblite b/.sconsign.dblite new file mode 100644 index 0000000000000000000000000000000000000000..bd90e5de8b4fb4a2404114d6b20f20390b5a01f8 GIT binary patch literal 333 zcmY+8K~4fe5JkldVG!{EoIp0c@&scfQ6er_6EZ#BLM1cZlc^pPG$gREoyDQJ4+oHL z(-><}saIA1=kJn3*0~C`W$Fmd9?rN+4&%S=&HT|CbWK}0rn>+lbXXatVH}@~Yc~AN z<2`Trp1KmuyN!1-vr3D}{LB+5b=E?up8fsuKagnKrqBp0y%T1@TvLr__iK-hu@BZQTzbDp?#46 literal 0 HcmV?d00001 diff --git a/HEADS b/HEADS new file mode 100644 index 0000000..f0db666 --- /dev/null +++ b/HEADS @@ -0,0 +1 @@ +{"engine": {"3.2": "94a0fc47f7b4e90f8973f9adbfd3312579ed2825", "master": "8c73e813134001e575b6f59e3b0100471c007410", "3.x": "cdd4f2722a7c16d9e36521d7180cc80715591554"}, "world_generator": {"master": "260c430f11b0b591eaf4714516419aa327d2842c"}, "entity_spell_system": {"master": "3c334566ff05a74e913cd5c5ff38ae45aba5f5d2"}, "ui_extensions": {"master": "80a3b96fc56991a0f88a1d441ed1e3cebaf3307a"}, "voxelman": {"master": "65485930a20f65844d496b4ba47dec5b6ed70b91"}, "texture_packer": {"master": "ae4d222fbaade063ed6f0bc9f3aaa53df68a7fed"}, "fastnoise": {"master": "46bb1f610bfb7171613b5c708d312bcf94e89356"}, "mesh_data_resource": {"master": "2bf76b8d07c2821161886ea4ea6edc788ec2ee51"}, "procedural_animations": {"master": "f8aae42bf06b3936cc6bd24cb18e1c3ec9f78f4f"}, "ess_data": {"master": "3bd637fdd3304b64a18287a49a6b7387acf2f5de"}, "props": {"master": "ce369408caee7ab4c83aa3235c7c1324bde424a6"}, "mesh_utils": {"master": "902dae29797789d406faf256a22aa73b7f6d5261"}, "broken_seals_module": {"master": "52c5a81350db1c29d375c63d95010260911ec034"}, "thread_pool": {"master": "c401b7a027248158dae3fbce20d637d34eaaedb9"}, "terraman": {"master": "e2a465a1abcef44f2600afc589a3e4a413e45049"}} \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..dfbc805 --- /dev/null +++ b/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2019-2021 Péter Magyar + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..f1b4757 --- /dev/null +++ b/Makefile @@ -0,0 +1,20 @@ +all: + scons bels -j5 + +e: + scons belsE -j5 + +t: + scons belsT -j5 + +v: + scons belsV -j5 + +W: + scons belsW -j5 + +p: + scons belsP -j5 + +m: + scons belsM -j5 diff --git a/SConstruct b/SConstruct new file mode 100644 index 0000000..3fd7b9a --- /dev/null +++ b/SConstruct @@ -0,0 +1,644 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2019-2021 Péter Magyar +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +EnsureSConsVersion(0, 98, 1) + +import sys +import os +import subprocess +import json +import shutil +import traceback + +import module_config + +repository_index = 0 +module_clone_path = '/modules/' +clone_command = 'git clone {0} {1}' + +visual_studio_call_vcvarsall = False +visual_studio_vcvarsall_path = 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Auxiliary\\Build\\vcvarsall.bat' +visual_studio_arch = 'amd64' + +exports = { + 'global': [], + 'linux': [], + 'windows': [], + 'android': [], + 'javascript': [], + 'osx': [], + 'ios': [], + 'server': [], +} + +additional_commands = { + 'global': [], + 'linux': [], + 'windows': [], + 'android': [], + 'javascript': [], + 'osx': [], + 'ios': [], + 'server': [], +} + +target_commits = {} + +def onerror(func, path, exc_info): + """ + https://stackoverflow.com/questions/2656322/shutil-rmtree-fails-on-windows-with-access-is-denied + + Because Windows. + + Error handler for ``shutil.rmtree``. + + If the error is due to an access error (read only file) + it attempts to add write permission and then retries. + + If the error is for another reason it re-raises the error. + + Usage : ``shutil.rmtree(path, onerror=onerror)`` + """ + import stat + if not os.access(path, os.W_OK): + # Is the error an access error ? + os.chmod(path, stat.S_IWUSR) + func(path) + else: + raise + +def load_target_commits_array(): + global target_commits + + if os.path.isfile('./HEADS'): + with open('./HEADS', 'r') as infile: + target_commits = json.load(infile) + else: + target_commits = {} + +def save_target_commits_array(): + with open('./HEADS', 'w') as outfile: + json.dump(target_commits, outfile) + +def update_repository(data, clone_path, branch = 'master'): + cwd = os.getcwd() + + full_path = cwd + clone_path + data[1] + '/' + + if not os.path.isdir(full_path): + os.chdir(cwd + clone_path) + + subprocess.call(clone_command.format(data[0][repository_index], data[1]), shell=True) + + os.chdir(full_path) + + subprocess.call('git reset', shell=True) + subprocess.call('git reset --hard', shell=True) + subprocess.call('git clean -f -d', shell=True) + subprocess.call('git checkout -B ' + branch + ' origin/' + branch, shell=True) + subprocess.call('git reset', shell=True) + subprocess.call('git reset --hard', shell=True) + subprocess.call('git clean -f -d', shell=True) + subprocess.call('git pull origin ' + branch, shell=True) + + process = subprocess.Popen('git rev-parse HEAD', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + output = process.communicate()[0].decode().strip() + + if data[1] not in target_commits: + target_commits[data[1]] = {} + + target_commits[data[1]][branch] = output + + os.chdir(cwd) + +def setup_repository(data, clone_path, branch = 'master'): + cwd = os.getcwd() + + full_path = cwd + clone_path + data[1] + '/' + + if not os.path.isdir(full_path): + os.chdir(cwd + clone_path) + + subprocess.call(clone_command.format(data[0][repository_index], data[1]), shell=True) + + os.chdir(full_path) + + subprocess.call('git reset', shell=True) + subprocess.call('git reset --hard', shell=True) + subprocess.call('git clean -f -d', shell=True) + subprocess.call('git checkout -B ' + branch + ' origin/' + branch, shell=True) + subprocess.call('git pull origin ' + branch, shell=True) + subprocess.call('git reset', shell=True) + subprocess.call('git reset --hard', shell=True) + + if data[1] in target_commits: + target = target_commits[data[1]][branch] + + subprocess.call('git checkout -B ' + branch + ' ' + target, shell=True) + subprocess.call('git clean -f -d', shell=True) + subprocess.call('git reset', shell=True) + subprocess.call('git reset --hard', shell=True) + + os.chdir(cwd) + +def copy_repository(data, target_folder, clone_path): + copytree(os.path.abspath(clone_path + data[1] + '/' + data[2]), os.path.abspath(target_folder + data[1])) + +def copytree(src, dst): + for item in os.listdir(src): + sp = os.path.join(src, item) + dp = os.path.join(dst, item) + + if os.path.isdir(sp): + if os.path.isdir(dp): + shutil.rmtree(dp, onerror=onerror) + + shutil.copytree(sp, dp) + else: + if not os.path.isdir(dst): + os.makedirs(dst) + + shutil.copy2(sp, dp) + +def validate_repository_origin(data, clone_path, branch = 'master'): + full_path = os.path.abspath(clone_path) + + if not os.path.isdir(full_path): + return + + cwd = os.getcwd() + os.chdir(full_path) + + res = subprocess.run('git remote -v', shell=True, capture_output=True) + + resstr = res.stdout.decode('ascii') + resarr = resstr.split("\n") + res_orig = [] + + for l in resarr: + if "origin" in l: + res_orig.append(l) + + if len(res_orig) == 0: + print("The repository " + clone_path + " does not seem to have an origin remote. Adding it.") + + subprocess.call('git remote add origin ' + data[0][repository_index], shell=True) + + os.chdir(cwd) + + return + + for l in data[0]: + for ll in res_orig: + if l in ll: + os.chdir(cwd) + + return + + rind = 0 + + if 'git@' in res_orig[0]: + rind = 1 + + subprocess.call('git remote remove origin', shell=True) + subprocess.call('git remote add origin ' + data[0][rind], shell=True) + subprocess.call('git pull origin', shell=True) + subprocess.call('git checkout origin/' + branch, shell=True) + + print('Updated git remote origin in ' + clone_path) + + os.chdir(cwd) + +def remove_repository(data, target_folder): + folder = os.path.abspath(target_folder + data[1]) + + if os.path.isdir(folder): + shutil.rmtree(folder) + +def update_engine(): + validate_repository_origin(module_config.engine_repository, './engine/', module_config.godot_branch) + update_repository(module_config.engine_repository, '/', module_config.godot_branch) + +def update_modules(): + for rep in module_config.module_repositories: + update_repository(rep, module_clone_path) + copy_repository(rep, './engine/modules/', '.' + module_clone_path) + +def update_addons(): + for rep in module_config.addon_repositories: + update_repository(rep, module_clone_path) + copy_repository(rep, './game/addons/', '.' + module_clone_path) + +def update_addons_third_party_addons(): + for rep in module_config.third_party_addon_repositories: + update_repository(rep, module_clone_path) + copy_repository(rep, './game/addons/', '.' + module_clone_path) + +def update_all(): + update_engine() + update_modules() + update_addons() + update_addons_third_party_addons() + + save_target_commits_array() + + +def setup_engine(): + validate_repository_origin(module_config.engine_repository, './engine/', module_config.godot_branch) + setup_repository(module_config.engine_repository, '/', module_config.godot_branch) + +def setup_modules(): + for rep in module_config.module_repositories: + setup_repository(rep, module_clone_path) + copy_repository(rep, './engine/modules/', '.' + module_clone_path) + + for rep in module_config.removed_modules: + remove_repository(rep, './engine/modules/') + + +def setup_addons(): + for rep in module_config.addon_repositories: + setup_repository(rep, module_clone_path) + copy_repository(rep, './game/addons/', '.' + module_clone_path) + +def setup_addons_third_party_addons(): + for rep in module_config.third_party_addon_repositories: + setup_repository(rep, module_clone_path) + copy_repository(rep, './game/addons/', '.' + module_clone_path) + +def setup_all(): + setup_engine() + setup_modules() + setup_addons() + setup_addons_third_party_addons() + +def format_path(path): + if 'win' in sys.platform: + path = path.replace('/', '\\') + path = path.replace('~', '%userprofile%') + + return path + +def get_exports_for(platform): + export_command = 'export ' + command_separator = ';' + + if 'win' in sys.platform: + command_separator = '&' + export_command = 'set ' + + command = '' + + for p in exports[platform]: + command += export_command + p + command_separator + + return command + +def get_additional_commands_for(platform): + command_separator = ';' + + if 'win' in sys.platform: + command_separator = '&' + + command = '' + + for p in additional_commands[platform]: + command += p + command_separator + + return command + + + +def parse_config(): + global visual_studio_vcvarsall_path + global visual_studio_arch + global visual_studio_call_vcvarsall + global exports + + if not os.path.isfile('build.config'): + return + + with open('build.config', 'r') as f: + + for line in f: + ls = line.strip() + if ls == '' or ls.startswith('#'): + continue + + words = line.split() + + if (len(words) < 2): + print('This build.config line is malformed, and got ignored: ' + ls) + continue + + if words[0] == 'visual_studio_vcvarsall_path': + visual_studio_vcvarsall_path = format_path(ls[29:]) + elif words[0] == 'visual_studio_arch': + visual_studio_arch = format_path(ls[19:]) + elif words[0] == 'visual_studio_call_vcvarsall': + visual_studio_call_vcvarsall = words[1].lower() in [ 'true', '1', 't', 'y', 'yes' ] + elif words[0] == 'export': + if (len(words) < 3) or not words[1] in exports: + print('This build.config line is malformed, and got ignored: ' + ls) + continue + + export_path = format_path(ls[8 + len(words[1]):]) + + exports[words[1]].append(export_path) + elif words[0] == 'run': + if (len(words) < 3) or not words[1] in additional_commands: + print('This build.config line is malformed, and got ignored: ' + ls) + continue + + final_cmd = format_path(ls[5 + len(words[1]):]) + + additional_commands[words[1]].append(final_cmd) + +parse_config() + +env = Environment() + +if len(sys.argv) > 1: + + arg = sys.argv[1] + + arg_split = arg.split('_') + arg = arg_split[0] + arg_split = arg_split[1:] + + if arg[0] == 'b': + build_string = get_exports_for('global') + get_additional_commands_for('global') + 'scons ' + + build_string += 'tools=' + if 'e' in arg: + build_string += 'yes' + else: + build_string += 'no' + build_string += ' ' + + build_string += 'target=' + if 'r' in arg: + build_string += 'release' + elif 'd' in arg: + build_string += 'debug' + else: + build_string += 'release_debug' + build_string += ' ' + + build_string += 'custom_modules_shared=' + if 's' in arg: + build_string += 'yes' + else: + build_string += 'no' + build_string += ' ' + + if 'm' in arg: + build_string += 'use_mingw=yes' + else: + if 'win' in sys.platform and visual_studio_call_vcvarsall: + build_string = 'call "{0}" {1}&'.format(visual_studio_vcvarsall_path, visual_studio_arch) + build_string + + if 'o' in arg: + build_string += 'use_llvm=yes' + + if 'v' in arg: + build_string += 'vsproj=yes' + + for i in range(2, len(sys.argv)): + build_string += ' ' + sys.argv[i] + ' ' + + if 'slim' in arg_split: + build_string += module_config.slim_args + build_string += ' ' + + if 'latomic' in arg_split: + build_string += 'LINKFLAGS="-latomic"' + build_string += ' ' + + if 'strip' in arg_split: + build_string += 'debug_symbols=no' + build_string += ' ' + + if 'threads' in arg_split: + build_string += 'threads_enabled=yes' + build_string += ' ' + + target = ' ' + + if 'E' in arg: + target += 'bin/libess.x11.opt.tools.64.so' + elif 'T' in arg: + target += 'bin/libtexture_packer.x11.opt.tools.64.so' + elif 'V' in arg: + target += 'bin/libvoxelman.x11.opt.tools.64.so' + elif 'W' in arg: + target += 'bin/libworld_generator.x11.opt.tools.64.so' + elif 'P' in arg: + target += 'bin/libprocedural_animations.x11.opt.tools.64.so' + + cwd = os.getcwd() + full_path = cwd + '/engine/' + + if not os.path.isdir(full_path): + print('engine directory doesnt exists.') + exit() + + os.chdir(full_path) + + if 'l' in arg: + build_string += 'platform=x11' + + build_string = get_exports_for('linux') + get_additional_commands_for('linux') + build_string + target + + print('Running command: ' + build_string) + + subprocess.call(build_string, shell=True) + elif 'w' in arg: + build_string += 'platform=windows' + + build_string = get_exports_for('windows') + get_additional_commands_for('windows') + build_string + + print('Running command: ' + build_string) + + subprocess.call(build_string, shell=True) + elif 'a' in arg: + build_string += 'platform=android' + + build_string = get_exports_for('android') + get_additional_commands_for('android') + build_string + + print('Running command: ' + build_string + ' android_arch=armv7') + subprocess.call(build_string + ' android_arch=armv7', shell=True) + print('Running command: ' + build_string + ' android_arch=arm64v8') + subprocess.call(build_string + ' android_arch=arm64v8', shell=True) + print('Running command: ' + build_string + ' android_arch=x86') + subprocess.call(build_string + ' android_arch=x86', shell=True) + + os.chdir(full_path + 'platform/android/java/') + + print('Running command: ' + get_exports_for('global') + get_additional_commands_for('global') + get_exports_for('android') + get_additional_commands_for('android') + './gradlew generateGodotTemplates') + subprocess.call(get_exports_for('global') + get_additional_commands_for('global') + get_exports_for('android') + get_additional_commands_for('android') + './gradlew generateGodotTemplates', shell=True) + elif 'j' in arg: + build_string += 'platform=javascript' + + build_string = get_exports_for('javascript') + get_additional_commands_for('javascript') + build_string + + print('Running command: ' + build_string) + subprocess.call(build_string, shell=True) + elif 'i' in arg: + build_string += 'platform=iphone' + + print('Running command: ' + build_string) + subprocess.call(build_string, shell=True) + + #print('Running command: ' + build_string + " arch=arm") + #subprocess.call(build_string + ' arch=arm', shell=True) + #print('Running command: ' + build_string + " arch=arm64") + #subprocess.call(build_string + ' arch=arm64', shell=True) + #print('Running command: ' + build_string + " arch=x86_64") + #subprocess.call(build_string + ' arch=x86_64', shell=True) + elif 'x' in arg: + build_string += 'platform=osx' + + build_string = get_exports_for('osx') + get_additional_commands_for('osx') + build_string + target + + print('Running command: ' + build_string) + subprocess.call(build_string, shell=True) + elif 'h' in arg: + #headless + build_string += 'platform=server' + + build_string = get_exports_for('server') + get_additional_commands_for('server') + build_string + + print('Running command: ' + build_string) + + subprocess.call(build_string, shell=True) + + else: + print('No platform specified') + exit() + + exit() +# elif arg[0] == 'p': +# if arg == 'p': +# print("Applies a patch. No Patches right now.Append s for the skeleton editor patch. For example: ps ") +# exit() +# +# cwd = os.getcwd() +# full_path = cwd + '/engine/' +# +# if not os.path.isdir(full_path): +# print('engine directory does not exists.') +# exit() +# +# os.chdir(full_path) +# +# #apply the patch to just the working directory, without creating a commit +# +# if 's' in arg: +# subprocess.call('git apply --index ../patches/custom_skeleton_3d_editor_plugin.patch', shell=True) +# +# #unstage all files +# subprocess.call('git reset', shell=True) +# +# vman_full_path = cwd + '/engine/modules/voxelman/' +# +# #also patch voxelman as the plugin changes forward_spatial_gui_input's definition +# if os.path.isdir(vman_full_path): +# os.chdir(vman_full_path) +# +# subprocess.call('git apply --index ../../../patches/fix-voxel-editor-after-the-skeleton-editor-patch.patch', shell=True) +# +# #unstage all files +# subprocess.call('git reset', shell=True) +# else: +# print('Voxelman directory does not exists, skipping patch.') +# +# exit() + +opts = Variables(args=ARGUMENTS) + +opts.Add('a', 'What to do', '') +opts.Add(EnumVariable('action', 'What to do', 'setup', ('setup', 'update'))) +opts.Add('t', 'Action target', '') +opts.Add(EnumVariable('target', 'Action target', 'all', ('all', 'engine', 'modules', 'all_addons', 'addons', 'third_party_addons'))) +opts.Add(EnumVariable('repository_type', 'Type of repositories to clone from first', 'http', ('http', 'ssh'))) + +opts.Update(env) +Help(opts.GenerateHelpText(env)) + +load_target_commits_array() + +rt = env['repository_type'] + +if rt == 'ssh': + repository_index = 1 + +action = env['action'] +target = env['target'] + +if env['a']: + action = env['a'] + +if env['t']: + target = env['t'] + +if not os.path.isdir('./modules'): + os.mkdir('./modules') + +if 'm' in action: + godot_branch = 'master' + +if 'setup' in action or action[0] == 's': + if target == 'all': + setup_all() + elif target == 'engine': + setup_engine() + elif target == 'modules': + setup_modules() + elif target == 'all_addons': + setup_addons() + setup_addons_third_party_addons() + elif target == 'addons': + setup_addons() + elif target == 'third_party_addons': + setup_addons_third_party_addons() +elif 'update' in action or action[0] == 'u': + if target == 'all': + update_all() + elif target == 'engine': + update_engine() + save_target_commits_array() + elif target == 'modules': + update_modules() + save_target_commits_array() + elif target == 'all_addons': + update_addons() + update_addons_third_party_addons() + save_target_commits_array() + elif target == 'addons': + update_addons() + save_target_commits_array() + elif target == 'third_party_addons': + update_addons_third_party_addons() + save_target_commits_array() + diff --git a/build.config b/build.config new file mode 100644 index 0000000..0e26d98 --- /dev/null +++ b/build.config @@ -0,0 +1,44 @@ +# Copyright (c) 2019-2021 Péter Magyar +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +# Rename this file to build.config to use it + +# Lines starting with # are comments. (Only works at the start of the line!) + +# Note: +# ~ will be converted to %userprofile% on windows +# / will be converted to \ on windows +# so you don't have to worry about it + +# Visual studio related setup: +visual_studio_call_vcvarsall True +visual_studio_vcvarsall_path C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Auxiliary/Build/vcvarsall.bat +visual_studio_arch amd64 + +# export related setup +# available export targets: global, linux, windows, android, javascript + +export global SCONS_CACHE=~/.scons_cache +export global SCONS_CACHE_LIMIT=5000 + +export android ANDROID_HOME=~/SDKs/Android/SDK + +run javascript source ~/SDKs/emsdk/emsdk_env.sh + diff --git a/build.config.example b/build.config.example new file mode 100644 index 0000000..f5ef65d --- /dev/null +++ b/build.config.example @@ -0,0 +1,45 @@ +# Copyright (c) 2019-2021 Péter Magyar +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +# Rename this file to build.config to use it + +# Lines starting with # are comments. (Only works at the start of the line!) + +# Note: +# ~ will be converted to %userprofile% on windows +# / will be converted to \ on windows +# so you don't have to worry about it + +# Visual studio related setup: +visual_studio_call_vcvarsall True +visual_studio_vcvarsall_path C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Auxiliary/Build/vcvarsall.bat +visual_studio_arch amd64 + +# You can export variables with the export keyword +# You can run commands with the run keywords +# +# available export/run targets: global, linux, windows, android, javascript + +export global SCONS_CACHE=~/.scons_cache +export global SCONS_CACHE_LIMIT=5000 + +export android ANDROID_HOME=~/SDKs/Android/SDK + +run javascript source ~/SDKs/emsdk/emsdk_env.sh diff --git a/build_ios.sh b/build_ios.sh new file mode 100755 index 0000000..6d287a4 --- /dev/null +++ b/build_ios.sh @@ -0,0 +1,19 @@ + +export SCONS_CACHE=~/.scons_cache +export SCONS_CACHE_LIMIT=5000 + +cd ./engine + +scons -j6 p=iphone tools=no target=release_debug arch=arm module_arkit_enabled=no game_center=no +scons -j6 p=iphone tools=no target=release_debug arch=arm64 module_arkit_enabled=no game_center=no +lipo -create bin/libgodot.iphone.opt.debug.arm.a bin/libgodot.iphone.opt.debug.arm64.a -output bin/libgodot.iphone.debug.fat.a +rm bin/ios_xcode/libgodot.iphone.debug.fat.a +cp bin/libgodot.iphone.debug.fat.a bin/ios_xcode/libgodot.iphone.debug.fat.a + +rm bin/iphone.zip +cd bin/ios_xcode +zip -r -X ../iphone.zip . + +cd .. +cd .. +cd .. diff --git a/build_ios_release.sh b/build_ios_release.sh new file mode 100755 index 0000000..f5d8303 --- /dev/null +++ b/build_ios_release.sh @@ -0,0 +1,21 @@ + +export SCONS_CACHE=~/.scons_cache +export SCONS_CACHE_LIMIT=5000 + +cd ./engine + +scons -j6 p=iphone tools=no target=release arch=arm module_arkit_enabled=no game_center=no +scons -j6 p=iphone tools=no target=release arch=arm64 module_arkit_enabled=no game_center=no +lipo -create bin/libgodot.iphone.opt.arm.a bin/libgodot.iphone.opt.arm64.a -output bin/libgodot.iphone.release.fat.a +rm bin/ios_xcode/libgodot.iphone.release.fat.a +cp bin/libgodot.iphone.release.fat.a bin/ios_xcode/libgodot.iphone.release.fat.a + +rm bin/iphone.zip +cd bin/ios_xcode +zip -r -X ../iphone.zip . + +cd .. +cd .. + + +cd .. diff --git a/build_osx.sh b/build_osx.sh new file mode 100755 index 0000000..fab5d0d --- /dev/null +++ b/build_osx.sh @@ -0,0 +1,15 @@ + +export SCONS_CACHE=~/.scons_cache +export SCONS_CACHE_LIMIT=5000 + +cd ./engine + +scons -j6 platform=osx target=release_debug + +rm -Rf bin/Godot.app +cp -r misc/dist/osx_tools.app ./bin/Godot.app +mkdir -p ./bin/Godot.app/Contents/MacOS +cp bin/godot.osx.opt.tools.64 bin/Godot.app/Contents/MacOS/Godot +chmod +x bin/Godot.app/Contents/MacOS/Godot + +cd .. diff --git a/build_pi.sh b/build_pi.sh new file mode 100755 index 0000000..f7c52c2 --- /dev/null +++ b/build_pi.sh @@ -0,0 +1,12 @@ + +scons bel_latomic_strip_slim -j4 +scons bl_latomic_strip_slim -j4 +scons blr_latomic_strip_slim -j4 + +rm -f ./engine/bin/godot.x11.pi4.opt.32 +rm -f ./engine/bin/godot.x11.pi4.opt.debug.32 +rm -f ./engine/bin/godot.x11.pi4.opt.tools.32 + +mv ./engine/bin/godot.x11.opt.32 ./engine/bin/godot.x11.pi4.opt.32 +mv ./engine/bin/godot.x11.opt.debug.32 ./engine/bin/godot.x11.pi4.opt.debug.32 +mv ./engine/bin/godot.x11.opt.tools.32 ./engine/bin/godot.x11.pi4.opt.tools.32 diff --git a/build_uwp.bat b/build_uwp.bat new file mode 100644 index 0000000..fde9658 --- /dev/null +++ b/build_uwp.bat @@ -0,0 +1,14 @@ + +cd ./engine + +if not defined DevEnvDir ( + rem call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" x86 + call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x64 +) + +call scons -j6 platform=uwp target=release +rem call scons -j6 platform=uwp target=release_debug +rem call scons -j6 platform=uwp target=release + +cd .. + diff --git a/editor.bat b/editor.bat new file mode 100644 index 0000000..0170b95 --- /dev/null +++ b/editor.bat @@ -0,0 +1,6 @@ + +copy "engine\bin\godot.windows.opt.tools.64.exe" "engine\bin\run_godot.windows.opt.tools.64.exe" /y +copy "engine\bin\godot.windows.opt.tools.64.pdb" "engine\bin\run_godot.windows.opt.tools.64.pdb" /y +copy "engine\bin\godot.windows.opt.tools.64.exp" "engine\bin\run_godot.windows.opt.tools.64.exp" /y + +cmd /c engine\bin\run_godot.windows.opt.tools.64.exe \ No newline at end of file diff --git a/editor.sh b/editor.sh new file mode 100755 index 0000000..502fad6 --- /dev/null +++ b/editor.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +cp -u ./engine/bin/godot.x11.opt.tools.64 ./engine/bin/run.godot.x11.opt.tools.64 + +export LD_LIBRARY_PATH=`pwd`/engine/bin/ +./engine/bin/run.godot.x11.opt.tools.64 -v diff --git a/export_all.sh b/export_all.sh new file mode 100755 index 0000000..621c6c9 --- /dev/null +++ b/export_all.sh @@ -0,0 +1,52 @@ +#!/bin/bash +set -e + +version="" +version_snake_cased="" + +if [ ! -z $1 ]; then + version="." + version+=$1 + + version_snake_cased=${version//./_} +fi + +project_root=$(pwd) + +rm -Rf ./export + +mkdir export +mkdir export/broken_seals${version_snake_cased}_android_release +mkdir export/broken_seals${version_snake_cased}_android_debug +mkdir export/broken_seals${version_snake_cased}_linux +mkdir export/broken_seals${version_snake_cased}_windows +mkdir export/broken_seals${version_snake_cased}_javascript +mkdir export/broken_seals${version_snake_cased}_pi4 +mkdir export/broken_seals${version_snake_cased}_osx +mkdir export/export_templates_bs${version_snake_cased} + +./engine/bin/godot.x11.opt.tools.64 --path ./game/ --export-debug Android-Release ${project_root}/export/broken_seals${version_snake_cased}_android_release/broken_seals${version_snake_cased}.apk +./engine/bin/godot.x11.opt.tools.64 --path ./game/ --export-debug Android ${project_root}/export/broken_seals${version_snake_cased}_android_debug/broken_seals_debug${version_snake_cased}.apk +./engine/bin/godot.x11.opt.tools.64 --path ./game/ --export Linux/X11 ${project_root}/export/broken_seals${version_snake_cased}_linux/broken_seals${version_snake_cased}_x11 +./engine/bin/godot.x11.opt.tools.64 --path ./game/ --export "Windows Desktop" ${project_root}/export/broken_seals${version_snake_cased}_windows/broken_seals${version_snake_cased}.exe +./engine/bin/godot.x11.opt.tools.64 --path ./game/ --export HTML5 ${project_root}/export/broken_seals${version_snake_cased}_javascript/broken_seals.html +./engine/bin/godot.x11.opt.tools.64 --path ./game/ --export PI4/X11 ${project_root}/export/broken_seals${version_snake_cased}_pi4/broken_seals${version_snake_cased}_pi4 +./engine/bin/godot.x11.opt.tools.64 --path ./game/ --export "Mac OSX" ${project_root}/export/broken_seals${version_snake_cased}_osx/broken_seals${version_snake_cased}.app + +cp ./engine/bin/godot.windows.opt.tools.64.exe ${project_root}/export/godot.bs${version}.windows.opt.tools.64.exe +cp ./engine/bin/godot.x11.opt.tools.64 ${project_root}/export/godot.bs${version}.x11.opt.tools.64 +cp ./engine/bin/godot.x11.pi4.opt.tools.32 ${project_root}/export/godot.bs${version}.x11.pi4.opt.tools.32 +cp ./engine/bin/godot.javascript.opt.tools.threads.zip ${project_root}/export/godot.bs${version}.javascript.opt.tools.zip +cp ./engine/bin/Godot.app.zip ${project_root}/export/godot.bs${version}.osx.opt.tools.zip + +cp ./engine/bin/android_debug.apk ${project_root}/export/export_templates_bs${version_snake_cased}/android_debug.apk +cp ./engine/bin/android_release.apk ${project_root}/export/export_templates_bs${version_snake_cased}/android_release.apk +cp ./engine/bin/godot.javascript.opt.debug.zip ${project_root}/export/export_templates_bs${version_snake_cased}/godot.javascript.opt.debug.zip +cp ./engine/bin/godot.javascript.opt.zip ${project_root}/export/export_templates_bs${version_snake_cased}/godot.javascript.opt.zip +cp ./engine/bin/godot.windows.opt.64.exe ${project_root}/export/export_templates_bs${version_snake_cased}/godot.windows.opt.64.exe +cp ./engine/bin/godot.windows.opt.debug.64.exe ${project_root}/export/export_templates_bs${version_snake_cased}/godot.windows.opt.debug.64.exe +cp ./engine/bin/godot.x11.opt.64 ${project_root}/export/export_templates_bs${version_snake_cased}/godot.x11.opt.64 +cp ./engine/bin/godot.x11.opt.debug.64 ${project_root}/export/export_templates_bs${version_snake_cased}/godot.x11.opt.debug.64 +cp ./engine/bin/godot.x11.pi4.opt.32 ${project_root}/export/export_templates_bs${version_snake_cased}/godot.x11.pi4.opt.32 +cp ./engine/bin/godot.x11.pi4.opt.debug.32 ${project_root}/export/export_templates_bs${version_snake_cased}/godot.x11.pi4.opt.debug.32 +cp ./engine/bin/osx.zip ${project_root}/export/export_templates_bs${version_snake_cased}/osx.zip diff --git a/ged.sh b/ged.sh new file mode 100755 index 0000000..cb71cb6 --- /dev/null +++ b/ged.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +cp -u ./engine/bin/godot.x11.opt.tools.64 ./engine/bin/run.godot.x11.opt.tools.64 + +export LD_LIBRARY_PATH=`pwd`/engine/bin/ +./engine/bin/run.godot.x11.opt.tools.64 -e --path ./game/ diff --git a/make_release.sh b/make_release.sh new file mode 100755 index 0000000..fa679eb --- /dev/null +++ b/make_release.sh @@ -0,0 +1,53 @@ +#!/bin/bash +set -e + +version="" +version_snake_cased="" + +if [ ! -z $1 ]; then + version="." + version+=$1 + + version_snake_cased=${version//./_} +fi + +project_root=$(pwd) + +rm -Rf ./release + +mkdir release + +cd export + +rm -Rf broken_seals${version_snake_cased}_full_source +rm -Rf broken_seals${version_snake_cased}_game_source + +mkdir broken_seals${version_snake_cased}_full_source +mkdir broken_seals${version_snake_cased}_game_source + +# Warn if a file is over a megabyte. Used to catch big temporary files that would slip through outherwise +python ../tools/copy_repos.py ../ ./broken_seals${version_snake_cased}_full_source 1048576 +python ../tools/copy_repos.py ../game/ ./broken_seals${version_snake_cased}_game_source + +zip -q ../release/broken_seals${version_snake_cased}_android_debug.zip ./broken_seals${version_snake_cased}_android_debug/* +zip -q ../release/broken_seals${version_snake_cased}_android_release.zip ./broken_seals${version_snake_cased}_android_release/* +zip -q ../release/broken_seals${version_snake_cased}_javascript.zip ./broken_seals${version_snake_cased}_javascript/* +zip -q ../release/broken_seals${version_snake_cased}_linux.zip ./broken_seals${version_snake_cased}_linux/* +zip -q ../release/broken_seals${version_snake_cased}_windows.zip ./broken_seals${version_snake_cased}_windows/* +zip -q ../release/broken_seals${version_snake_cased}_pi4.zip ./broken_seals${version_snake_cased}_pi4/* +zip -r -q ../release/broken_seals${version_snake_cased}_osx.zip ./broken_seals${version_snake_cased}_osx/* + +# Editor +zip -q ../release/editor_windows_bs${version_snake_cased}.zip ./godot.bs${version}.windows.opt.tools.64.exe +zip -q ../release/editor_linux_bs${version_snake_cased}.zip ./godot.bs${version}.x11.opt.tools.64 +zip -q ../release/editor_pi4_bs${version_snake_cased}.zip ./godot.bs${version}.x11.pi4.opt.tools.32 +cp ./godot.bs${version}.javascript.opt.tools.zip ../release/editor_javascript_bs${version_snake_cased}.zip +zip -q ../release/editor_osx_bs${version_snake_cased}.zip ./godot.bs${version}.osx.opt.tools.zip + +zip -q ../release/export_templates_bs${version_snake_cased}.zip ./export_templates_bs${version_snake_cased}/* + +zip -q -r ../release/broken_seals${version_snake_cased}_full_source.zip ./broken_seals${version_snake_cased}_full_source/* +zip -q -r ../release/broken_seals${version_snake_cased}_game_source.zip ./broken_seals${version_snake_cased}_game_source/* + +cd .. + diff --git a/module_config.py b/module_config.py new file mode 100644 index 0000000..1fac99f --- /dev/null +++ b/module_config.py @@ -0,0 +1,27 @@ + +godot_branch = '3.x' + +engine_repository = [ ['https://github.com/Relintai/godot.git', 'git@github.com:Relintai/godot.git'], 'engine', '' ] + +module_repositories = [ + [ ['https://github.com/Relintai/entity_spell_system.git', 'git@github.com:Relintai/entity_spell_system.git'], 'entity_spell_system', '' ], + [ ['https://github.com/Relintai/ui_extensions.git', 'git@github.com:Relintai/ui_extensions.git'], 'ui_extensions', '' ], + [ ['https://github.com/Relintai/texture_packer.git', 'git@github.com:Relintai/texture_packer.git'], 'texture_packer', '' ], + [ ['https://github.com/Relintai/godot_fastnoise.git', 'git@github.com:Relintai/godot_fastnoise.git'], 'fastnoise', '' ], + [ ['https://github.com/Relintai/mesh_data_resource.git', 'git@github.com:Relintai/mesh_data_resource.git'], 'mesh_data_resource', '' ], + [ ['https://github.com/Relintai/props.git', 'git@github.com:Relintai/props.git'], 'props', '' ], + [ ['https://github.com/Relintai/mesh_utils.git', 'git@github.com:Relintai/mesh_utils.git'], 'mesh_utils', '' ], + [ ['https://github.com/Relintai/thread_pool.git', 'git@github.com:Relintai/thread_pool.git'], 'thread_pool', '' ], + [ ['https://github.com/Relintai/voxelman.git', 'git@github.com:Relintai/voxelman.git'], 'voxelman', '' ], +] + +removed_modules = [ +] + +addon_repositories = [ +] + +third_party_addon_repositories = [ +] + +slim_args = 'module_webm_enabled=no module_arkit_enabled=no module_visual_script_enabled=no module_gdnative_enabled=no module_mobile_vr_enabled=no module_theora_enabled=no module_xatlas_unwrap_enabled=no' diff --git a/play.sh b/play.sh new file mode 100755 index 0000000..6f916f0 --- /dev/null +++ b/play.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +cp -u ./engine/bin/godot.x11.opt.tools.64 ./engine/bin/run.godot.x11.opt.tools.64 + +export LD_LIBRARY_PATH=`pwd`/engine/bin/ +./engine/bin/run.godot.x11.opt.tools.64 -v --path ./game/ diff --git a/podman_build_all.sh b/podman_build_all.sh new file mode 100755 index 0000000..20ef29a --- /dev/null +++ b/podman_build_all.sh @@ -0,0 +1,126 @@ +#!/bin/bash +set -e + +podman=`which podman || true` + +if [ -z $podman ]; then + echo "podman needs to be in PATH for this script to work." + exit 1 +fi + +project_root=$(pwd)/ +img_version=bs + +mkdir -p logs + +#sudo podman run -i -t -v $(pwd)/files:/root/files godot-osx:bs /bin/bash +#sudo podman run -i -t -v $(pwd)/:/root/project -w /root/project godot-osx:bs /bin/bash +#sudo podman run -v $(pwd)/:/root/project -w /root/project godot-osx:bs scons bex_strip arch=x86_64 -j4 osxcross_sdk=darwin20.4 +#sudo podman run -i -t -v $(pwd)/:/root/project -w /root/project/tools/osx godot-osx:bs bash -c ./lipo.sh + +rm -f engine/modules/modules_enabled.gen.h +$podman run -v ${project_root}:/root/project -w /root/project godot-windows:${img_version} scons bew_strip -j4 . 2>&1 | tee logs/bew.log +rm -f engine/modules/modules_enabled.gen.h +#$podman run -v ${project_root}:/root/project -w /root/project godot-windows:${img_version} scons bewd_strip -j4 . 2>&1 | tee logs/bewd.log +rm -f engine/modules/modules_enabled.gen.h +$podman run -v ${project_root}:/root/project -w /root/project godot-windows:${img_version} scons bw_strip -j4 . 2>&1 | tee logs/bw.log +rm -f engine/modules/modules_enabled.gen.h +$podman run -v ${project_root}:/root/project -w /root/project godot-windows:${img_version} scons bwr_strip -j4 . 2>&1 | tee logs/bwr.log +rm -f engine/modules/modules_enabled.gen.h + + +$podman run -v ${project_root}:/root/project -w /root/project godot-linux:${img_version} scons bel_strip -j4 . 2>&1 | tee logs/bel.log +rm -f engine/modules/modules_enabled.gen.h +#$podman run -v ${project_root}:/root/project -w /root/project godot-linux:${img_version} scons beld_strip -j4 . 2>&1 | tee logs/beld.log +rm -f engine/modules/modules_enabled.gen.h +$podman run -v ${project_root}:/root/project -w /root/project godot-linux:${img_version} scons bl_strip -j4 . 2>&1 | tee logs/bl.log +rm -f engine/modules/modules_enabled.gen.h +$podman run -v ${project_root}:/root/project -w /root/project godot-linux:${img_version} scons blr_strip -j4 . 2>&1 | tee logs/blr.log +rm -f engine/modules/modules_enabled.gen.h + + +$podman run -v ${project_root}:/root/project -w /root/project godot-javascript:${img_version} bash -c 'source /root/emsdk_2.0.25/emsdk_env.sh;scons bj_strip -j4' . 2>&1 | tee logs/bj.log +rm -f engine/modules/modules_enabled.gen.h +$podman run -v ${project_root}:/root/project -w /root/project godot-javascript:${img_version} bash -c 'source /root/emsdk_2.0.25/emsdk_env.sh;scons bjr_strip -j4' . 2>&1 | tee logs/bjr.log +rm -f engine/modules/modules_enabled.gen.h +$podman run -v ${project_root}:/root/project -w /root/project godot-javascript:${img_version} bash -c 'source /root/emsdk_2.0.25/emsdk_env.sh;scons bej_strip_threads -j4' . 2>&1 | tee logs/bej.log +rm -f engine/modules/modules_enabled.gen.h + +$podman run -v ${project_root}:/root/project -w /root/project godot-android:${img_version} scons ba_strip -j4 . 2>&1 | tee logs/ba.log +rm -f engine/modules/modules_enabled.gen.h +$podman run -v ${project_root}:/root/project -w /root/project godot-android:${img_version} scons bar_strip -j4 . 2>&1 | tee logs/bar.log +rm -f engine/modules/modules_enabled.gen.h + +#osx +$podman run -v ${project_root}:/root/project -w /root/project godot-osx:${img_version} scons bex_strip arch=x86_64 -j4 osxcross_sdk=darwin20.4 . 2>&1 | tee logs/bex_x86_64.log +rm -f engine/modules/modules_enabled.gen.h +$podman run -v ${project_root}:/root/project -w /root/project godot-osx:${img_version} scons bex_strip arch=arm64 -j4 osxcross_sdk=darwin20.4 . 2>&1 | tee logs/bex_arm64.log +rm -f engine/modules/modules_enabled.gen.h + +$podman run -v ${project_root}:/root/project -w /root/project godot-osx:${img_version} scons bx_strip arch=x86_64 -j4 osxcross_sdk=darwin20.4 . 2>&1 | tee logs/bx_x86_64.log +rm -f engine/modules/modules_enabled.gen.h +$podman run -v ${project_root}:/root/project -w /root/project godot-osx:${img_version} scons bx_strip arch=arm64 -j4 osxcross_sdk=darwin20.4 . 2>&1 | tee logs/bx_arm64.log +rm -f engine/modules/modules_enabled.gen.h + +$podman run -v ${project_root}:/root/project -w /root/project godot-osx:${img_version} scons bxr_strip arch=x86_64 -j4 osxcross_sdk=darwin20.4 . 2>&1 | tee logs/bxr_x86_64.log +rm -f engine/modules/modules_enabled.gen.h +$podman run -v ${project_root}:/root/project -w /root/project godot-osx:${img_version} scons bxr_strip arch=arm64 -j4 osxcross_sdk=darwin20.4 . 2>&1 | tee logs/bxr_arm64.log +rm -f engine/modules/modules_enabled.gen.h + +#lipo +$podman run -v ${project_root}:/root/project -w /root/project/tools/osx godot-osx:${img_version} bash -c ./lipo.sh + +#ios +#$podman run -v ${project_root}:/root/project -w /root/project godot-ios:${img_version} scons bir_strip -j4 . 2>&1 | tee logs/bir.log +#rm -f engine/modules/modules_enabled.gen.h + +# $podman run -v ${project_root}:/root/project -i -w /root/project -t godot-windows:${img_version} scons bew -j4 +rm -f engine/modules/modules_enabled.gen.h + + +# Check files + +cd ./engine/bin/ + +files=( + # Windows + "godot.windows.opt.64.exe" + "godot.windows.opt.debug.64.exe" + "godot.windows.opt.tools.64.exe" + # Linux + "godot.x11.opt.64" + "godot.x11.opt.debug.64" + "godot.x11.opt.tools.64" + # JS + "godot.javascript.opt.tools.threads.zip" + "godot.javascript.opt.zip" + # Android + "android_debug.apk" + "android_release.apk" + # OSX + "godot.osx.opt.arm64" + "godot.osx.opt.debug.arm64" + "godot.osx.opt.debug.universal" + "godot.osx.opt.debug.x86_64" + "godot.osx.opt.tools.arm64" + "godot.osx.opt.tools.universal" + "godot.osx.opt.tools.x86_64" + "godot.osx.opt.universal" + "godot.osx.opt.x86_64" +) + +error=0 + +for f in ${files[*]} +do +if [ ! -e $f ]; then + error=1 + echo "$f is not present!" +fi +done + +if [ $error -eq 0 ]; then + echo "All files are present!" +fi + +cd ../.. \ No newline at end of file diff --git a/tools/build-containers/.gitignore b/tools/build-containers/.gitignore new file mode 100644 index 0000000..f9d8f5a --- /dev/null +++ b/tools/build-containers/.gitignore @@ -0,0 +1,12 @@ +*.tar +*.tar.gz +*.tar.bz2 +*.tar.xz +*.exe +*.swp +*.dmg +*.zip +*.xip + +files/mono-*/ +logs/ diff --git a/tools/build-containers/Dockerfile.android b/tools/build-containers/Dockerfile.android new file mode 100644 index 0000000..5da394c --- /dev/null +++ b/tools/build-containers/Dockerfile.android @@ -0,0 +1,18 @@ +ARG img_version +FROM godot-fedora:${img_version} + +ENV ANDROID_SDK_ROOT=/root/sdk +ENV ANDROID_NDK_VERSION=21.4.7075529 +ENV ANDROID_NDK_ROOT=${ANDROID_SDK_ROOT}/ndk/${ANDROID_NDK_VERSION} + +RUN dnf -y install --setopt=install_weak_deps=False \ + gcc gcc-c++ java-11-openjdk-devel ncurses-compat-libs && \ + mkdir -p sdk && cd sdk && \ + export CMDLINETOOLS=commandlinetools-linux-7302050_latest.zip && \ + curl -LO https://dl.google.com/android/repository/${CMDLINETOOLS} && \ + unzip ${CMDLINETOOLS} && \ + rm ${CMDLINETOOLS} && \ + yes | cmdline-tools/bin/sdkmanager --sdk_root="${ANDROID_SDK_ROOT}" --licenses && \ + cmdline-tools/bin/sdkmanager --sdk_root="${ANDROID_SDK_ROOT}" "ndk;${ANDROID_NDK_VERSION}" 'cmdline-tools;latest' 'build-tools;30.0.3' 'platforms;android-30' 'cmake;3.18.1' + +CMD /bin/bash diff --git a/tools/build-containers/Dockerfile.base b/tools/build-containers/Dockerfile.base new file mode 100644 index 0000000..6fb326e --- /dev/null +++ b/tools/build-containers/Dockerfile.base @@ -0,0 +1,10 @@ +FROM fedora:34 + +WORKDIR /root + +RUN dnf -y upgrade --setopt=install_weak_deps=False && \ + dnf -y install --setopt=install_weak_deps=False \ + bash bzip2 curl file findutils git make nano patch pkgconfig python3-pip unzip which xz yasm && \ + pip install scons==4.1.0 + +CMD /bin/bash diff --git a/tools/build-containers/Dockerfile.ios b/tools/build-containers/Dockerfile.ios new file mode 100644 index 0000000..a3635b1 --- /dev/null +++ b/tools/build-containers/Dockerfile.ios @@ -0,0 +1,39 @@ +ARG img_version +FROM godot-osx:${img_version} + +ENV IOS_SDK=14.5 + +RUN dnf -y install --setopt=install_weak_deps=False \ + automake autoconf clang gcc gcc-c++ gcc-objc gcc-objc++ cmake libicu-devel libtool libxml2-devel llvm-devel openssl-devel perl python yasm && \ + git clone --progress https://github.com/tpoechtrager/cctools-port.git && \ + cd /root/cctools-port && \ + git checkout 236a426c1205a3bfcf0dbb2e2faf2296f0a100e5 && \ + # arm64 device + usage_examples/ios_toolchain/build.sh /root/files/iPhoneOS${IOS_SDK}.sdk.tar.xz arm64 && \ + mkdir -p /root/ioscross/arm64 && \ + mv usage_examples/ios_toolchain/target/* /root/ioscross/arm64 && \ + mkdir /root/ioscross/arm64/usr && \ + ln -s /root/ioscross/arm64/bin /root/ioscross/arm64/usr/bin && \ + # arm64 simulator + # Disabled for now as it doesn't work with cctools-port and current LLVM: + # Cf. https://github.com/tpoechtrager/cctools-port/issues/102 + #sed -i 's/miphoneos-version-min/mios-simulator-version-min/g' usage_examples/ios_toolchain/wrapper.c && \ + #usage_examples/ios_toolchain/build.sh /root/files/iPhoneSimulator${IOS_SDK}.sdk.tar.xz arm64 && \ + #mkdir -p /root/ioscross/arm64_sim && \ + #mv usage_examples/ios_toolchain/target/* /root/ioscross/arm64_sim && \ + #mkdir /root/ioscross/arm64_sim/usr && \ + #ln -s /root/ioscross/arm64_sim/bin /root/ioscross/arm64_sim/usr/bin && \ + # x86_64 simulator + sed -i 's#^TRIPLE=.*#TRIPLE="x86_64-apple-darwin11"#' usage_examples/ios_toolchain/build.sh && \ + usage_examples/ios_toolchain/build.sh /root/files/iPhoneSimulator${IOS_SDK}.sdk.tar.xz x86_64 && \ + mkdir -p /root/ioscross/x86_64_sim && \ + mv usage_examples/ios_toolchain/target/* /root/ioscross/x86_64_sim && \ + mkdir /root/ioscross/x86_64_sim/usr && \ + ln -s /root/ioscross/x86_64_sim/bin /root/ioscross/x86_64_sim/usr/bin + + +ENV OSXCROSS_IOS=not_nothing +ENV IOSCROSS_ROOT=/root/ioscross +ENV PATH="/root/ioscross/arm64/bin:/root/ioscross/arm64_sim/bin:/root/ioscross/x86_64_sim/bin:${PATH}" + +CMD /bin/bash diff --git a/tools/build-containers/Dockerfile.javascript b/tools/build-containers/Dockerfile.javascript new file mode 100644 index 0000000..6ae1ff4 --- /dev/null +++ b/tools/build-containers/Dockerfile.javascript @@ -0,0 +1,13 @@ +ARG img_version +FROM godot-fedora:${img_version} + +ENV EMSCRIPTEN_CLASSICAL=2.0.25 + +RUN dnf -y install --setopt=install_weak_deps=False \ + java-openjdk && \ + git clone --branch ${EMSCRIPTEN_CLASSICAL} --progress https://github.com/emscripten-core/emsdk emsdk_${EMSCRIPTEN_CLASSICAL} && \ + emsdk_${EMSCRIPTEN_CLASSICAL}/emsdk install ${EMSCRIPTEN_CLASSICAL} && \ + emsdk_${EMSCRIPTEN_CLASSICAL}/emsdk activate ${EMSCRIPTEN_CLASSICAL} +# echo "source /root/emsdk_${EMSCRIPTEN_CLASSICAL}/emsdk_env.sh" >> /root/.bashrc + +CMD /bin/bash diff --git a/tools/build-containers/Dockerfile.linux b/tools/build-containers/Dockerfile.linux new file mode 100644 index 0000000..4988051 --- /dev/null +++ b/tools/build-containers/Dockerfile.linux @@ -0,0 +1,7 @@ +ARG img_version +FROM godot-fedora:${img_version} + +RUN dnf -y install --setopt=install_weak_deps=False \ + gcc-c++ libxcrypt-compat xorg-x11-server-Xvfb libX11-devel libXcursor-devel libXrandr-devel libXinerama-devel libXi-devel alsa-lib-devel pulseaudio-libs-devel libudev-devel mesa-libGL-devel mesa-libGLU-devel mesa-dri-drivers yasm libstdc++ libstdc++-static + +CMD /bin/bash diff --git a/tools/build-containers/Dockerfile.msvc b/tools/build-containers/Dockerfile.msvc new file mode 100644 index 0000000..5ca6f09 --- /dev/null +++ b/tools/build-containers/Dockerfile.msvc @@ -0,0 +1,29 @@ +ARG img_version +FROM godot-fedora:${img_version} + +ENV WINEDEBUG=-all + +RUN dnf -y install --setopt=install_weak_deps=False \ + wine winetricks xorg-x11-server-Xvfb p7zip-plugins findutils && \ + curl -LO https://github.com/GodotBuilder/godot-builds/releases/download/_tools/angle.7z && \ + curl -LO https://www.python.org/ftp/python/3.7.2/python-3.7.2-amd64.exe && \ + xvfb-run sh -c "winetricks -q vcrun2017; wineserver -w" ;\ + xvfb-run sh -c "winetricks -q dotnet461; wineserver -w" ;\ + xvfb-run sh -c "wine /root/python-3.7.2-amd64.exe /quiet InstallAllUsers=1 PrependPath=1 Include_test=0; wineserver -w" ;\ + rm /root/python-3.7.2-amd64.exe && \ + wine python -m pip install --upgrade pip ; wineserver -w ; \ + wine pip install -U setuptools ; wineserver -w ; \ + wine pip install -U wheel ; wineserver -w ; \ + wine pip install scons pywin32 ; wineserver -w ; \ + cd /root/.wine/drive_c && \ + 7z x /root/angle.7z && \ + rm /root/angle.7z && \ + cd "/root/.wine/drive_c/Program Files (x86)" && \ + tar xf /root/files/msvc2017.tar && \ + cd /root && \ + bash /root/files/msvc-fixup.sh && \ + find /root/.wine -name vctip.exe -delete && \ + rm -rf /root/.wine/drive_c/users/root/Temp/* && \ + rm -rf /root/.cache + +CMD /bin/bash diff --git a/tools/build-containers/Dockerfile.osx b/tools/build-containers/Dockerfile.osx new file mode 100644 index 0000000..b3e7cbb --- /dev/null +++ b/tools/build-containers/Dockerfile.osx @@ -0,0 +1,18 @@ +ARG img_version +FROM godot-fedora:${img_version} + +#cmake + +RUN dnf -y install --setopt=install_weak_deps=False \ + automake autoconf bzip2-devel clang libicu-devel libtool libxml2-devel llvm-devel openssl-devel yasm cmake && \ + git clone --progress https://github.com/tpoechtrager/osxcross.git && \ + cd /root/osxcross && \ + git checkout 0f87f567dfaf98460244471ad6c0f4311d62079c && \ + ln -s /root/files/MacOSX11.3.sdk.tar.xz /root/osxcross/tarballs && \ + UNATTENDED=1 ./build.sh && \ + ./build_compiler_rt.sh + +ENV OSXCROSS_ROOT=/root/osxcross +ENV PATH="/root/osxcross/target/bin:${PATH}" + +CMD /bin/bash diff --git a/tools/build-containers/Dockerfile.windows b/tools/build-containers/Dockerfile.windows new file mode 100644 index 0000000..6012ad2 --- /dev/null +++ b/tools/build-containers/Dockerfile.windows @@ -0,0 +1,7 @@ +ARG img_version +FROM godot-fedora:${img_version} + +RUN dnf -y install --setopt=install_weak_deps=False \ + mingw32-gcc mingw32-gcc-c++ mingw32-winpthreads-static mingw64-gcc mingw64-gcc-c++ mingw64-winpthreads-static + +CMD /bin/bash diff --git a/tools/build-containers/Dockerfile.xcode b/tools/build-containers/Dockerfile.xcode new file mode 100644 index 0000000..d9d774d --- /dev/null +++ b/tools/build-containers/Dockerfile.xcode @@ -0,0 +1,77 @@ +ARG img_version +FROM godot-fedora:${img_version} + +RUN dnf -y install --setopt=install_weak_deps=False \ + clang xar xar-devel xz-devel cpio && \ + git clone --progress https://github.com/NiklasRosenstein/pbzx && \ + cd pbzx && \ + git checkout 2a4d7c3300c826d918def713a24d25c237c8ed53 && \ + clang -O3 -llzma -lxar -I /usr/local/include pbzx.c -o pbzx + + + +CMD mkdir -p /root/xcode && \ + cd /root/xcode && \ + xar -xf /root/files/Xcode_12.4.xip && \ + /root/pbzx/pbzx -n Content | cpio -i && \ + export OSX_SDK=MacOSX11.1.sdk && \ + cp -r Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk /tmp/${OSX_SDK} && \ + mkdir -p mkdir -p /tmp/${OSX_SDK}/usr/share/man && \ + cp -rf Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/share/man/man1 \ + Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/share/man/man3 \ + Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/share/man/man5 /tmp/${OSX_SDK}/usr/share/man/ && \ + cd /tmp && \ + tar -cJf /root/files/${OSX_SDK}.tar.xz ${OSX_SDK} && \ + rm -rf ${OSX_SDK} && \ + cd /root/xcode && \ + export IOS_SDK=iPhoneOS14.4.sdk && \ + export IOS_SIMULATOR_SDK=iPhoneSimulator14.4.sdk && \ + cp -r Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk /tmp/${IOS_SDK} && \ + mkdir -p /tmp/${IOS_SDK}/usr/include/c++ && \ + cp -r Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1 /tmp/${IOS_SDK}/usr/include/c++/ && \ + cd /tmp && \ + tar -cJf /root/files/${IOS_SDK}.tar.xz ${IOS_SDK} && \ + rm -rf ${IOS_SDK} && \ + cd /root/xcode && \ + cp -r Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk /tmp/${IOS_SDK} && \ + mkdir -p /tmp/${IOS_SDK}/usr/include/c++ && \ + cp -r Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1 /tmp/${IOS_SDK}/usr/include/c++/ && \ + cd /tmp && \ + tar -cJf /root/files/${IOS_SIMULATOR_SDK}.tar.xz ${IOS_SDK} && \ + rm -rf ${IOS_SDK} + +#XCODE_SDK=12.5.1 +#OSX_SDK=11.3 +#IOS_SDK=14.5 + +CMD mkdir -p /root/xcode && \ + cd /root/xcode && \ + xar -xf /root/files/Xcode_12.5.1.xip && \ + /root/pbzx/pbzx -n Content | cpio -i && \ + export OSX_SDK=MacOSX11.3.sdk && \ + cp -r Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk /tmp/${OSX_SDK} && \ + mkdir -p /tmp/${OSX_SDK}/usr/include/c++ && \ + cp -r Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1 /tmp/${OSX_SDK}/usr/include/c++/ && \ + mkdir -p mkdir -p /tmp/${OSX_SDK}/usr/share/man && \ + cp -rf Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/share/man/man1 \ + Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/share/man/man3 \ + Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/share/man/man5 /tmp/${OSX_SDK}/usr/share/man/ && \ + cd /tmp && \ + tar -cJf /root/files/${OSX_SDK}.tar.xz ${OSX_SDK} && \ + rm -rf ${OSX_SDK} && \ + cd /root/xcode && \ + export IOS_SDK=iPhoneOS14.5.sdk && \ + export IOS_SIMULATOR_SDK=iPhoneSimulator14.5.sdk && \ + cp -r Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk /tmp/${IOS_SDK} && \ + mkdir -p /tmp/${IOS_SDK}/usr/include/c++ && \ + cp -r Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1 /tmp/${IOS_SDK}/usr/include/c++/ && \ + cd /tmp && \ + tar -cJf /root/files/${IOS_SDK}.tar.xz ${IOS_SDK} && \ + rm -rf ${IOS_SDK} && \ + cd /root/xcode && \ + cp -r Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk /tmp/${IOS_SDK} && \ + mkdir -p /tmp/${IOS_SDK}/usr/include/c++ && \ + cp -r Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1 /tmp/${IOS_SDK}/usr/include/c++/ && \ + cd /tmp && \ + tar -cJf /root/files/${IOS_SIMULATOR_SDK}.tar.xz ${IOS_SDK} && \ + rm -rf ${IOS_SDK} diff --git a/tools/build-containers/README.md b/tools/build-containers/README.md new file mode 100644 index 0000000..8b98f87 --- /dev/null +++ b/tools/build-containers/README.md @@ -0,0 +1,10 @@ +# Godot engine build containers + +Based on https://github.com/godotengine/build-containers + +This repository contains the Dockerfiles for the official Godot engine builds. These containers should help you build Godot for all platforms supported on any machine that can run Docker containers. + +## Building + +There is a 'build.sh' script included to build the containers themselves. The in-container build scripts will follow shortly. + diff --git a/tools/build-containers/build_containers.sh b/tools/build-containers/build_containers.sh new file mode 100755 index 0000000..063af5a --- /dev/null +++ b/tools/build-containers/build_containers.sh @@ -0,0 +1,55 @@ +#!/bin/bash +set -e + +podman=`which podman || true` + +if [ -z $podman ]; then + echo "podman needs to be in PATH for this script to work." + exit 1 +fi + +files_root=$(pwd)/files +img_version=bs + +mkdir -p logs + +export podman_build="$podman build --build-arg img_version=${img_version}" + +$podman build -v ${files_root}:/root/files -t godot-fedora:${img_version} -f Dockerfile.base . 2>&1 | tee logs/base.log +$podman_build -t godot-linux:${img_version} -f Dockerfile.linux . 2>&1 | tee logs/linux.log +$podman_build -t godot-windows:${img_version} -f Dockerfile.windows --ulimit nofile=65536 . 2>&1 | tee logs/windows.log +$podman_build -t godot-javascript:${img_version} -f Dockerfile.javascript . 2>&1 | tee logs/javascript.log +$podman_build -t godot-android:${img_version} -f Dockerfile.android . 2>&1 | tee logs/android.log + +XCODE_SDK=12.5.1 +OSX_SDK=11.3 +IOS_SDK=14.5 +if [ ! -e files/MacOSX${OSX_SDK}.sdk.tar.xz ] || [ ! -e files/iPhoneOS${IOS_SDK}.sdk.tar.xz ] || [ ! -e files/iPhoneSimulator${IOS_SDK}.sdk.tar.xz ]; then + if [ ! -e files/Xcode_${XCODE_SDK}.xip ]; then + echo "files/Xcode_${XCODE_SDK}.xip is required. It can be downloaded from https://developer.apple.com/download/more/ with a valid apple ID." + exit 1 + fi + + echo "Building OSX and iOS SDK packages. This will take a while" + $podman_build -t godot-xcode-packer:${img_version} -f Dockerfile.xcode -v ${files_root}:/root/files . 2>&1 | tee logs/xcode.log + $podman run -it --rm -v ${files_root}:/root/files godot-xcode-packer:${img_version} 2>&1 | tee logs/xcode_packer.log +fi + +$podman_build -t godot-osx:${img_version} -v ${files_root}:/root/files -f Dockerfile.osx . 2>&1 | tee logs/osx.log +$podman_build -t godot-ios:${img_version} -v ${files_root}:/root/files -f Dockerfile.ios . 2>&1 | tee logs/ios.log + +if [ "${build_msvc}" != "0" ]; then + if [ ! -e files/msvc2017.tar ]; then + echo + echo "files/msvc2017.tar is missing. This file can be created on a Windows 7 or 10 machine by downloading the 'Visual Studio Tools' installer." + echo "here: https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2017" + echo "The required components can be installed by running" + echo "vs_buildtools.exe --add Microsoft.VisualStudio.Workload.UniversalBuildTools --add Microsoft.VisualStudio.Workload.VCTools --add Microsoft.VisualStudio.Component.Windows10SDK.16299.Desktop --add Microsoft.VisualStudio.Component.Windows10SDK.16299.UWP.Native --passive" + echo "after that create a zipfile of C:/Program Files (x86)/Microsoft Visual Studio" + echo "tar -cf msvc2017.tar -C \"c:/Program Files (x86)/ Microsoft Visual Studio\"" + echo + exit 1 + fi + + $podman_build -t godot-msvc:${img_version} -f Dockerfile.msvc -v ${files_root}:/root/files . 2>&1 | tee logs/msvc.log +fi diff --git a/tools/build-containers/files/msvc-fixup.sh b/tools/build-containers/files/msvc-fixup.sh new file mode 100755 index 0000000..95dd799 --- /dev/null +++ b/tools/build-containers/files/msvc-fixup.sh @@ -0,0 +1,24 @@ +cp /root/.wine/drive_c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx64/x64/msobj140.dll /root/.wine/drive_c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx64/arm/ +cp /root/.wine/drive_c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx64/x64/msobj140.dll /root/.wine/drive_c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx64/x86/ + +cp /root/.wine/drive_c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx64/x64/mspdbcore.dll /root/.wine/drive_c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx64/arm/ +cp /root/.wine/drive_c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx64/x64/mspdbcore.dll /root/.wine/drive_c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx64/x86/ + +cp /root/.wine/drive_c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x86/mspdb140.dll /root/.wine/drive_c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x64/ +cp /root/.wine/drive_c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x86/mspdb140.dll /root/.wine/drive_c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx86/arm/ + +cp /root/.wine/drive_c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x86/msobj140.dll /root/.wine/drive_c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x64/ +cp /root/.wine/drive_c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x86/msobj140.dll /root/.wine/drive_c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx86/arm/ + +cp /root/.wine/drive_c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x86/mspdbcore.dll /root/.wine/drive_c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x64/ +cp /root/.wine/drive_c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x86/mspdbcore.dll /root/.wine/drive_c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx86/arm/ + +cp /root/.wine/drive_c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x86/mspdbsrv.exe /root/.wine/drive_c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x64/ +cp /root/.wine/drive_c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x86/mspdbsrv.exe /root/.wine/drive_c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx86/arm/ + +cp /root/.wine/drive_c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx64/x64/msvcdis140.dll /root/.wine/drive_c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx64/arm/ + +pushd /root/.wine/drive_c/Program\ Files\ \(x86\)/Microsoft\ SDKs/ +rm -rf ClickOnce\ Bootstrapper/ Portable/ Windows NuGetPackages/ UWPNuGetPackages/ +popd + diff --git a/tools/build-containers/files/patches/osxcross-pr284-compiler-rt.patch b/tools/build-containers/files/patches/osxcross-pr284-compiler-rt.patch new file mode 100644 index 0000000..f38c283 --- /dev/null +++ b/tools/build-containers/files/patches/osxcross-pr284-compiler-rt.patch @@ -0,0 +1,118 @@ +From b875d7c1360c8ff2077463d7a5a12e1cff1cc683 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= +Date: Mon, 12 Jul 2021 13:34:32 +0200 +Subject: [PATCH] compiler-rt: Add option to automate install process + +Also mention that compiler-rt can be needed to build code using +`__builtin_available()`. + +Fixes #278. +--- + README.COMPILER-RT.md | 4 ++++ + README.md | 3 +++ + build_compiler_rt.sh | 33 ++++++++++++++++++++++++--------- + 3 files changed, 31 insertions(+), 9 deletions(-) + +diff --git a/README.COMPILER-RT.md b/README.COMPILER-RT.md +index b2754dfcf..dced89686 100644 +--- a/README.COMPILER-RT.md ++++ b/README.COMPILER-RT.md +@@ -10,6 +10,10 @@ Ensure you have finished `build.sh`, + + then run: `./build_compiler_rt.sh`. + ++By default, installation steps for compiler-rt will be printed to the terminal ++to run manually, but you can automate the installation process by defining ++`ENABLE_COMPILER_RT_INSTALL`. ++ + You can verify compiler-rt is working by invoking the following command: + + echo "int main(void){return 0;}" | xcrun clang -xc -o/dev/null -v - 2>&1 | \ +diff --git a/README.md b/README.md +index 60d19f917..f32bf626c 100644 +--- a/README.md ++++ b/README.md +@@ -33,6 +33,9 @@ It also includes scripts for optionally building + * the "compiler-rt" runtime library, and + * the `llvm-dsymutil` tool required for debugging. + ++Note: The "compiler-rt" library can be needed to link code that uses the ++`__builtin_available()` runtime version check. ++ + + ### WHAT CAN BE BUILT WITH IT? ### + +diff --git a/build_compiler_rt.sh b/build_compiler_rt.sh +index 8f47262a2..508742cab 100755 +--- a/build_compiler_rt.sh ++++ b/build_compiler_rt.sh +@@ -182,22 +182,39 @@ fi + rm -f $BUILD_DIR/.compiler-rt_build_complete + + ++# Installation. Can be either automated (ENABLE_COMPILER_RT_INSTALL) or will ++# print the commands that the user should run manually. ++ ++function print_or_run() { ++ if [ -z "$ENABLE_COMPILER_RT_INSTALL" ]; then ++ echo "$@" ++ else ++ $@ ++ fi ++} ++ + echo "" + echo "" + echo "" +-echo "Please run the following commands by hand to install compiler-rt:" ++if [ -z "$ENABLE_COMPILER_RT_INSTALL" ]; then ++ echo "Please run the following commands by hand to install compiler-rt:" ++else ++ echo "Installing compiler-rt headers and libraries to the following paths:" ++ echo " ${CLANG_INCLUDE_DIR}" ++ echo " ${CLANG_DARWIN_LIB_DIR}" ++fi + echo "" + +-echo "mkdir -p ${CLANG_INCLUDE_DIR}" +-echo "mkdir -p ${CLANG_DARWIN_LIB_DIR}" +-echo "cp -rv $BUILD_DIR/compiler-rt/compiler-rt/include/sanitizer ${CLANG_INCLUDE_DIR}" ++print_or_run mkdir -p ${CLANG_INCLUDE_DIR} ++print_or_run mkdir -p ${CLANG_DARWIN_LIB_DIR} ++print_or_run cp -rv $BUILD_DIR/compiler-rt/compiler-rt/include/sanitizer ${CLANG_INCLUDE_DIR} + + if [ $USE_CMAKE -eq 1 ]; then + + ### CMAKE ### + +- echo "cp -v $BUILD_DIR/compiler-rt/compiler-rt/build/lib/darwin/*.a ${CLANG_DARWIN_LIB_DIR}" +- echo "cp -v $BUILD_DIR/compiler-rt/compiler-rt/build/lib/darwin/*.dylib ${CLANG_DARWIN_LIB_DIR}" ++ print_or_run cp -v $BUILD_DIR/compiler-rt/compiler-rt/build/lib/darwin/*.a ${CLANG_DARWIN_LIB_DIR} ++ print_or_run cp -v $BUILD_DIR/compiler-rt/compiler-rt/build/lib/darwin/*.dylib ${CLANG_DARWIN_LIB_DIR} + + ### CMAKE END ### + +@@ -209,7 +226,7 @@ else + + function print_install_command() { + if [ -f "$1" ]; then +- echo "cp $PWD/compiler-rt/$1 ${CLANG_DARWIN_LIB_DIR}/$2" ++ print_or_run cp $PWD/compiler-rt/$1 ${CLANG_DARWIN_LIB_DIR}/$2 + fi + } + +@@ -219,14 +236,12 @@ else + print_install_command "cc_kext/libcompiler_rt.a" "libclang_rt.cc_kext.a" + print_install_command "profile_osx/libcompiler_rt.a" "libclang_rt.profile_osx.a" + +- + print_install_command "ubsan_osx_dynamic/libcompiler_rt.dylib" \ + "libclang_rt.ubsan_osx_dynamic.dylib" + + print_install_command "asan_osx_dynamic/libcompiler_rt.dylib" \ + "libclang_rt.asan_osx_dynamic.dylib" + +- + popd &>/dev/null + + ### MAKE END ### diff --git a/tools/build-containers/upload.sh b/tools/build-containers/upload.sh new file mode 100644 index 0000000..919de5b --- /dev/null +++ b/tools/build-containers/upload.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +set -e + +podman=podman +if ! which $podman; then + podman=docker +fi + +registry=$1 + +if [ -z "${registry}" ]; then + registry=registry.prehensile-tales.com +fi + +$podman push godot-export:latest ${registry}/godot/export +$podman push godot-mono-glue:latest ${registry}/godot/mono-glue +$podman push godot-windows:latest ${registry}/godot/windows +$podman push godot-ubuntu-32:latest ${registry}/godot/ubuntu-32 +$podman push godot-ubuntu-64:latest ${registry}/godot/ubuntu-64 +$podman push godot-javascript:latest ${registry}/godot/javascript +$podman push godot-xcode-packer:latest ${registry}/godot/xcode-packer + +$podman push godot-android:latest ${registry}/godot-private/android +$podman push godot-ios:latest ${registry}/godot-private/ios +$podman push godot-osx:latest ${registry}/godot-private/macosx +$podman push godot-msvc:latest ${registry}/godot-private/uwp diff --git a/tools/copy_repos.py b/tools/copy_repos.py new file mode 100644 index 0000000..fc16a32 --- /dev/null +++ b/tools/copy_repos.py @@ -0,0 +1,111 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright (c) 2019-2021 Péter Magyar +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +import sys +import os +import subprocess +import json +import shutil +import traceback + +def onerror(func, path, exc_info): + """ + https://stackoverflow.com/questions/2656322/shutil-rmtree-fails-on-windows-with-access-is-denied + + Because Windows. + + Error handler for ``shutil.rmtree``. + + If the error is due to an access error (read only file) + it attempts to add write permission and then retries. + + If the error is for another reason it re-raises the error. + + Usage : ``shutil.rmtree(path, onerror=onerror)`` + """ + import stat + if not os.access(path, os.W_OK): + # Is the error an access error ? + os.chmod(path, stat.S_IWUSR) + func(path) + else: + raise + +def copytree(src, dst, warn = 0): + for item in os.listdir(src): + + sp = os.path.join(src, item) + dp = os.path.join(dst, item) + + if os.path.isdir(sp): + if item == ".git" or item == "bin" or item == "__pycache__" or item == ".import" or item == "logs" or item == "release" or item == "export" or item == "build" or item == "libs": + continue + + #print(item) + + if os.path.isdir(dp): + shutil.rmtree(dp, onerror=onerror) + + copytree(sp, dp, warn) + else: + if item.endswith(".a") or item.endswith(".class") or item.endswith(".dex") or item.endswith(".pyc") or item.endswith(".o") or item.endswith(".bc") or item.endswith(".so") or item == "export_presets.cfg" or item.endswith(".gen.h") or item.endswith(".os") or item.endswith(".dblite") or item == ".scons_node_count" or item == ".scons_env.json" or item == "compile_commands.json" or item == "config.log" or item.endswith(".gen.inc") or item.endswith(".gen.cpp") : + continue + + #print(item) + + if not os.path.isdir(dst): + os.makedirs(dst) + + file_size_bytes = os.path.getsize(sp) + + if warn > 0 and file_size_bytes >= warn: + # Ignore assets, this is meant to catch temp / generated files + if not (item.endswith(".po") or item.endswith(".tres") or item.endswith(".ttf") or item.endswith(".tza") or item.endswith(".blend") or item.endswith(".blend1") or item.endswith(".pot")): + print("WARNING! File '", sp, "' (", file_size_bytes, "bytes) is over the warn threshold!") + + shutil.copy2(sp, dp) + +def copy_repository(data, target_folder, clone_path): + copytree(os.path.abspath(clone_path + data[1] + '/' + data[2]), os.path.abspath(target_folder + data[1])) + + +#copy_repository(rep, './game/addons/', '.' + module_clone_path) + +#print(sys.argv) + +if len(sys.argv) == 3 or len(sys.argv) == 4: + src_dir = sys.argv[1] + dst_dir = sys.argv[2] + warn = 0 + + if len(sys.argv) == 4: + warn = int(sys.argv[3]) + + src_dir = os.path.abspath(src_dir) + dst_dir = os.path.abspath(dst_dir) + + copytree(src_dir, dst_dir, warn) + + +else: + print("Usange: python copy_repos.py source_dir target_dir") diff --git a/tools/export_presets.cfg.example b/tools/export_presets.cfg.example new file mode 100644 index 0000000..c483706 --- /dev/null +++ b/tools/export_presets.cfg.example @@ -0,0 +1,590 @@ +[preset.0] + +name="Android" +platform="Android" +runnable=true +custom_features="" +export_filter="all_resources" +include_filter="*.xml" +exclude_filter="" +export_path="" +script_export_mode=1 +script_encryption_key="" + +[preset.0.options] + +custom_template/debug="../engine/bin/android_debug.apk" +custom_template/release="../engine/bin/android_release.apk" +custom_template/use_custom_build=false +custom_template/export_format=0 +architectures/armeabi-v7a=true +architectures/arm64-v8a=true +architectures/x86=false +architectures/x86_64=false +keystore/debug="" +keystore/debug_user="" +keystore/debug_password="" +keystore/release="" +keystore/release_user="" +keystore/release_password="" +one_click_deploy/clear_previous_install=false +version/code=2 +version/name="0.3.2" +package/unique_name="net.relintai.$genname" +package/name="Broken Seals" +package/signed=true +launcher_icons/main_192x192="res://icon.png" +launcher_icons/adaptive_foreground_432x432="res://icon.png" +launcher_icons/adaptive_background_432x432="res://icon.png" +graphics/32_bits_framebuffer=true +graphics/opengl_debug=false +xr_features/xr_mode=0 +xr_features/degrees_of_freedom=0 +xr_features/hand_tracking=0 +xr_features/focus_awareness=false +screen/immersive_mode=true +screen/support_small=true +screen/support_normal=true +screen/support_large=true +screen/support_xlarge=true +command_line/extra_args="" +apk_expansion/enable=false +apk_expansion/SALT="" +apk_expansion/public_key="" +permissions/custom_permissions=PoolStringArray( ) +permissions/access_checkin_properties=false +permissions/access_coarse_location=false +permissions/access_fine_location=false +permissions/access_location_extra_commands=false +permissions/access_mock_location=false +permissions/access_network_state=false +permissions/access_surface_flinger=false +permissions/access_wifi_state=false +permissions/account_manager=false +permissions/add_voicemail=false +permissions/authenticate_accounts=false +permissions/battery_stats=false +permissions/bind_accessibility_service=false +permissions/bind_appwidget=false +permissions/bind_device_admin=false +permissions/bind_input_method=false +permissions/bind_nfc_service=false +permissions/bind_notification_listener_service=false +permissions/bind_print_service=false +permissions/bind_remoteviews=false +permissions/bind_text_service=false +permissions/bind_vpn_service=false +permissions/bind_wallpaper=false +permissions/bluetooth=false +permissions/bluetooth_admin=false +permissions/bluetooth_privileged=false +permissions/brick=false +permissions/broadcast_package_removed=false +permissions/broadcast_sms=false +permissions/broadcast_sticky=false +permissions/broadcast_wap_push=false +permissions/call_phone=false +permissions/call_privileged=false +permissions/camera=false +permissions/capture_audio_output=false +permissions/capture_secure_video_output=false +permissions/capture_video_output=false +permissions/change_component_enabled_state=false +permissions/change_configuration=false +permissions/change_network_state=false +permissions/change_wifi_multicast_state=false +permissions/change_wifi_state=false +permissions/clear_app_cache=false +permissions/clear_app_user_data=false +permissions/control_location_updates=false +permissions/delete_cache_files=false +permissions/delete_packages=false +permissions/device_power=false +permissions/diagnostic=false +permissions/disable_keyguard=false +permissions/dump=false +permissions/expand_status_bar=false +permissions/factory_test=false +permissions/flashlight=false +permissions/force_back=false +permissions/get_accounts=false +permissions/get_package_size=false +permissions/get_tasks=false +permissions/get_top_activity_info=false +permissions/global_search=false +permissions/hardware_test=false +permissions/inject_events=false +permissions/install_location_provider=false +permissions/install_packages=false +permissions/install_shortcut=false +permissions/internal_system_window=false +permissions/internet=false +permissions/kill_background_processes=false +permissions/location_hardware=false +permissions/manage_accounts=false +permissions/manage_app_tokens=false +permissions/manage_documents=false +permissions/master_clear=false +permissions/media_content_control=false +permissions/modify_audio_settings=false +permissions/modify_phone_state=false +permissions/mount_format_filesystems=false +permissions/mount_unmount_filesystems=false +permissions/nfc=false +permissions/persistent_activity=false +permissions/process_outgoing_calls=false +permissions/read_calendar=false +permissions/read_call_log=false +permissions/read_contacts=false +permissions/read_external_storage=false +permissions/read_frame_buffer=false +permissions/read_history_bookmarks=false +permissions/read_input_state=false +permissions/read_logs=false +permissions/read_phone_state=false +permissions/read_profile=false +permissions/read_sms=false +permissions/read_social_stream=false +permissions/read_sync_settings=false +permissions/read_sync_stats=false +permissions/read_user_dictionary=false +permissions/reboot=false +permissions/receive_boot_completed=false +permissions/receive_mms=false +permissions/receive_sms=false +permissions/receive_wap_push=false +permissions/record_audio=false +permissions/reorder_tasks=false +permissions/restart_packages=false +permissions/send_respond_via_message=false +permissions/send_sms=false +permissions/set_activity_watcher=false +permissions/set_alarm=false +permissions/set_always_finish=false +permissions/set_animation_scale=false +permissions/set_debug_app=false +permissions/set_orientation=false +permissions/set_pointer_speed=false +permissions/set_preferred_applications=false +permissions/set_process_limit=false +permissions/set_time=false +permissions/set_time_zone=false +permissions/set_wallpaper=false +permissions/set_wallpaper_hints=false +permissions/signal_persistent_processes=false +permissions/status_bar=false +permissions/subscribed_feeds_read=false +permissions/subscribed_feeds_write=false +permissions/system_alert_window=false +permissions/transmit_ir=false +permissions/uninstall_shortcut=false +permissions/update_device_stats=false +permissions/use_credentials=false +permissions/use_sip=false +permissions/vibrate=false +permissions/wake_lock=false +permissions/write_apn_settings=false +permissions/write_calendar=false +permissions/write_call_log=false +permissions/write_contacts=false +permissions/write_external_storage=false +permissions/write_gservices=false +permissions/write_history_bookmarks=false +permissions/write_profile=false +permissions/write_secure_settings=false +permissions/write_settings=false +permissions/write_sms=false +permissions/write_social_stream=false +permissions/write_sync_settings=false +permissions/write_user_dictionary=false + +[preset.1] + +name="Linux/X11" +platform="Linux/X11" +runnable=true +custom_features="" +export_filter="all_resources" +include_filter="*.xml" +exclude_filter="" +export_path="" +script_export_mode=1 +script_encryption_key="" + +[preset.1.options] + +custom_template/debug="../engine/bin/godot.x11.opt.debug.64" +custom_template/release="../engine/bin/godot.x11.opt.64" +binary_format/64_bits=true +binary_format/embed_pck=false +texture_format/bptc=false +texture_format/s3tc=true +texture_format/etc=false +texture_format/etc2=false +texture_format/no_bptc_fallbacks=true + +[preset.2] + +name="HTML5" +platform="HTML5" +runnable=true +custom_features="" +export_filter="all_resources" +include_filter="*.xml" +exclude_filter="" +export_path="" +script_export_mode=1 +script_encryption_key="" + +[preset.2.options] + +custom_template/debug="../engine/bin/godot.javascript.opt.zip" +custom_template/release="../engine/bin/godot.javascript.opt.debug.zip" +variant/export_type=0 +vram_texture_compression/for_desktop=true +vram_texture_compression/for_mobile=true +html/custom_html_shell="" +html/head_include="" +html/canvas_resize_policy=2 +html/experimental_virtual_keyboard=false + +[preset.3] + +name="Windows Desktop" +platform="Windows Desktop" +runnable=true +custom_features="" +export_filter="all_resources" +include_filter="*.xml" +exclude_filter="" +export_path="" +script_export_mode=1 +script_encryption_key="" + +[preset.3.options] + +custom_template/debug="../engine/bin/godot.windows.opt.debug.64.exe" +custom_template/release="../engine/bin/godot.windows.opt.64.exe" +binary_format/64_bits=true +binary_format/embed_pck=false +texture_format/bptc=false +texture_format/s3tc=true +texture_format/etc=false +texture_format/etc2=false +texture_format/no_bptc_fallbacks=true +codesign/enable=false +codesign/identity="" +codesign/password="" +codesign/timestamp=true +codesign/timestamp_server_url="" +codesign/digest_algorithm=1 +codesign/description="" +codesign/custom_options=PoolStringArray( ) +application/icon="" +application/file_version="" +application/product_version="" +application/company_name="" +application/product_name="" +application/file_description="" +application/copyright="" +application/trademarks="" + +[preset.4] + +name="Android-Release" +platform="Android" +runnable=false +custom_features="" +export_filter="all_resources" +include_filter="*.xml" +exclude_filter="" +export_path="" +script_export_mode=1 +script_encryption_key="" + +[preset.4.options] + +custom_template/debug="../engine/bin/android_release.apk" +custom_template/release="../engine/bin/android_release.apk" +custom_template/use_custom_build=false +custom_template/export_format=0 +architectures/armeabi-v7a=true +architectures/arm64-v8a=true +architectures/x86=false +architectures/x86_64=false +keystore/debug="" +keystore/debug_user="" +keystore/debug_password="" +keystore/release="" +keystore/release_user="" +keystore/release_password="" +one_click_deploy/clear_previous_install=false +version/code=2 +version/name="0.3.2" +package/unique_name="net.relintai.$genname" +package/name="Broken Seals" +package/signed=true +launcher_icons/main_192x192="res://icon.png" +launcher_icons/adaptive_foreground_432x432="res://icon.png" +launcher_icons/adaptive_background_432x432="res://icon.png" +graphics/32_bits_framebuffer=true +graphics/opengl_debug=false +xr_features/xr_mode=0 +xr_features/degrees_of_freedom=0 +xr_features/hand_tracking=0 +xr_features/focus_awareness=false +screen/immersive_mode=true +screen/support_small=true +screen/support_normal=true +screen/support_large=true +screen/support_xlarge=true +command_line/extra_args="" +apk_expansion/enable=false +apk_expansion/SALT="" +apk_expansion/public_key="" +permissions/custom_permissions=PoolStringArray( ) +permissions/access_checkin_properties=false +permissions/access_coarse_location=false +permissions/access_fine_location=false +permissions/access_location_extra_commands=false +permissions/access_mock_location=false +permissions/access_network_state=false +permissions/access_surface_flinger=false +permissions/access_wifi_state=false +permissions/account_manager=false +permissions/add_voicemail=false +permissions/authenticate_accounts=false +permissions/battery_stats=false +permissions/bind_accessibility_service=false +permissions/bind_appwidget=false +permissions/bind_device_admin=false +permissions/bind_input_method=false +permissions/bind_nfc_service=false +permissions/bind_notification_listener_service=false +permissions/bind_print_service=false +permissions/bind_remoteviews=false +permissions/bind_text_service=false +permissions/bind_vpn_service=false +permissions/bind_wallpaper=false +permissions/bluetooth=false +permissions/bluetooth_admin=false +permissions/bluetooth_privileged=false +permissions/brick=false +permissions/broadcast_package_removed=false +permissions/broadcast_sms=false +permissions/broadcast_sticky=false +permissions/broadcast_wap_push=false +permissions/call_phone=false +permissions/call_privileged=false +permissions/camera=false +permissions/capture_audio_output=false +permissions/capture_secure_video_output=false +permissions/capture_video_output=false +permissions/change_component_enabled_state=false +permissions/change_configuration=false +permissions/change_network_state=false +permissions/change_wifi_multicast_state=false +permissions/change_wifi_state=false +permissions/clear_app_cache=false +permissions/clear_app_user_data=false +permissions/control_location_updates=false +permissions/delete_cache_files=false +permissions/delete_packages=false +permissions/device_power=false +permissions/diagnostic=false +permissions/disable_keyguard=false +permissions/dump=false +permissions/expand_status_bar=false +permissions/factory_test=false +permissions/flashlight=false +permissions/force_back=false +permissions/get_accounts=false +permissions/get_package_size=false +permissions/get_tasks=false +permissions/get_top_activity_info=false +permissions/global_search=false +permissions/hardware_test=false +permissions/inject_events=false +permissions/install_location_provider=false +permissions/install_packages=false +permissions/install_shortcut=false +permissions/internal_system_window=false +permissions/internet=false +permissions/kill_background_processes=false +permissions/location_hardware=false +permissions/manage_accounts=false +permissions/manage_app_tokens=false +permissions/manage_documents=false +permissions/master_clear=false +permissions/media_content_control=false +permissions/modify_audio_settings=false +permissions/modify_phone_state=false +permissions/mount_format_filesystems=false +permissions/mount_unmount_filesystems=false +permissions/nfc=false +permissions/persistent_activity=false +permissions/process_outgoing_calls=false +permissions/read_calendar=false +permissions/read_call_log=false +permissions/read_contacts=false +permissions/read_external_storage=false +permissions/read_frame_buffer=false +permissions/read_history_bookmarks=false +permissions/read_input_state=false +permissions/read_logs=false +permissions/read_phone_state=false +permissions/read_profile=false +permissions/read_sms=false +permissions/read_social_stream=false +permissions/read_sync_settings=false +permissions/read_sync_stats=false +permissions/read_user_dictionary=false +permissions/reboot=false +permissions/receive_boot_completed=false +permissions/receive_mms=false +permissions/receive_sms=false +permissions/receive_wap_push=false +permissions/record_audio=false +permissions/reorder_tasks=false +permissions/restart_packages=false +permissions/send_respond_via_message=false +permissions/send_sms=false +permissions/set_activity_watcher=false +permissions/set_alarm=false +permissions/set_always_finish=false +permissions/set_animation_scale=false +permissions/set_debug_app=false +permissions/set_orientation=false +permissions/set_pointer_speed=false +permissions/set_preferred_applications=false +permissions/set_process_limit=false +permissions/set_time=false +permissions/set_time_zone=false +permissions/set_wallpaper=false +permissions/set_wallpaper_hints=false +permissions/signal_persistent_processes=false +permissions/status_bar=false +permissions/subscribed_feeds_read=false +permissions/subscribed_feeds_write=false +permissions/system_alert_window=false +permissions/transmit_ir=false +permissions/uninstall_shortcut=false +permissions/update_device_stats=false +permissions/use_credentials=false +permissions/use_sip=false +permissions/vibrate=false +permissions/wake_lock=false +permissions/write_apn_settings=false +permissions/write_calendar=false +permissions/write_call_log=false +permissions/write_contacts=false +permissions/write_external_storage=false +permissions/write_gservices=false +permissions/write_history_bookmarks=false +permissions/write_profile=false +permissions/write_secure_settings=false +permissions/write_settings=false +permissions/write_sms=false +permissions/write_social_stream=false +permissions/write_sync_settings=false +permissions/write_user_dictionary=false + +[preset.5] + +name="PI4/X11" +platform="Linux/X11" +runnable=false +custom_features="" +export_filter="all_resources" +include_filter="*.xml" +exclude_filter="" +export_path="" +script_export_mode=1 +script_encryption_key="" + +[preset.5.options] + +custom_template/debug="../engine/bin/godot.x11.pi4.opt.debug.32" +custom_template/release="../engine/bin/godot.x11.pi4.opt.32" +binary_format/64_bits=false +binary_format/embed_pck=false +texture_format/bptc=false +texture_format/s3tc=true +texture_format/etc=false +texture_format/etc2=false +texture_format/no_bptc_fallbacks=true + +[preset.6] + +name="Mac OSX" +platform="Mac OSX" +runnable=true +custom_features="" +export_filter="all_resources" +include_filter="*.xml" +exclude_filter="" +export_path="" +script_export_mode=1 +script_encryption_key="" + + +[preset.6.options] + +custom_template/debug="../engine/bin/osx.zip" +custom_template/release="../engine/bin/osx.zip" +application/name="Broken Seals" +application/info="Made with Godot Engine" +application/icon="" +application/identifier="net.relintai.brokenseals" +application/signature="" +application/app_category="Role-playing-games" +application/short_version="1.0" +application/version="1.0" +application/copyright="" +display/high_res=false +privacy/microphone_usage_description="" +privacy/camera_usage_description="" +privacy/location_usage_description="" +privacy/address_book_usage_description="" +privacy/calendar_usage_description="" +privacy/photos_library_usage_description="" +privacy/desktop_folder_usage_description="" +privacy/documents_folder_usage_description="" +privacy/downloads_folder_usage_description="" +privacy/network_volumes_usage_description="" +privacy/removable_volumes_usage_description="" +codesign/enable=true +codesign/identity="" +codesign/timestamp=true +codesign/hardened_runtime=true +codesign/replace_existing_signature=true +codesign/entitlements/custom_file="" +codesign/entitlements/allow_jit_code_execution=false +codesign/entitlements/allow_unsigned_executable_memory=false +codesign/entitlements/allow_dyld_environment_variables=false +codesign/entitlements/disable_library_validation=false +codesign/entitlements/audio_input=false +codesign/entitlements/camera=false +codesign/entitlements/location=false +codesign/entitlements/address_book=false +codesign/entitlements/calendars=false +codesign/entitlements/photos_library=false +codesign/entitlements/apple_events=false +codesign/entitlements/debugging=false +codesign/entitlements/app_sandbox/enabled=false +codesign/entitlements/app_sandbox/network_server=false +codesign/entitlements/app_sandbox/network_client=false +codesign/entitlements/app_sandbox/device_usb=false +codesign/entitlements/app_sandbox/device_bluetooth=false +codesign/entitlements/app_sandbox/files_downloads=0 +codesign/entitlements/app_sandbox/files_pictures=0 +codesign/entitlements/app_sandbox/files_music=0 +codesign/entitlements/app_sandbox/files_movies=0 +codesign/custom_options=PoolStringArray( ) +notarization/enable=false +notarization/apple_id_name="" +notarization/apple_id_password="" +notarization/apple_team_id="" +texture_format/s3tc=true +texture_format/etc=false +texture_format/etc2=false \ No newline at end of file diff --git a/tools/osx/create_editor_app.sh b/tools/osx/create_editor_app.sh new file mode 100755 index 0000000..a727578 --- /dev/null +++ b/tools/osx/create_editor_app.sh @@ -0,0 +1,12 @@ +cd ../../engine/bin/ + +rm -Rf Godot.app +rm -f Godot.app.zip + +cp -r ../misc/dist/osx_tools.app Godot.app +mkdir -p Godot.app/Contents/MacOS +cp godot.osx.opt.tools.universal Godot.app/Contents/MacOS/Godot +chmod +x Godot.app/Contents/MacOS/Godot + +zip -q -r Godot.app.zip Godot.app/* +cd ../../tools/osx/ diff --git a/tools/osx/create_export_templates.sh b/tools/osx/create_export_templates.sh new file mode 100755 index 0000000..07b7299 --- /dev/null +++ b/tools/osx/create_export_templates.sh @@ -0,0 +1,12 @@ +#templates + +cd ../../engine/bin + +cp -r ../misc/dist/osx_template.app . +mkdir -p osx_template.app/Contents/MacOS +cp godot.osx.opt.universal osx_template.app/Contents/MacOS/godot_osx_release.64 +cp godot.osx.opt.debug.universal osx_template.app/Contents/MacOS/godot_osx_debug.64 +chmod +x osx_template.app/Contents/MacOS/godot_osx* +zip -q -9 -r osx.zip osx_template.app + +cd ../../tools/osx diff --git a/tools/osx/lipo.sh b/tools/osx/lipo.sh new file mode 100755 index 0000000..b9d04c7 --- /dev/null +++ b/tools/osx/lipo.sh @@ -0,0 +1,6 @@ +# Tools +lipo -create ../../engine/bin/godot.osx.opt.tools.x86_64 ../../engine/bin/godot.osx.opt.tools.arm64 -output ../../engine/bin/godot.osx.opt.tools.universal + +# Export Templates +lipo -create ../../engine/bin/godot.osx.opt.x86_64 ../../engine/bin/godot.osx.opt.arm64 -output ../../engine/bin/godot.osx.opt.universal +lipo -create ../../engine/bin/godot.osx.opt.debug.x86_64 ../../engine/bin/godot.osx.opt.debug.arm64 -output ../../engine/bin/godot.osx.opt.debug.universal diff --git a/tools/release/pre_release_check_files_present.sh b/tools/release/pre_release_check_files_present.sh new file mode 100755 index 0000000..e5e6eea --- /dev/null +++ b/tools/release/pre_release_check_files_present.sh @@ -0,0 +1,48 @@ +cd ../../engine/bin/ + +files=( + # Windows + "godot.windows.opt.64.exe" + "godot.windows.opt.debug.64.exe" + "godot.windows.opt.tools.64.exe" + + # Linux + "godot.x11.opt.64" + "godot.x11.opt.debug.64" + "godot.x11.opt.tools.64" + + # JS + "godot.javascript.opt.tools.threads.zip" + "godot.javascript.opt.zip" + # Android + + "android_debug.apk" + "android_release.apk" + + # OSX - Editor + "Godot.app.zip" + + # OSX - export templates + "osx.zip" + + # Pi4 + "godot.x11.pi4.opt.32" + "godot.x11.pi4.opt.debug.32" + "godot.x11.pi4.opt.tools.32" +) + +error=0 + +for f in ${files[*]} +do +if [ ! -e $f ]; then + error=1 + echo "$f is not present!" +fi +done + +if [ $error -eq 0 ]; then + echo "All files are present!" +fi + +cd ../.. diff --git a/tools/vscode-setup/launch.json b/tools/vscode-setup/launch.json new file mode 100644 index 0000000..985eb3e --- /dev/null +++ b/tools/vscode-setup/launch.json @@ -0,0 +1,67 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "build and debug", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/bin/godot.x11.opt.tools.64", + "args": [ + "--path", + "${workspaceFolder}/../game/" + ], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "environment": [ + { + "name": "LD_LIBRARY_PATH", + "value": "${workspaceFolder}/bin/" + } + ], + "externalConsole": false, + "MIMode": "gdb", + "setupCommands": [ + { + "description": "Enable pretty-printing for gdb", + "text": "-enable-pretty-printing", + "ignoreFailures": true + } + ], + "preLaunchTask": "build", + //"miDebuggerPath": "/usr/bin/gdb" + }, + { + "name": "debug", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/bin/godot.x11.opt.tools.64", + //"args": ["-e"], + "args": [ + "--path", + "${workspaceFolder}/../game/", + ], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "environment": [ + { + "name": "LD_LIBRARY_PATH", + "value": "${workspaceFolder}/bin/" + } + ], + "externalConsole": false, + "MIMode": "gdb", + "setupCommands": [ + { + "description": "Enable pretty-printing for gdb", + "text": "-enable-pretty-printing", + "ignoreFailures": true + } + ], + //"preLaunchTask": "build", + //"miDebuggerPath": "/usr/bin/gdb" + } + ] +} \ No newline at end of file diff --git a/tools/vscode-setup/settings.json b/tools/vscode-setup/settings.json new file mode 100644 index 0000000..9ce7b68 --- /dev/null +++ b/tools/vscode-setup/settings.json @@ -0,0 +1,6 @@ +{ + "files.associations": { + "functional": "cpp", + }, + "editor.formatOnSave": true +} \ No newline at end of file diff --git a/tools/vscode-setup/tasks.json b/tools/vscode-setup/tasks.json new file mode 100644 index 0000000..e53957c --- /dev/null +++ b/tools/vscode-setup/tasks.json @@ -0,0 +1,26 @@ +{ + // See https://go.microsoft.com/fwlink/?LinkId=733558 + // for the documentation about the tasks.json format + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "type": "shell", + "command": "scons", + "group": "build", + "args": [ + "platform=x11", + "custom_modules_shared=yes", + "target=release_debug", + //"bin/libess.x11.opt.tools.64.so", + //"bin/libtexture_packer.x11.opt.tools.64.so", + "bin/libvoxelman.x11.opt.tools.64.so", + //"bin/libworld_generator.x11.opt.tools.64.so", + //"bin/libprocedural_animations.x11.opt.tools.64.so", + //"bin/libfqms.x11.opt.tools.64.so", + "-j3" + ], + "problemMatcher": "$msCompile" + } + ] +} \ No newline at end of file