0e56377e96
Note, it will only used by the Editor, not when running the game. This allows package maintainer to compile Godot to use system installed certificates when accessing the AssetLib.
127 lines
4.0 KiB
Python
127 lines
4.0 KiB
Python
#!/usr/bin/env python
|
|
|
|
Import('env')
|
|
|
|
import core_builders
|
|
import make_binders
|
|
from platform_methods import run_in_subprocess
|
|
|
|
env.core_sources = []
|
|
|
|
|
|
# Generate global defaults
|
|
gd_call = ""
|
|
gd_inc = ""
|
|
|
|
for x in env.global_defaults:
|
|
env.core_sources.append("#platform/" + x + "/globals/global_defaults.cpp")
|
|
gd_inc += '#include "platform/' + x + '/globals/global_defaults.h"\n'
|
|
gd_call += "\tregister_" + x + "_global_defaults();\n"
|
|
|
|
gd_cpp = '#include "core/project_settings.h"\n'
|
|
gd_cpp += gd_inc
|
|
gd_cpp += "void ProjectSettings::register_global_defaults() {\n" + gd_call + "\n}\n"
|
|
|
|
with open("global_defaults.gen.cpp", "w") as f:
|
|
f.write(gd_cpp)
|
|
|
|
|
|
# Generate AES256 script encryption key
|
|
import os
|
|
txt = "0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0"
|
|
if ("SCRIPT_AES256_ENCRYPTION_KEY" in os.environ):
|
|
e = os.environ["SCRIPT_AES256_ENCRYPTION_KEY"]
|
|
txt = ""
|
|
ec_valid = True
|
|
if (len(e) != 64):
|
|
ec_valid = False
|
|
else:
|
|
|
|
for i in range(len(e) >> 1):
|
|
if (i > 0):
|
|
txt += ","
|
|
txts = "0x" + e[i * 2:i * 2 + 2]
|
|
try:
|
|
int(txts, 16)
|
|
except:
|
|
ec_valid = False
|
|
txt += txts
|
|
if (not ec_valid):
|
|
txt = "0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0"
|
|
print("Invalid AES256 encryption key, not 64 bits hex: " + e)
|
|
|
|
# NOTE: It is safe to generate this file here, since this is still executed serially
|
|
with open("script_encryption_key.gen.cpp", "w") as f:
|
|
f.write("#include \"core/project_settings.h\"\nuint8_t script_encryption_key[32]={" + txt + "};\n")
|
|
|
|
|
|
# Add required thirdparty code. Header paths are hardcoded, we don't need to append
|
|
# to the include path (saves a few chars on the compiler invocation for touchy MSVC...)
|
|
thirdparty_dir = "#thirdparty/misc/"
|
|
thirdparty_sources = [
|
|
# C sources
|
|
"base64.c",
|
|
"fastlz.c",
|
|
"sha256.c",
|
|
"smaz.c",
|
|
|
|
# C++ sources
|
|
"aes256.cpp",
|
|
"hq2x.cpp",
|
|
"md5.cpp",
|
|
"pcg.cpp",
|
|
"triangulator.cpp",
|
|
]
|
|
thirdparty_sources = [thirdparty_dir + file for file in thirdparty_sources]
|
|
env.add_source_files(env.core_sources, thirdparty_sources)
|
|
|
|
# Minizip library, can be unbundled in theory
|
|
# However, our version has some custom modifications, so it won't compile with the system one
|
|
thirdparty_minizip_dir = "#thirdparty/minizip/"
|
|
thirdparty_minizip_sources = [
|
|
"ioapi.c",
|
|
"unzip.c",
|
|
"zip.c",
|
|
]
|
|
thirdparty_minizip_sources = [thirdparty_minizip_dir + file for file in thirdparty_minizip_sources]
|
|
env.add_source_files(env.core_sources, thirdparty_minizip_sources)
|
|
|
|
if 'builtin_zstd' in env and env['builtin_zstd']:
|
|
SConscript("#thirdparty/zstd/SCsub")
|
|
|
|
|
|
# Godot's own sources
|
|
env.add_source_files(env.core_sources, "*.cpp")
|
|
|
|
# Certificates
|
|
env.Depends("#core/io/certs_compressed.gen.h", ["#thirdparty/certs/ca-certificates.crt", env.Value(env['builtin_certs']), env.Value(env['system_certs_path'])])
|
|
env.CommandNoCache("#core/io/certs_compressed.gen.h", "#thirdparty/certs/ca-certificates.crt", run_in_subprocess(core_builders.make_certs_header))
|
|
|
|
# Make binders
|
|
env.CommandNoCache(['method_bind.gen.inc', 'method_bind_ext.gen.inc'], 'make_binders.py', run_in_subprocess(make_binders.run))
|
|
|
|
# Authors
|
|
env.Depends('#core/authors.gen.h', "../AUTHORS.md")
|
|
env.CommandNoCache('#core/authors.gen.h', "../AUTHORS.md", run_in_subprocess(core_builders.make_authors_header))
|
|
|
|
# Donors
|
|
env.Depends('#core/donors.gen.h', "../DONORS.md")
|
|
env.CommandNoCache('#core/donors.gen.h', "../DONORS.md", run_in_subprocess(core_builders.make_donors_header))
|
|
|
|
# License
|
|
env.Depends('#core/license.gen.h', ["../COPYRIGHT.txt", "../LICENSE.txt"])
|
|
env.CommandNoCache('#core/license.gen.h', ["../COPYRIGHT.txt", "../LICENSE.txt"], run_in_subprocess(core_builders.make_license_header))
|
|
|
|
# Chain load SCsubs
|
|
SConscript('os/SCsub')
|
|
SConscript('math/SCsub')
|
|
SConscript('io/SCsub')
|
|
SConscript('bind/SCsub')
|
|
SConscript('helper/SCsub')
|
|
|
|
|
|
# Build it all as a library
|
|
lib = env.add_library("core", env.core_sources)
|
|
env.Prepend(LIBS=[lib])
|
|
Export('env')
|