From c4cb4e366b81bc6a8607e8fc9af15e65f38725f6 Mon Sep 17 00:00:00 2001 From: Relintai Date: Sun, 17 Dec 2023 14:13:26 +0100 Subject: [PATCH] Now freetype, libpng and zlib is always built in. --- SConstruct | 3 - core/SCsub | 43 ++++---- modules/freetype/SCsub | 202 +++++++++++++++++++------------------- modules/png/SCsub | 87 ++++++++-------- platform/server/detect.py | 23 ----- platform/x11/detect.py | 21 ---- 6 files changed, 164 insertions(+), 215 deletions(-) diff --git a/SConstruct b/SConstruct index e0854fd..b25e87f 100644 --- a/SConstruct +++ b/SConstruct @@ -171,12 +171,9 @@ opts.Add(BoolVariable("editor_docs", "Whether to add docs to an editor build or # Thirdparty libraries opts.Add(BoolVariable("builtin_certs", "Use the built-in SSL certificates bundles", True)) opts.Add(BoolVariable("builtin_enet", "Use the built-in ENet library", True)) -opts.Add(BoolVariable("builtin_freetype", "Use the built-in FreeType library", True)) -opts.Add(BoolVariable("builtin_libpng", "Use the built-in libpng library", True)) opts.Add(BoolVariable("builtin_mbedtls", "Use the built-in mbedTLS library", True)) opts.Add(BoolVariable("builtin_pcre2", "Use the built-in PCRE2 library", True)) opts.Add(BoolVariable("builtin_pcre2_with_jit", "Use JIT compiler for the built-in PCRE2 library", True)) -opts.Add(BoolVariable("builtin_zlib", "Use the built-in zlib library", True)) # Compilation environment setup opts.Add("CXX", "C++ compiler") diff --git a/core/SCsub b/core/SCsub index bab737a..e909f0b 100644 --- a/core/SCsub +++ b/core/SCsub @@ -64,30 +64,29 @@ thirdparty_misc_sources = [thirdparty_misc_dir + file for file in thirdparty_mis env_thirdparty.add_source_files(thirdparty_obj, 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] +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.Prepend(CPPPATH=[thirdparty_zlib_dir]) - # Needs to be available in main env too - env.Prepend(CPPPATH=[thirdparty_zlib_dir]) - if env["target"] == "debug": - env_thirdparty.Append(CPPDEFINES=["ZLIB_DEBUG"]) +env_thirdparty.Prepend(CPPPATH=[thirdparty_zlib_dir]) +# Needs to be available in main env too +env.Prepend(CPPPATH=[thirdparty_zlib_dir]) +if env["target"] == "debug": + env_thirdparty.Append(CPPDEFINES=["ZLIB_DEBUG"]) - env_thirdparty.add_source_files(thirdparty_obj, thirdparty_zlib_sources) +env_thirdparty.add_source_files(thirdparty_obj, thirdparty_zlib_sources) env.core_sources += thirdparty_obj diff --git a/modules/freetype/SCsub b/modules/freetype/SCsub index ccdaaf2..c400eb1 100644 --- a/modules/freetype/SCsub +++ b/modules/freetype/SCsub @@ -11,118 +11,116 @@ env_freetype = env_modules.Clone() thirdparty_obj = [] -if env["builtin_freetype"]: - thirdparty_dir = "freetype/" - thirdparty_sources = [ - "src/autofit/autofit.c", - "src/base/ftbase.c", - "src/base/ftbbox.c", - "src/base/ftbdf.c", - "src/base/ftbitmap.c", - "src/base/ftcid.c", - "src/base/ftdebug.c", - "src/base/ftfstype.c", - "src/base/ftgasp.c", - "src/base/ftglyph.c", - "src/base/ftgxval.c", - "src/base/ftinit.c", - "src/base/ftmm.c", - "src/base/ftotval.c", - "src/base/ftpatent.c", - "src/base/ftpfr.c", - "src/base/ftstroke.c", - "src/base/ftsynth.c", - "src/base/ftsystem.c", - "src/base/fttype1.c", - "src/base/ftwinfnt.c", - "src/bdf/bdf.c", - "src/bzip2/ftbzip2.c", - "src/cache/ftcache.c", - "src/cff/cff.c", - "src/cid/type1cid.c", - "src/gxvalid/gxvalid.c", - "src/gzip/ftgzip.c", - "src/lzw/ftlzw.c", - "src/otvalid/otvalid.c", - "src/pcf/pcf.c", - "src/pfr/pfr.c", - "src/psaux/psaux.c", - "src/pshinter/pshinter.c", - "src/psnames/psnames.c", - "src/raster/raster.c", - "src/sdf/sdf.c", - "src/svg/svg.c", - "src/smooth/smooth.c", - "src/truetype/truetype.c", - "src/type1/type1.c", - "src/type42/type42.c", - "src/winfonts/winfnt.c", +thirdparty_dir = "freetype/" +thirdparty_sources = [ + "src/autofit/autofit.c", + "src/base/ftbase.c", + "src/base/ftbbox.c", + "src/base/ftbdf.c", + "src/base/ftbitmap.c", + "src/base/ftcid.c", + "src/base/ftdebug.c", + "src/base/ftfstype.c", + "src/base/ftgasp.c", + "src/base/ftglyph.c", + "src/base/ftgxval.c", + "src/base/ftinit.c", + "src/base/ftmm.c", + "src/base/ftotval.c", + "src/base/ftpatent.c", + "src/base/ftpfr.c", + "src/base/ftstroke.c", + "src/base/ftsynth.c", + "src/base/ftsystem.c", + "src/base/fttype1.c", + "src/base/ftwinfnt.c", + "src/bdf/bdf.c", + "src/bzip2/ftbzip2.c", + "src/cache/ftcache.c", + "src/cff/cff.c", + "src/cid/type1cid.c", + "src/gxvalid/gxvalid.c", + "src/gzip/ftgzip.c", + "src/lzw/ftlzw.c", + "src/otvalid/otvalid.c", + "src/pcf/pcf.c", + "src/pfr/pfr.c", + "src/psaux/psaux.c", + "src/pshinter/pshinter.c", + "src/psnames/psnames.c", + "src/raster/raster.c", + "src/sdf/sdf.c", + "src/svg/svg.c", + "src/smooth/smooth.c", + "src/truetype/truetype.c", + "src/type1/type1.c", + "src/type42/type42.c", + "src/winfonts/winfnt.c", ] - thirdparty_sources = [thirdparty_dir + file for file in thirdparty_sources] +thirdparty_sources = [thirdparty_dir + file for file in thirdparty_sources] - thirdparty_brotli_dir = "brotli/" - thirdparty_brotli_sources = [ - "common/constants.c", - "common/context.c", - "common/dictionary.c", - "common/platform.c", - "common/shared_dictionary.c", - "common/transform.c", - "dec/bit_reader.c", - "dec/decode.c", - "dec/huffman.c", - "dec/state.c", +thirdparty_brotli_dir = "brotli/" +thirdparty_brotli_sources = [ + "common/constants.c", + "common/context.c", + "common/dictionary.c", + "common/platform.c", + "common/shared_dictionary.c", + "common/transform.c", + "dec/bit_reader.c", + "dec/decode.c", + "dec/huffman.c", + "dec/state.c", ] - thirdparty_sources += [thirdparty_brotli_dir + file for file in thirdparty_brotli_sources] - env_freetype.Append(CPPDEFINES=["FT_CONFIG_OPTION_USE_BROTLI"]) - env_freetype.Prepend(CPPPATH=[thirdparty_brotli_dir + "include"]) +thirdparty_sources += [thirdparty_brotli_dir + file for file in thirdparty_brotli_sources] +env_freetype.Append(CPPDEFINES=["FT_CONFIG_OPTION_USE_BROTLI"]) +env_freetype.Prepend(CPPPATH=[thirdparty_brotli_dir + "include"]) - if env["platform"] == "uwp": - # Include header for UWP to fix build issues - env_freetype.Append(CCFLAGS=["/FI", '"modules/freetype/uwpdef.h"']) - # Globally too, as freetype is used in scene (see bottom) - env.Append(CCFLAGS=["/FI", '"modules/freetype/uwpdef.h"']) +if env["platform"] == "uwp": + # Include header for UWP to fix build issues + env_freetype.Append(CCFLAGS=["/FI", '"modules/freetype/uwpdef.h"']) + # Globally too, as freetype is used in scene (see bottom) + env.Append(CCFLAGS=["/FI", '"modules/freetype/uwpdef.h"']) - env_freetype.Prepend(CPPPATH=[thirdparty_dir + "/include"]) - # Also needed in main env for scene/ - env.Prepend(CPPPATH=[thirdparty_dir + "/include"]) +env_freetype.Prepend(CPPPATH=[thirdparty_dir + "/include"]) +# Also needed in main env for scene/ +env.Prepend(CPPPATH=[thirdparty_dir + "/include"]) - env_freetype.Append(CPPDEFINES=["FT2_BUILD_LIBRARY", "FT_CONFIG_OPTION_USE_PNG", "FT_CONFIG_OPTION_SYSTEM_ZLIB"]) - if env["target"] == "debug": - env_freetype.Append(CPPDEFINES=["ZLIB_DEBUG"]) +env_freetype.Append(CPPDEFINES=["FT2_BUILD_LIBRARY", "FT_CONFIG_OPTION_USE_PNG", "FT_CONFIG_OPTION_SYSTEM_ZLIB"]) +if env["target"] == "debug": + env_freetype.Append(CPPDEFINES=["ZLIB_DEBUG"]) - # Also requires libpng headers - if env["builtin_libpng"]: - env_freetype.Prepend(CPPPATH=["#modules/png/libpng"]) +# Also requires libpng headers +env_freetype.Prepend(CPPPATH=["#modules/png/libpng"]) - sfnt = thirdparty_dir + "src/sfnt/sfnt.c" - # Must be done after all CPPDEFINES are being set so we can copy them. - if env["platform"] == "javascript": - # Forcibly undefine this macro so SIMD is not used in this file, - # since currently unsupported in WASM - tmp_env = env_freetype.Clone() - tmp_env.disable_warnings() - tmp_env.Append(CPPFLAGS=["-U__OPTIMIZE__"]) - sfnt = tmp_env.Object(sfnt) - thirdparty_sources += [sfnt] +sfnt = thirdparty_dir + "src/sfnt/sfnt.c" +# Must be done after all CPPDEFINES are being set so we can copy them. +if env["platform"] == "javascript": + # Forcibly undefine this macro so SIMD is not used in this file, + # since currently unsupported in WASM + tmp_env = env_freetype.Clone() + tmp_env.disable_warnings() + tmp_env.Append(CPPFLAGS=["-U__OPTIMIZE__"]) + sfnt = tmp_env.Object(sfnt) +thirdparty_sources += [sfnt] - env_thirdparty = env_freetype.Clone() - env_thirdparty.disable_warnings() - lib = env_thirdparty.add_library("freetype_builtin", thirdparty_sources) - thirdparty_obj += lib +env_thirdparty = env_freetype.Clone() +env_thirdparty.disable_warnings() +lib = env_thirdparty.add_library("freetype_builtin", thirdparty_sources) +thirdparty_obj += lib - # Needs to be appended to arrive after libscene in the linker call, - # but we don't want it to arrive *after* system libs, so manual hack - # LIBS contains first SCons Library objects ("SCons.Node.FS.File object") - # and then plain strings for system library. We insert between the two. - inserted = False - for idx, linklib in enumerate(env["LIBS"]): - if isbasestring(linklib): # first system lib such as "X11", otherwise SCons lib object - env["LIBS"].insert(idx, lib) - inserted = True - break - if not inserted: - env.Append(LIBS=[lib]) +# Needs to be appended to arrive after libscene in the linker call, +# but we don't want it to arrive *after* system libs, so manual hack +# LIBS contains first SCons Library objects ("SCons.Node.FS.File object") +# and then plain strings for system library. We insert between the two. +inserted = False +for idx, linklib in enumerate(env["LIBS"]): + if isbasestring(linklib): # first system lib such as "X11", otherwise SCons lib object + env["LIBS"].insert(idx, lib) + inserted = True + break +if not inserted: + env.Append(LIBS=[lib]) # Pandemonium source files diff --git a/modules/png/SCsub b/modules/png/SCsub index bb658c3..61033b8 100644 --- a/modules/png/SCsub +++ b/modules/png/SCsub @@ -9,56 +9,55 @@ env_png = env_modules.Clone() thirdparty_obj = [] -if env["builtin_libpng"]: - thirdparty_dir = "libpng/" - thirdparty_sources = [ - "png.c", - "pngerror.c", - "pngget.c", - "pngmem.c", - "pngpread.c", - "pngread.c", - "pngrio.c", - "pngrtran.c", - "pngrutil.c", - "pngset.c", - "pngtrans.c", - "pngwio.c", - "pngwrite.c", - "pngwtran.c", - "pngwutil.c", - ] - thirdparty_sources = [thirdparty_dir + file for file in thirdparty_sources] +thirdparty_dir = "libpng/" +thirdparty_sources = [ + "png.c", + "pngerror.c", + "pngget.c", + "pngmem.c", + "pngpread.c", + "pngread.c", + "pngrio.c", + "pngrtran.c", + "pngrutil.c", + "pngset.c", + "pngtrans.c", + "pngwio.c", + "pngwrite.c", + "pngwtran.c", + "pngwutil.c", +] +thirdparty_sources = [thirdparty_dir + file for file in thirdparty_sources] - env_png.Prepend(CPPPATH=[thirdparty_dir]) - # Needed for drivers includes and in platform/javascript - env.Prepend(CPPPATH=[thirdparty_dir]) +env_png.Prepend(CPPPATH=[thirdparty_dir]) +# Needed for drivers includes and in platform/javascript +env.Prepend(CPPPATH=[thirdparty_dir]) - # Currently .ASM filter_neon.S does not compile on NT. - import os +# Currently .ASM filter_neon.S does not compile on NT. +import os - use_neon = "neon_enabled" in env and env["neon_enabled"] and os.name != "nt" - if use_neon: - env_png.Append(CPPDEFINES=[("PNG_ARM_NEON_OPT", 2)]) - else: - env_png.Append(CPPDEFINES=[("PNG_ARM_NEON_OPT", 0)]) +use_neon = "neon_enabled" in env and env["neon_enabled"] and os.name != "nt" +if use_neon: + env_png.Append(CPPDEFINES=[("PNG_ARM_NEON_OPT", 2)]) +else: + env_png.Append(CPPDEFINES=[("PNG_ARM_NEON_OPT", 0)]) - env_thirdparty = env_png.Clone() - env_thirdparty.disable_warnings() - env_thirdparty.add_source_files(thirdparty_obj, thirdparty_sources) +env_thirdparty = env_png.Clone() +env_thirdparty.disable_warnings() +env_thirdparty.add_source_files(thirdparty_obj, thirdparty_sources) - if use_neon: - env_neon = env_thirdparty.Clone() - if "S_compiler" in env: - env_neon["CC"] = env["S_compiler"] - neon_sources = [] - neon_sources.append(env_neon.Object(thirdparty_dir + "/arm/arm_init.c")) - neon_sources.append(env_neon.Object(thirdparty_dir + "/arm/filter_neon_intrinsics.c")) - neon_sources.append(env_neon.Object(thirdparty_dir + "/arm/filter_neon.S")) - neon_sources.append(env_neon.Object(thirdparty_dir + "/arm/palette_neon_intrinsics.c")) - thirdparty_obj += neon_sources +if use_neon: + env_neon = env_thirdparty.Clone() + if "S_compiler" in env: + env_neon["CC"] = env["S_compiler"] + neon_sources = [] + neon_sources.append(env_neon.Object(thirdparty_dir + "/arm/arm_init.c")) + neon_sources.append(env_neon.Object(thirdparty_dir + "/arm/filter_neon_intrinsics.c")) + neon_sources.append(env_neon.Object(thirdparty_dir + "/arm/filter_neon.S")) + neon_sources.append(env_neon.Object(thirdparty_dir + "/arm/palette_neon_intrinsics.c")) + thirdparty_obj += neon_sources - env.modules_sources += thirdparty_obj +env.modules_sources += thirdparty_obj # Pandemonium source files diff --git a/platform/server/detect.py b/platform/server/detect.py index 1350acb..92e40dc 100644 --- a/platform/server/detect.py +++ b/platform/server/detect.py @@ -178,25 +178,6 @@ def configure(env): ## Dependencies - # FIXME: Check for existence of the libs before parsing their flags with pkg-config - - # freetype depends on libpng and zlib, so bundling one of them while keeping others - # as shared libraries leads to weird issues - if env["builtin_freetype"] or env["builtin_libpng"] or env["builtin_zlib"]: - env["builtin_freetype"] = True - env["builtin_libpng"] = True - env["builtin_zlib"] = True - - if not env["builtin_freetype"]: - env.ParseConfig("pkg-config freetype2 --cflags --libs") - - if not env["builtin_libpng"]: - env.ParseConfig("pkg-config libpng16 --cflags --libs") - - if False: # not env['builtin_assimp']: - # FIXME: Add min version check - env.ParseConfig("pkg-config assimp --cflags --libs") - if not env["builtin_enet"]: env.ParseConfig("pkg-config libenet --cflags --libs") @@ -214,10 +195,6 @@ def configure(env): ## Flags - # Linkflags below this line should typically stay the last ones - if not env["builtin_zlib"]: - env.ParseConfig("pkg-config zlib --cflags --libs") - env.Prepend(CPPPATH=["#platform/server"]) env.Append(CPPDEFINES=["SERVER_ENABLED", "UNIX_ENABLED"]) diff --git a/platform/x11/detect.py b/platform/x11/detect.py index fe521d6..27564c6 100644 --- a/platform/x11/detect.py +++ b/platform/x11/detect.py @@ -264,23 +264,6 @@ def configure(env): # FIXME: Check for existence of the libs before parsing their flags with pkg-config - # freetype depends on libpng and zlib, so bundling one of them while keeping others - # as shared libraries leads to weird issues - if env["builtin_freetype"] or env["builtin_libpng"] or env["builtin_zlib"]: - env["builtin_freetype"] = True - env["builtin_libpng"] = True - env["builtin_zlib"] = True - - if not env["builtin_freetype"]: - env.ParseConfig("pkg-config freetype2 --cflags --libs") - - if not env["builtin_libpng"]: - env.ParseConfig("pkg-config libpng16 --cflags --libs") - - if False: # not env['builtin_assimp']: - # FIXME: Add min version check - env.ParseConfig("pkg-config assimp --cflags --libs") - if not env["builtin_enet"]: env.ParseConfig("pkg-config libenet --cflags --libs") @@ -323,10 +306,6 @@ def configure(env): else: env["udev"] = False # Linux specific - # Linkflags below this line should typically stay the last ones - if not env["builtin_zlib"]: - env.ParseConfig("pkg-config zlib --cflags --libs") - env.Prepend(CPPPATH=["#platform/x11"]) env.Append(CPPDEFINES=["X11_ENABLED", "UNIX_ENABLED", "OPENGL_ENABLED", "GLES_ENABLED", ("_FILE_OFFSET_BITS", 64)])