finalize-flags.configure (2444B)
1 # -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- 2 # vim: set filetype=python: 3 # This Source Code Form is subject to the terms of the Mozilla Public 4 # License, v. 2.0. If a copy of the MPL was not distributed with this 5 # file, You can obtain one at http://mozilla.org/MPL/2.0/. 6 7 8 @depends( 9 "LDFLAGS", 10 linker_flags, 11 linker_ldflags, 12 pack_relative_relocs_flags, 13 android_flags, 14 thumb_option, 15 ) 16 @imports(_from="mozshellutil", _import="split") 17 def os_ldflags( 18 env_ldflags, 19 linker_flags, 20 linker_ldflags, 21 pack_relative_relocs_flags, 22 android_flags, 23 thumb_option, 24 ): 25 flags = [] 26 if android_flags: 27 flags.extend(android_flags.ldflags) 28 if thumb_option: 29 flags.extend(thumb_option) 30 if env_ldflags: 31 flags.extend(split(env_ldflags[0])) 32 flags.extend(linker_flags.ldflags) 33 if linker_ldflags: 34 flags.extend(linker_ldflags) 35 if pack_relative_relocs_flags: 36 flags.extend(pack_relative_relocs_flags) 37 return flags 38 39 40 set_config("OS_LDFLAGS", os_ldflags) 41 42 43 set_config("MOZ_OPTIMIZE_FLAGS", moz_optimize_flags, when=~js_build) 44 45 46 @depends( 47 linker_optimize_flags, 48 "MOZ_OPTIMIZE_FLAGS", 49 lto, 50 c_compiler, 51 ) 52 @imports(_from="mozshellutil", _import="split") 53 def moz_optimize_ldflags(linker_optimize_flags, env_optimize_flags, lto, c_compiler): 54 flags = [] 55 if linker_optimize_flags: 56 flags += linker_optimize_flags.ldflags 57 58 if env_optimize_flags: 59 flags += split(env_optimize_flags[0]) 60 61 # When using llvm-based LTO, non numeric optimization levels are 62 # not supported by the linker, so force the linker to use -O2 ( 63 # which doesn't influence the level compilation units are actually 64 # compiled at). 65 if lto and lto.enabled and c_compiler.type == "clang": 66 flags = ["-O2" if flag in ("-Oz", "-Os") else flag for flag in flags] 67 return flags 68 69 70 set_config("MOZ_OPTIMIZE_LDFLAGS", moz_optimize_ldflags) 71 72 73 @depends( 74 try_compile( 75 includes=["stdio.h"], 76 body='puts("demat");', 77 flags=moz_optimize_flags, 78 language="C", 79 check_msg="for valid C compiler optimization flags", 80 ), 81 moz_optimize_flags, 82 when=moz_optimize, 83 ) 84 @imports(_from="mozshellutil", _import="quote") 85 def check_optimization_flags(check_result, moz_optimize_flags): 86 if not check_result: 87 die(f"Invalid C compiler optimization flags: {quote(*moz_optimize_flags)}")