From 39facb35a021f9301f742732fbbd3c6a5a548893 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= Date: Thu, 22 Sep 2022 08:28:55 +0200 Subject: SCons: Unify tools/target build type configuration Implements https://github.com/godotengine/godot-proposals/issues/3371. New `target` presets ==================== The `tools` option is removed and `target` changes to use three new presets, which match the builds users are familiar with. These targets control the default optimization level and enable editor-specific and debugging code: - `editor`: Replaces `tools=yes target=release_debug`. * Defines: `TOOLS_ENABLED`, `DEBUG_ENABLED`, `-O2`/`/O2` - `template_debug`: Replaces `tools=no target=release_debug`. * Defines: `DEBUG_ENABLED`, `-O2`/`/O2` - `template_release`: Replaces `tools=no target=release`. * Defines: `-O3`/`/O2` New `dev_build` option ====================== The previous `target=debug` is now replaced by a separate `dev_build=yes` option, which can be used in combination with either of the three targets, and changes the following: - `dev_build`: Defines `DEV_ENABLED`, disables optimization (`-O0`/`/0d`), enables generating debug symbols, does not define `NDEBUG` so `assert()` works in thirdparty libraries, adds a `.dev` suffix to the binary name. Note: Unlike previously, `dev_build` defaults to off so that users who compile Godot from source get an optimized and small build by default. Engine contributors should now set `dev_build=yes` in their build scripts or IDE configuration manually. Changed binary names ==================== The name of generated binaries and object files are changed too, to follow this format: `godot..[.dev][.double].[.][.]` For example: - `godot.linuxbsd.editor.dev.arm64` - `godot.windows.template_release.double.x86_64.mono.exe` Be sure to update your links/scripts/IDE config accordingly. More flexible `optimize` and `debug_symbols` options ==================================================== The optimization level and whether to generate debug symbols can be further specified with the `optimize` and `debug_symbols` options. So the default values listed above for the various `target` and `dev_build` combinations are indicative and can be replaced when compiling, e.g.: `scons p=linuxbsd target=template_debug dev_build=yes optimize=debug` will make a "debug" export template with dev-only code enabled, `-Og` optimization level for GCC/Clang, and debug symbols. Perfect for debugging complex crashes at runtime in an exported project. --- .github/actions/godot-build/action.yml | 17 +-- .github/workflows/android_builds.yml | 8 +- .github/workflows/ios_builds.yml | 5 +- .github/workflows/linux_builds.yml | 42 +++--- .github/workflows/macos_builds.yml | 13 +- .github/workflows/web_builds.yml | 5 +- .github/workflows/windows_builds.yml | 13 +- SConstruct | 155 ++++++++++++--------- core/SCsub | 2 +- editor/SCsub | 2 +- methods.py | 25 ++-- misc/dist/html/editor.html | 4 +- misc/dist/html/manifest.json | 2 +- modules/basis_universal/SCsub | 4 +- modules/csg/SCsub | 2 +- modules/cvtt/config.py | 2 +- modules/denoise/config.py | 2 +- modules/etcpak/config.py | 2 +- modules/freetype/SCsub | 2 +- modules/gdscript/SCsub | 2 +- modules/gltf/SCsub | 2 +- modules/gridmap/SCsub | 2 +- modules/mono/SCsub | 2 +- modules/mono/build_scripts/mono_configure.py | 9 +- modules/mono/config.py | 2 +- modules/multiplayer/SCsub | 2 +- modules/navigation/SCsub | 2 +- modules/openxr/SCsub | 2 +- modules/text_server_adv/SCsub | 4 +- .../text_server_adv/gdextension_build/SConstruct | 2 +- .../text_server_fb/gdextension_build/SConstruct | 2 +- modules/tinyexr/config.py | 2 +- modules/websocket/SCsub | 2 +- modules/xatlas_unwrap/config.py | 2 +- platform/android/SCsub | 10 +- platform/android/detect.py | 18 +-- platform/ios/detect.py | 29 +--- platform/linuxbsd/detect.py | 27 +--- platform/macos/detect.py | 23 +-- platform/web/detect.py | 23 +-- platform/web/emscripten_helpers.py | 14 +- platform/windows/detect.py | 65 +-------- 42 files changed, 216 insertions(+), 339 deletions(-) diff --git a/.github/actions/godot-build/action.yml b/.github/actions/godot-build/action.yml index 75f3d9ab37..377480b123 100644 --- a/.github/actions/godot-build/action.yml +++ b/.github/actions/godot-build/action.yml @@ -2,16 +2,13 @@ name: Build Godot description: Build Godot with the provided options. inputs: target: - description: The scons target (debug/release_debug/release). - default: "debug" - tools: - description: If tools are to be built. - default: false + description: Build target (editor, template_release, template_debug). + default: "editor" tests: - description: If tests are to be built. + description: Unit tests. default: false platform: - description: The Godot platform to build. + description: Target platform. required: false sconsflags: default: "" @@ -33,7 +30,7 @@ runs: SCONS_CACHE: ${{ inputs.scons-cache }} SCONS_CACHE_LIMIT: ${{ inputs.scons-cache-limit }} run: | - echo "Building with flags:" ${{ env.SCONSFLAGS }} - if ! ${{ inputs.tools }}; then rm -rf editor; fi # Ensure we don't include editor code. - scons p=${{ inputs.platform }} target=${{ inputs.target }} tools=${{ inputs.tools }} tests=${{ inputs.tests }} ${{ env.SCONSFLAGS }} + echo "Building with flags:" platform=${{ inputs.platform }} target=${{ inputs.target }} tests=${{ inputs.tests }} ${{ env.SCONSFLAGS }} + if [ "${{ inputs.target }}" != "editor" ]; then rm -rf editor; fi # Ensure we don't include editor code. + scons platform=${{ inputs.platform }} target=${{ inputs.target }} tests=${{ inputs.tests }} ${{ env.SCONSFLAGS }} ls -l bin/ diff --git a/.github/workflows/android_builds.yml b/.github/workflows/android_builds.yml index 4f54f6629e..ed4ef01012 100644 --- a/.github/workflows/android_builds.yml +++ b/.github/workflows/android_builds.yml @@ -14,7 +14,7 @@ concurrency: jobs: android-template: runs-on: "ubuntu-20.04" - name: Template (target=release, tools=no) + name: Template (target=template_release) steps: - uses: actions/checkout@v3 @@ -44,8 +44,7 @@ jobs: with: sconsflags: ${{ env.SCONSFLAGS }} arch=arm32 platform: android - target: release - tools: false + target: template_release tests: false - name: Compilation (arm64) @@ -53,8 +52,7 @@ jobs: with: sconsflags: ${{ env.SCONSFLAGS }} arch=arm64 platform: android - target: release - tools: false + target: template_release tests: false - name: Generate Godot templates diff --git a/.github/workflows/ios_builds.yml b/.github/workflows/ios_builds.yml index bc00fad569..0ea7a4ccc3 100644 --- a/.github/workflows/ios_builds.yml +++ b/.github/workflows/ios_builds.yml @@ -14,7 +14,7 @@ concurrency: jobs: ios-template: runs-on: "macos-latest" - name: Template (target=release, tools=no) + name: Template (target=template_release) steps: - uses: actions/checkout@v3 @@ -31,8 +31,7 @@ jobs: with: sconsflags: ${{ env.SCONSFLAGS }} platform: ios - target: release - tools: false + target: template_release tests: false - name: Upload artifact diff --git a/.github/workflows/linux_builds.yml b/.github/workflows/linux_builds.yml index 2e8bd101e5..b0ed71a7b5 100644 --- a/.github/workflows/linux_builds.yml +++ b/.github/workflows/linux_builds.yml @@ -7,7 +7,7 @@ env: GODOT_BASE_BRANCH: master SCONSFLAGS: verbose=yes warnings=extra werror=yes module_text_server_fb_enabled=yes DOTNET_NOLOGO: true - DOTNET_CLI_TELEMETRY_OPTOUT: false + DOTNET_CLI_TELEMETRY_OPTOUT: true concurrency: group: ci-${{github.actor}}-${{github.head_ref || github.run_number}}-${{github.ref}}-linux @@ -21,57 +21,52 @@ jobs: fail-fast: false matrix: include: - - name: Editor w Mono (target=release_debug, tools=yes, tests=yes) + - name: Editor w/ Mono (target=editor) cache-name: linux-editor-mono - target: release_debug - tools: true + target: editor tests: false # Disabled due freeze caused by mix Mono build and CI sconsflags: module_mono_enabled=yes doc-test: true - bin: "./bin/godot.linuxbsd.opt.tools.x86_64.mono" + bin: "./bin/godot.linuxbsd.editor.x86_64.mono" build-mono: true proj-conv: true artifact: true - - name: Editor with doubles and GCC sanitizers (target=debug, tools=yes, float=64, tests=yes, use_asan=yes, use_ubsan=yes, linker=gold) + - name: Editor with doubles and GCC sanitizers (target=editor, tests=yes, dev_build=yes, float=64, use_asan=yes, use_ubsan=yes, linker=gold) cache-name: linux-editor-double-sanitizers - target: debug - tools: true + target: editor tests: true - sconsflags: float=64 use_asan=yes use_ubsan=yes linker=gold + sconsflags: dev_build=yes float=64 use_asan=yes use_ubsan=yes linker=gold proj-test: true # Can be turned off for PRs that intentionally break compat with godot-cpp, # until both the upstream PR and the matching godot-cpp changes are merged. godot-cpp-test: true - bin: "./bin/godot.linuxbsd.double.tools.x86_64.san" + bin: "./bin/godot.linuxbsd.editor.dev.double.x86_64.san" build-mono: false # Skip 2GiB artifact speeding up action. artifact: false - - name: Editor with clang sanitizers (target=debug, tools=yes, use_asan=yes, use_ubsan=yes, use_llvm=yes, linker=lld) + - name: Editor with clang sanitizers (target=editor, tests=yes, dev_build=yes, use_asan=yes, use_ubsan=yes, use_llvm=yes, linker=lld) cache-name: linux-editor-llvm-sanitizers - target: debug - tools: true + target: editor tests: true - sconsflags: use_asan=yes use_ubsan=yes use_llvm=yes linker=lld - bin: "./bin/godot.linuxbsd.tools.x86_64.llvm.san" + sconsflags: dev_build=yes use_asan=yes use_ubsan=yes use_llvm=yes linker=lld + bin: "./bin/godot.linuxbsd.editor.dev.x86_64.llvm.san" build-mono: false # Skip 2GiB artifact speeding up action. artifact: false - - name: Template w/ Mono (target=release, tools=no) + - name: Template w/ Mono (target=template_release) cache-name: linux-template-mono - target: release - tools: false + target: template_release tests: false - sconsflags: module_mono_enabled=yes debug_symbols=no + sconsflags: module_mono_enabled=yes build-mono: false artifact: true - - name: Minimal Template (target=release, tools=no, everything disabled) + - name: Minimal template (target=template_release, everything disabled) cache-name: linux-template-minimal - target: release - tools: false + target: template_release tests: false sconsflags: modules_enabled_by_default=no disable_3d=yes disable_advanced_gui=yes deprecated=no minizip=no artifact: true @@ -113,7 +108,6 @@ jobs: sconsflags: ${{ env.SCONSFLAGS }} ${{ matrix.sconsflags }} platform: linuxbsd target: ${{ matrix.target }} - tools: ${{ matrix.tools }} tests: ${{ matrix.tests }} - name: Generate C# glue @@ -221,7 +215,7 @@ jobs: if: ${{ matrix.godot-cpp-test }} run: | cd godot-cpp/test - scons target=${{ matrix.target }} + scons target=debug cd ../.. - name: Prepare artifact diff --git a/.github/workflows/macos_builds.yml b/.github/workflows/macos_builds.yml index be1fb8de85..dd3db3270b 100644 --- a/.github/workflows/macos_builds.yml +++ b/.github/workflows/macos_builds.yml @@ -19,17 +19,15 @@ jobs: fail-fast: false matrix: include: - - name: Editor (target=release_debug, tools=yes, tests=yes) + - name: Editor (target=editor, tests=yes) cache-name: macos-editor - target: release_debug - tools: true + target: editor tests: true - bin: "./bin/godot.macos.opt.tools.x86_64" + bin: "./bin/godot.macos.editor.x86_64" - - name: Template (target=release, tools=no) + - name: Template (target=template_release) cache-name: macos-template - target: release - tools: false + target: template_release tests: false sconsflags: debug_symbols=no @@ -55,7 +53,6 @@ jobs: sconsflags: ${{ env.SCONSFLAGS }} platform: macos target: ${{ matrix.target }} - tools: ${{ matrix.tools }} tests: ${{ matrix.tests }} # Execute unit tests for the editor diff --git a/.github/workflows/web_builds.yml b/.github/workflows/web_builds.yml index deee91938d..f684b838e1 100644 --- a/.github/workflows/web_builds.yml +++ b/.github/workflows/web_builds.yml @@ -16,7 +16,7 @@ concurrency: jobs: web-template: runs-on: "ubuntu-20.04" - name: Template (target=release, tools=no) + name: Template (target=template_release) steps: - uses: actions/checkout@v3 @@ -43,8 +43,7 @@ jobs: with: sconsflags: ${{ env.SCONSFLAGS }} platform: web - target: release - tools: false + target: template_release tests: false - name: Upload artifact diff --git a/.github/workflows/windows_builds.yml b/.github/workflows/windows_builds.yml index 9033e1ab1d..b35c811763 100644 --- a/.github/workflows/windows_builds.yml +++ b/.github/workflows/windows_builds.yml @@ -22,19 +22,17 @@ jobs: fail-fast: false matrix: include: - - name: Editor (target=release_debug, tools=yes, tests=yes) + - name: Editor (target=editor, tests=yes) cache-name: windows-editor - target: release_debug - tools: true + target: editor tests: true # Skip debug symbols, they're way too big with MSVC. sconsflags: debug_symbols=no - bin: "./bin/godot.windows.opt.tools.x86_64.exe" + bin: "./bin/godot.windows.editor.x86_64.exe" - - name: Template (target=release, tools=no) + - name: Template (target=template_release, tools=no) cache-name: windows-template - target: release - tools: false + target: template_release tests: false sconsflags: debug_symbols=no @@ -57,7 +55,6 @@ jobs: sconsflags: ${{ env.SCONSFLAGS }} ${{ matrix.sconsflags }} platform: windows target: ${{ matrix.target }} - tools: ${{ matrix.tools }} tests: ${{ matrix.tests }} # Execute unit tests for the editor diff --git a/SConstruct b/SConstruct index b64e0bddd8..c86422c4e4 100644 --- a/SConstruct +++ b/SConstruct @@ -57,7 +57,7 @@ import glsl_builders import gles3_builders from platform_methods import architectures, architecture_aliases -if methods.get_cmdline_bool("tools", True): +if ARGUMENTS.get("target", "editor") == "editor": _helper_module("editor.editor_builders", "editor/editor_builders.py") _helper_module("editor.template_builders", "editor/template_builders.py") @@ -164,27 +164,33 @@ opts = Variables(customs, ARGUMENTS) # Target build options opts.Add("platform", "Target platform (%s)" % ("|".join(platform_list),), "") opts.Add("p", "Platform (alias for 'platform')", "") -opts.Add(BoolVariable("tools", "Build the tools (a.k.a. the Godot editor)", True)) -opts.Add(EnumVariable("target", "Compilation target", "debug", ("debug", "release_debug", "release"))) +opts.Add(EnumVariable("target", "Compilation target", "editor", ("editor", "template_release", "template_debug"))) opts.Add(EnumVariable("arch", "CPU architecture", "auto", ["auto"] + architectures, architecture_aliases)) -opts.Add(EnumVariable("float", "Floating-point precision", "32", ("32", "64"))) -opts.Add(EnumVariable("optimize", "Optimization type", "speed", ("speed", "size", "none"))) +opts.Add(BoolVariable("dev_build", "Developer build with dev-only debugging code (DEV_ENABLED)", False)) +opts.Add( + EnumVariable( + "optimize", "Optimization level", "speed_trace", ("none", "custom", "debug", "speed", "speed_trace", "size") + ) +) +opts.Add(BoolVariable("debug_symbols", "Build with debugging symbols", True)) +opts.Add(BoolVariable("separate_debug_symbols", "Extract debugging symbols to a separate file", False)) +opts.Add(EnumVariable("lto", "Link-time optimization (production builds)", "none", ("none", "auto", "thin", "full"))) opts.Add(BoolVariable("production", "Set defaults to build Godot for use in production", False)) -opts.Add(EnumVariable("lto", "Link-time optimization (for production buids)", "none", ("none", "auto", "thin", "full"))) # Components opts.Add(BoolVariable("deprecated", "Enable compatibility code for deprecated and removed features", True)) +opts.Add(EnumVariable("float", "Floating-point precision", "32", ("32", "64"))) opts.Add(BoolVariable("minizip", "Enable ZIP archive support using minizip", True)) opts.Add(BoolVariable("xaudio2", "Enable the XAudio2 audio driver", False)) opts.Add(BoolVariable("vulkan", "Enable the vulkan video driver", True)) opts.Add(BoolVariable("opengl3", "Enable the OpenGL/GLES3 video driver", True)) opts.Add(BoolVariable("openxr", "Enable the OpenXR driver", True)) +opts.Add(BoolVariable("use_volk", "Use the volk library to load the Vulkan loader dynamically", True)) opts.Add("custom_modules", "A list of comma-separated directory paths containing custom modules to build.", "") opts.Add(BoolVariable("custom_modules_recursive", "Detect custom modules recursively for each specified path.", True)) -opts.Add(BoolVariable("use_volk", "Use the volk library to load the Vulkan loader dynamically", True)) # Advanced options -opts.Add(BoolVariable("dev", "If yes, alias for verbose=yes warnings=extra werror=yes", False)) +opts.Add(BoolVariable("dev_mode", "Alias for dev options: verbose=yes warnings=extra werror=yes tests=yes", False)) opts.Add(BoolVariable("tests", "Build the unit tests", False)) opts.Add(BoolVariable("fast_unsafe", "Enable unsafe options for faster rebuilds", False)) opts.Add(BoolVariable("compiledb", "Generate compilation DB (`compile_commands.json`) for external tools", False)) @@ -376,13 +382,36 @@ env_base.Prepend(CPPPATH=["#"]) env_base.platform_exporters = platform_exporters env_base.platform_apis = platform_apis -# Build type defines - more platform-specific ones can be in detect.py. -if env_base["target"] == "release_debug" or env_base["target"] == "debug": +# Configuration of build targets: +# - Editor or template +# - Debug features (DEBUG_ENABLED code) +# - Dev only code (DEV_ENABLED code) +# - Optimization level +# - Debug symbols for crash traces / debuggers + +env_base.editor_build = env_base["target"] == "editor" +env_base.dev_build = env_base["dev_build"] +env_base.debug_features = env_base["target"] in ["editor", "template_debug"] + +if env_base.dev_build: + opt_level = "none" +elif env_base.debug_features: + opt_level = "speed_trace" +else: # Release + opt_level = "speed" + +env_base["optimize"] = ARGUMENTS.get("optimize", opt_level) +env_base["debug_symbols"] = methods.get_cmdline_bool("debug_symbols", env_base.dev_build) + +if env_base.editor_build: + env_base.Append(CPPDEFINES=["TOOLS_ENABLED"]) + +if env_base.debug_features: # DEBUG_ENABLED enables debugging *features* and debug-only code, which is intended # to give *users* extra debugging information for their game development. env_base.Append(CPPDEFINES=["DEBUG_ENABLED"]) -if env_base["target"] == "debug": +if env_base.dev_build: # DEV_ENABLED enables *engine developer* code which should only be compiled for those # working on the engine itself. env_base.Append(CPPDEFINES=["DEV_ENABLED"]) @@ -395,7 +424,7 @@ else: # Unsafe as they reduce the certainty of rebuilding all changed files, so it's # enabled by default for `debug` builds, and can be overridden from command line. # Ref: https://github.com/SCons/scons/wiki/GoFastButton -if methods.get_cmdline_bool("fast_unsafe", env_base["target"] == "debug"): +if methods.get_cmdline_bool("fast_unsafe", env_base.dev_build): # Renamed to `content-timestamp` in SCons >= 4.2, keeping MD5 for compat. env_base.Decider("MD5-timestamp") env_base.SetOption("implicit_cache", 1) @@ -470,32 +499,64 @@ if selected_platform in platform_list: if not (f[0] in ARGUMENTS) or ARGUMENTS[f[0]] == "auto": # Allow command line to override platform flags env[f[0]] = f[1] - # 'dev' and 'production' are aliases to set default options if they haven't been + # 'dev_mode' and 'production' are aliases to set default options if they haven't been # set manually by the user. # These need to be checked *after* platform specific flags so that different # default values can be set (e.g. to keep LTO off for `production` on some platforms). - if env["dev"]: + if env["dev_mode"]: env["verbose"] = methods.get_cmdline_bool("verbose", True) env["warnings"] = ARGUMENTS.get("warnings", "extra") env["werror"] = methods.get_cmdline_bool("werror", True) - if env["tools"]: - env["tests"] = methods.get_cmdline_bool("tests", True) + env["tests"] = methods.get_cmdline_bool("tests", True) if env["production"]: env["use_static_cpp"] = methods.get_cmdline_bool("use_static_cpp", True) env["debug_symbols"] = methods.get_cmdline_bool("debug_symbols", False) # LTO "auto" means we handle the preferred option in each platform detect.py. env["lto"] = ARGUMENTS.get("lto", "auto") - if not env["tools"] and env["target"] == "debug": - print( - "WARNING: Requested `production` build with `tools=no target=debug`, " - "this will give you a full debug template (use `target=release_debug` " - "for an optimized template with debug features)." - ) # Must happen after the flags' definition, as configure is when most flags # are actually handled to change compile options, etc. detect.configure(env) + print(f'Building for platform "{selected_platform}", architecture "{env["arch"]}", target "{env["target"]}.') + if env.dev_build: + print("NOTE: Developer build, with debug optimization level and debug symbols (unless overridden).") + + # Set optimize and debug_symbols flags. + # "custom" means do nothing and let users set their own optimization flags. + # Needs to happen after configure to have `env.msvc` defined. + if env.msvc: + if env["debug_symbols"]: + env.Append(CCFLAGS=["/Zi", "/FS"]) + env.Append(LINKFLAGS=["/DEBUG:FULL"]) + + if env["optimize"] == "speed" or env["optimize"] == "speed_trace": + env.Append(CCFLAGS=["/O2"]) + env.Append(LINKFLAGS=["/OPT:REF"]) + elif env["optimize"] == "size": + env.Append(CCFLAGS=["/O1"]) + env.Append(LINKFLAGS=["/OPT:REF"]) + elif env["optimize"] == "debug" or env["optimize"] == "none": + env.Append(CCFLAGS=["/Od"]) + else: + if env["debug_symbols"]: + if env.dev_build: + env.Append(CCFLAGS=["-g3"]) + else: + env.Append(CCFLAGS=["-g2"]) + + if env["optimize"] == "speed": + env.Append(CCFLAGS=["-O3"]) + # `-O2` is friendlier to debuggers than `-O3`, leading to better crash backtraces. + elif env["optimize"] == "speed_trace": + env.Append(CCFLAGS=["-O2"]) + elif env["optimize"] == "size": + env.Append(CCFLAGS=["-Os"]) + elif env["optimize"] == "debug": + env.Append(CCFLAGS=["-Og"]) + elif env["optimize"] == "none": + env.Append(CCFLAGS=["-O0"]) + # Needs to happen after configure to handle "auto". if env["lto"] != "none": print("Using LTO: " + env["lto"]) @@ -514,11 +575,6 @@ if selected_platform in platform_list: # We apply it to CCFLAGS (both C and C++ code) in case it impacts C features. env.Prepend(CCFLAGS=["/std:c++17"]) - print( - 'Building for platform "%s", architecture "%s", %s, target "%s".' - % (selected_platform, env["arch"], "editor" if env["tools"] else "template", env["target"]) - ) - # Enforce our minimal compiler version requirements cc_version = methods.get_compiler_version(env) or { "major": None, @@ -663,32 +719,13 @@ if selected_platform in platform_list: else: suffix = "." + selected_platform + suffix += "." + env["target"] + if env.dev_build: + suffix += ".dev" + if env_base["float"] == "64": suffix += ".double" - if env["target"] == "release": - if env["tools"]: - print("ERROR: The editor can only be built with `target=debug` or `target=release_debug`.") - print(" Use `tools=no target=release` to build a release export template.") - Exit(255) - suffix += ".opt" - elif env["target"] == "release_debug": - if env["tools"]: - suffix += ".opt.tools" - else: - suffix += ".opt.debug" - else: - if env["tools"]: - print( - "Note: Building a debug binary (which will run slowly). Use `target=release_debug` to build an optimized release binary." - ) - suffix += ".tools" - else: - print( - "Note: Building a debug binary (which will run slowly). Use `target=release` to build an optimized release binary." - ) - suffix += ".debug" - suffix += "." + env["arch"] suffix += env.extra_suffix @@ -753,9 +790,6 @@ if selected_platform in platform_list: env["LIBSUFFIX"] = suffix + env["LIBSUFFIX"] env["SHLIBSUFFIX"] = suffix + env["SHLIBSUFFIX"] - if env["tools"]: - env.Append(CPPDEFINES=["TOOLS_ENABLED"]) - disabled_classes = [] if env["build_feature_profile"] != "": @@ -777,19 +811,16 @@ if selected_platform in platform_list: methods.write_disabled_classes(disabled_classes) if env["disable_3d"]: - if env["tools"]: - print( - "Build option 'disable_3d=yes' cannot be used with 'tools=yes' (editor), " - "only with 'tools=no' (export template)." - ) + if env.editor_build: + print("Build option 'disable_3d=yes' cannot be used for editor builds, but only for export templates.") Exit(255) else: env.Append(CPPDEFINES=["_3D_DISABLED"]) if env["disable_advanced_gui"]: - if env["tools"]: + if env.editor_build: print( - "Build option 'disable_advanced_gui=yes' cannot be used with 'tools=yes' (editor), " - "only with 'tools=no' (export template)." + "Build option 'disable_advanced_gui=yes' cannot be used for editor builds, " + "but only for export templates." ) Exit(255) else: @@ -847,7 +878,7 @@ if selected_platform in platform_list: SConscript("core/SCsub") SConscript("servers/SCsub") SConscript("scene/SCsub") - if env["tools"]: + if env.editor_build: SConscript("editor/SCsub") SConscript("drivers/SCsub") diff --git a/core/SCsub b/core/SCsub index d4462fa546..43deff3ad5 100644 --- a/core/SCsub +++ b/core/SCsub @@ -85,7 +85,7 @@ if env["builtin_zlib"]: 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": + if env.dev_build: env_thirdparty.Append(CPPDEFINES=["ZLIB_DEBUG"]) env_thirdparty.add_source_files(thirdparty_obj, thirdparty_zlib_sources) diff --git a/editor/SCsub b/editor/SCsub index c217f162b4..32ad88add5 100644 --- a/editor/SCsub +++ b/editor/SCsub @@ -24,7 +24,7 @@ def _make_doc_data_class_path(to_path): g.close() -if env["tools"]: +if env.editor_build: # Register exporters reg_exporters_inc = '#include "register_exporters.h"\n' reg_exporters = "void register_exporters() {\n" diff --git a/methods.py b/methods.py index 97a1e15e35..5e4a704135 100644 --- a/methods.py +++ b/methods.py @@ -64,7 +64,7 @@ def disable_warnings(self): def force_optimization_on_debug(self): # 'self' is the environment - if self["target"] != "debug": + if self["target"] != "template-release": return if self.msvc: @@ -737,20 +737,19 @@ def generate_vs_project(env, num_jobs): if batch_file: class ModuleConfigs(Mapping): - # This version information (Win32, x64, Debug, Release, Release_Debug seems to be + # This version information (Win32, x64, Debug, Release) seems to be # required for Visual Studio to understand that it needs to generate an NMAKE # project. Do not modify without knowing what you are doing. PLATFORMS = ["Win32", "x64"] PLATFORM_IDS = ["x86_32", "x86_64"] - CONFIGURATIONS = ["debug", "release", "release_debug"] - CONFIGURATION_IDS = ["tools", "opt", "opt.tools"] + CONFIGURATIONS = ["editor", "template_release", "template_debug"] + DEV_SUFFIX = ["", ".dev"] @staticmethod def for_every_variant(value): return [value for _ in range(len(ModuleConfigs.CONFIGURATIONS) * len(ModuleConfigs.PLATFORMS))] def __init__(self): - shared_targets_array = [] self.names = [] self.arg_dict = { @@ -779,16 +778,16 @@ def generate_vs_project(env, num_jobs): for platform in ModuleConfigs.PLATFORMS ] self.arg_dict["runfile"] += [ - f'bin\\godot.windows.{config_id}.{plat_id}{f".{name}" if name else ""}.exe' - for config_id in ModuleConfigs.CONFIGURATION_IDS + f'bin\\godot.windows.{config}{dev}.{plat_id}{f".{name}" if name else ""}.exe' + for config in ModuleConfigs.CONFIGURATIONS for plat_id in ModuleConfigs.PLATFORM_IDS + for dev in ModuleConfig.DEV_SUFFIX ] self.arg_dict["cpppaths"] += ModuleConfigs.for_every_variant(env["CPPPATH"] + [includes]) self.arg_dict["cppdefines"] += ModuleConfigs.for_every_variant(env["CPPDEFINES"] + defines) self.arg_dict["cmdargs"] += ModuleConfigs.for_every_variant(cli_args) def build_commandline(self, commands): - configuration_getter = ( "$(Configuration" + "".join([f'.Replace("{name}", "")' for name in self.names[1:]]) @@ -799,8 +798,6 @@ def generate_vs_project(env, num_jobs): common_build_prefix = [ 'cmd /V /C set "plat=$(PlatformTarget)"', '(if "$(PlatformTarget)"=="x64" (set "plat=x86_amd64"))', - 'set "tools=%s"' % env["tools"], - f'(if "{configuration_getter}"=="release" (set "tools=no"))', 'call "' + batch_file + '" !plat!', ] @@ -813,10 +810,12 @@ def generate_vs_project(env, num_jobs): "platform=windows", f"target={configuration_getter}", "progress=no", - "tools=!tools!", "-j%s" % num_jobs, ] + if env["dev_build"]: + common_build_postfix.append("dev_build=yes") + if env["tests"]: common_build_postfix.append("tests=yes") @@ -846,7 +845,7 @@ def generate_vs_project(env, num_jobs): add_to_vs_project(env, env.servers_sources) if env["tests"]: add_to_vs_project(env, env.tests_sources) - if env["tools"]: + if env.editor_build: add_to_vs_project(env, env.editor_sources) for header in glob_recursive("**/*.h"): @@ -855,7 +854,7 @@ def generate_vs_project(env, num_jobs): module_configs = ModuleConfigs() if env.get("module_mono_enabled"): - mono_defines = [("GD_MONO_HOT_RELOAD",)] if env["tools"] else [] + mono_defines = [("GD_MONO_HOT_RELOAD",)] if env.editor_build else [] module_configs.add_mode( "mono", cli_args="module_mono_enabled=yes", diff --git a/misc/dist/html/editor.html b/misc/dist/html/editor.html index ac00270d50..c9f3c2cc0d 100644 --- a/misc/dist/html/editor.html +++ b/misc/dist/html/editor.html @@ -411,7 +411,7 @@ } } //]]> - +