c2a669a9f0
Many contributors (me included) did not fully understand what CCFLAGS, CXXFLAGS and CPPFLAGS refer to exactly, and were thus not using them in the way they are intended to be. As per the SCons manual: https://www.scons.org/doc/HTML/scons-user/apa.html - CCFLAGS: General options that are passed to the C and C++ compilers. - CFLAGS: General options that are passed to the C compiler (C only; not C++). - CXXFLAGS: General options that are passed to the C++ compiler. By default, this includes the value of $CCFLAGS, so that setting $CCFLAGS affects both C and C++ compilation. - CPPFLAGS: User-specified C preprocessor options. These will be included in any command that uses the C preprocessor, including not just compilation of C and C++ source files [...], but also [...] Fortran [...] and [...] assembly language source file[s]. TL;DR: Compiler options go to CCFLAGS, unless they must be restricted to either C (CFLAGS) or C++ (CXXFLAGS). Preprocessor defines go to CPPFLAGS.
172 lines
5.6 KiB
Python
172 lines
5.6 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 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.
|
|
env_thirdparty = env.Clone()
|
|
env_thirdparty.disable_warnings()
|
|
|
|
# Misc 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_misc_dir = "#thirdparty/misc/"
|
|
thirdparty_misc_sources = [
|
|
# C sources
|
|
"base64.c",
|
|
"fastlz.c",
|
|
"sha256.c",
|
|
"smaz.c",
|
|
|
|
# C++ sources
|
|
"aes256.cpp",
|
|
"hq2x.cpp",
|
|
"md5.cpp",
|
|
"pcg.cpp",
|
|
"triangulator.cpp",
|
|
]
|
|
thirdparty_misc_sources = [thirdparty_misc_dir + file for file in thirdparty_misc_sources]
|
|
env_thirdparty.add_source_files(env.core_sources, thirdparty_misc_sources)
|
|
|
|
# Zlib library, can be unbundled
|
|
if env['builtin_zlib']:
|
|
thirdparty_zlib_dir = "#thirdparty/zlib/"
|
|
thirdparty_zlib_sources = [
|
|
"adler32.c",
|
|
"compress.c",
|
|
"crc32.c",
|
|
"deflate.c",
|
|
"infback.c",
|
|
"inffast.c",
|
|
"inflate.c",
|
|
"inftrees.c",
|
|
"trees.c",
|
|
"uncompr.c",
|
|
"zutil.c",
|
|
]
|
|
thirdparty_zlib_sources = [thirdparty_zlib_dir + file for file in thirdparty_zlib_sources]
|
|
|
|
env_thirdparty.Append(CPPPATH=[thirdparty_zlib_dir])
|
|
# Needs to be available in main env too
|
|
env.Append(CPPPATH=[thirdparty_zlib_dir])
|
|
|
|
env_thirdparty.add_source_files(env.core_sources, thirdparty_zlib_sources)
|
|
|
|
# Minizip library, could 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_thirdparty.add_source_files(env.core_sources, thirdparty_minizip_sources)
|
|
|
|
# Zstd library, can be unbundled in theory
|
|
# though we currently use some private symbols
|
|
# https://github.com/godotengine/godot/issues/17374
|
|
if env['builtin_zstd']:
|
|
thirdparty_zstd_dir = "#thirdparty/zstd/"
|
|
thirdparty_zstd_sources = [
|
|
"common/debug.c",
|
|
"common/entropy_common.c",
|
|
"common/error_private.c",
|
|
"common/fse_decompress.c",
|
|
"common/pool.c",
|
|
"common/threading.c",
|
|
"common/xxhash.c",
|
|
"common/zstd_common.c",
|
|
"compress/fse_compress.c",
|
|
"compress/hist.c",
|
|
"compress/huf_compress.c",
|
|
"compress/zstd_compress.c",
|
|
"compress/zstd_double_fast.c",
|
|
"compress/zstd_fast.c",
|
|
"compress/zstd_lazy.c",
|
|
"compress/zstd_ldm.c",
|
|
"compress/zstd_opt.c",
|
|
"compress/zstdmt_compress.c",
|
|
"decompress/huf_decompress.c",
|
|
"decompress/zstd_ddict.c",
|
|
"decompress/zstd_decompress_block.c",
|
|
"decompress/zstd_decompress.c",
|
|
]
|
|
thirdparty_zstd_sources = [thirdparty_zstd_dir + file for file in thirdparty_zstd_sources]
|
|
|
|
env_thirdparty.Append(CPPPATH=[thirdparty_zstd_dir, thirdparty_zstd_dir + "common"])
|
|
env_thirdparty.Append(CPPFLAGS="-DZSTD_STATIC_LINKING_ONLY")
|
|
env.Append(CPPPATH=thirdparty_zstd_dir)
|
|
# Also needed in main env includes will trigger warnings
|
|
env.Append(CPPFLAGS="-DZSTD_STATIC_LINKING_ONLY")
|
|
|
|
env_thirdparty.add_source_files(env.core_sources, thirdparty_zstd_sources)
|
|
|
|
|
|
# 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')
|
|
|
|
|
|
# Build it all as a library
|
|
lib = env.add_library("core", env.core_sources)
|
|
env.Prepend(LIBS=[lib])
|