diff --git a/build/moz.configure/finalize-flags.configure b/build/moz.configure/finalize-flags.configure index c1a0054d072f..73c8760cf9b8 100644 --- a/build/moz.configure/finalize-flags.configure +++ b/build/moz.configure/finalize-flags.configure @@ -41,12 +41,23 @@ add_old_configure_assignment("LDFLAGS", os_ldflags) set_config("OS_LDFLAGS", os_ldflags) -@depends(linker_optimize_flags, moz_optimize_flags, lto, c_compiler) -def moz_optimize_ldflags(linker_optimize_flags, moz_optimize_flags, lto, c_compiler): +set_config("MOZ_OPTIMIZE_FLAGS", moz_optimize_flags, when=~js_build) + + +@depends( + linker_optimize_flags, + "MOZ_OPTIMIZE_FLAGS", + lto, + c_compiler, +) +@imports(_from="mozbuild.shellutil", _import="split") +def moz_optimize_ldflags(linker_optimize_flags, env_optimize_flags, lto, c_compiler): flags = [] if linker_optimize_flags: flags += linker_optimize_flags.ldflags - flags += moz_optimize_flags + + if env_optimize_flags: + flags += split(env_optimize_flags[0]) # When using llvm-based LTO, non numeric optimization levels are # not supported by the linker, so force the linker to use -O2 ( @@ -58,3 +69,20 @@ def moz_optimize_ldflags(linker_optimize_flags, moz_optimize_flags, lto, c_compi set_config("MOZ_OPTIMIZE_LDFLAGS", moz_optimize_ldflags) + + +@depends( + try_compile( + includes=["stdio.h"], + body='puts("demat");', + flags=moz_optimize_flags, + language="C", + check_msg="for valid C compiler optimization flags", + ), + moz_optimize_flags, + when=moz_optimize, +) +@imports(_from="mozbuild.shellutil", _import="quote") +def check_optimization_flags(check_result, moz_optimize_flags): + if not check_result: + die(f"Invalid C compiler optimization flags: {quote(*moz_optimize_flags)}") diff --git a/build/moz.configure/toolchain.configure b/build/moz.configure/toolchain.configure index cda2258981d9..bee1ed4916cb 100644 --- a/build/moz.configure/toolchain.configure +++ b/build/moz.configure/toolchain.configure @@ -98,36 +98,42 @@ def forced_pgo_optimization_level(target): return "-O3" -@depends("--enable-optimize") -def moz_optimize(option): - if len(option): - if "-O0" not in option[0]: - return "2" - elif option: - return "1" - - -@depends("--enable-optimize", forced_pgo_optimization_level) +@depends("--enable-optimize", "MOZ_OPTIMIZE_FLAGS") @imports(_from="mozbuild.shellutil", _import="split") -def moz_optimize_flags(option, forced_pgo_optimization_level): - if len(option): - return split(option[0]) - elif option and forced_pgo_optimization_level: - return [forced_pgo_optimization_level] +def configured_moz_optimize_flags(enable_optimize, env_flags): + if len(enable_optimize): + return split(enable_optimize[0]) + if len(env_flags): + return split(env_flags[0]) + + +@depends("--enable-optimize", "MOZ_OPTIMIZE_FLAGS") +def moz_optimize(enable_optimize, env_flags): + return "1" if enable_optimize or env_flags else None set_config("MOZ_OPTIMIZE", moz_optimize) -add_old_configure_assignment("MOZ_OPTIMIZE", moz_optimize) -add_old_configure_assignment("MOZ_CONFIGURE_OPTIMIZE_FLAGS", moz_optimize_flags) -@depends_if("MOZ_OPTIMIZE_FLAGS") +@depends( + target, moz_optimize, configured_moz_optimize_flags, forced_pgo_optimization_level +) @imports(_from="mozbuild.shellutil", _import="split") -def moz_optimize_flags(env_optimize_flags): - return split(env_optimize_flags[0]) +def moz_optimize_flags( + target, moz_optimize, configured_moz_optimize_flags, forced_pgo_optimization_level +): + if configured_moz_optimize_flags: + return configured_moz_optimize_flags + if moz_optimize and forced_pgo_optimization_level: + return [forced_pgo_optimization_level] -add_old_configure_assignment("MOZ_OPTIMIZE_FLAGS", moz_optimize_flags) + if target.kernel == "Darwin": + return ["-O3"] + elif target.kernel in ("Linux", "WINNT"): + return ["-O2"] + else: + return ["-O"] # Android NDK @@ -3878,20 +3884,3 @@ dtrace = check_header( set_config("HAVE_DTRACE", True, when=dtrace) set_define("INCLUDE_MOZILLA_DTRACE", True, when=dtrace) - - -@depends( - try_compile( - includes=["stdio.h"], - body='puts("demat");', - flags=moz_optimize_flags, - language="C", - check_msg="for valid C compiler optimization flags", - ), - moz_optimize_flags, - when=moz_optimize, -) -@imports(_from="mozbuild.shellutil", _import="quote") -def check_optimization_flags(check_result, moz_optimize_flags): - if not check_result: - die(f"Invalid C compiler optimization flags: {quote(*moz_optimize_flags)}") diff --git a/js/moz.configure b/js/moz.configure index 8fb51095876f..08df84d2d165 100644 --- a/js/moz.configure +++ b/js/moz.configure @@ -1477,6 +1477,34 @@ with only_when(compile_environment): ) +# Optimization flags +# ============================================================== +@depends( + target, + c_compiler, + configured_moz_optimize_flags, + when="--enable-compile-environment", +) +@imports(_from="mozbuild.shellutil", _import="split") +def moz_js_optimize_flags(target, compiler, configured_moz_optimize_flags): + if configured_moz_optimize_flags: + return configured_moz_optimize_flags + + if target.kernel in ("Darwin", "Linux"): + flags = ["-O3"] + if target.os == "Android" and compiler.type == "gcc": + flags += ["-fno-reorder-functions"] + return flags + elif target.kernel == "WINNT": + return ["-O2"] + else: + return ["-O"] + + +set_config("MOZ_JS_OPTIMIZE_FLAGS", moz_js_optimize_flags, when=~js_build) +set_config("MOZ_OPTIMIZE_FLAGS", moz_js_optimize_flags, when=js_build) + + # link executables against mozglue # ============================================================== @depends( diff --git a/js/src/old-configure.in b/js/src/old-configure.in index 9baff651572d..9ea8d8652abf 100644 --- a/js/src/old-configure.in +++ b/js/src/old-configure.in @@ -44,53 +44,6 @@ fi fi # COMPILE_ENVIRONMENT -dnl ======================================================== -dnl System overrides of the defaults for target -dnl ======================================================== - -case "$target" in -*-darwin*) - MOZ_OPTIMIZE_FLAGS="-O3" - ;; - -*-android*|*-linuxandroid*) - MOZ_OPTIMIZE_FLAGS="-O3" - if test "$CC_TYPE" == gcc ; then - MOZ_OPTIMIZE_FLAGS="-fno-reorder-functions $MOZ_OPTIMIZE_FLAGS" - fi - ;; - -*-*linux*) - MOZ_OPTIMIZE_FLAGS="-O3" - ;; - -*-mingw*) - MOZ_OPTIMIZE_FLAGS="-O2" - ;; - -esac - -if test -z "$MOZ_OPTIMIZE_FLAGS"; then - MOZ_OPTIMIZE_FLAGS="-O" -fi - - -dnl Mozilla specific options -dnl ======================================================== -dnl The macros used for command line options -dnl are defined in build/autoconf/altoptions.m4. - -dnl ======================================================== -dnl = Enable code optimization. ON by default. -dnl ======================================================== - -# Use value from moz.configure if one is defined. Else use our computed -# value. -if test -n "${MOZ_CONFIGURE_OPTIMIZE_FLAGS}"; then - MOZ_OPTIMIZE_FLAGS=${MOZ_CONFIGURE_OPTIMIZE_FLAGS} -fi - -AC_SUBST_LIST(MOZ_OPTIMIZE_FLAGS) dnl ======================================================== dnl = diff --git a/old-configure.in b/old-configure.in index 1af75c496b15..34fff2d451e3 100644 --- a/old-configure.in +++ b/old-configure.in @@ -35,39 +35,6 @@ fi fi # COMPILE_ENVIRONMENT -dnl ======================================================== -dnl System overrides of the defaults for target -dnl ======================================================== - -case "$target" in -*-darwin*) - MOZ_OPTIMIZE_FLAGS="-O3" - ;; - -*-android*|*-linuxandroid*) - MOZ_OPTIMIZE_FLAGS="-O2" - ;; - -*-*linux*) - if test "$CC_TYPE" != clang-cl ; then - MOZ_OPTIMIZE_FLAGS="-O2" - fi - ;; -*-mingw*) - MOZ_OPTIMIZE_FLAGS="-O2" - ;; -esac - -if test -z "$MOZ_OPTIMIZE_FLAGS"; then - MOZ_OPTIMIZE_FLAGS="-O" -fi - - -dnl Mozilla specific options -dnl ======================================================== -dnl The macros used for command line options -dnl are defined in build/autoconf/altoptions.m4. - dnl ======================================================== dnl = dnl = Application @@ -124,18 +91,6 @@ fi AC_SUBST(MOZ_BRANDING_DIRECTORY) -dnl ======================================================== -dnl = Enable code optimization. ON by default. -dnl ======================================================== - -# Use value from moz.configure if one is defined. Else use our computed -# value. -if test -n "${MOZ_CONFIGURE_OPTIMIZE_FLAGS}"; then - MOZ_OPTIMIZE_FLAGS=${MOZ_CONFIGURE_OPTIMIZE_FLAGS} -fi - -AC_SUBST_LIST(MOZ_OPTIMIZE_FLAGS) - dnl ======================================================== dnl = Mac bundle name diff --git a/python/mozbuild/mozbuild/frontend/context.py b/python/mozbuild/mozbuild/frontend/context.py index 7062c4fb9a07..bef14792cef3 100644 --- a/python/mozbuild/mozbuild/frontend/context.py +++ b/python/mozbuild/mozbuild/frontend/context.py @@ -514,6 +514,11 @@ class TargetCompileFlags(BaseCompileFlags): def _optimize_flags(self): if not self._context.config.substs.get("MOZ_OPTIMIZE"): return [] + # js/src/* have their own optimization flag. + if self._context.relsrcdir == "js/src" or self._context.relsrcdir.startswith( + "js/src/" + ): + return self._context.config.substs.get("MOZ_JS_OPTIMIZE_FLAGS") return self._context.config.substs.get("MOZ_OPTIMIZE_FLAGS") def __setitem__(self, key, value):