moz.build (4692B)
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 with Files("**"): 8 BUG_COMPONENT = ("Firefox Build System", "General") 9 10 # This cannot be named "build" because of bug 922191. 11 SPHINX_TREES["buildsystem"] = "docs" 12 13 with Files("docs/**"): 14 SCHEDULES.exclusive = ["docs"] 15 16 if CONFIG["OS_ARCH"] == "WINNT": 17 DIRS += ["win32"] 18 else: 19 DIRS += ["unix"] 20 21 if CONFIG["MOZ_STDCXX_COMPAT"]: 22 DIRS += ["unix/stdc++compat"] 23 24 if CONFIG["RUSTC"]: 25 DIRS += ["rust/mozbuild"] 26 27 DEFINES["ACCEPTED_MAR_CHANNEL_IDS"] = CONFIG["ACCEPTED_MAR_CHANNEL_IDS"] 28 29 PYTHON_UNITTEST_MANIFESTS += [ 30 "compare-mozconfig/python.toml", 31 ] 32 33 PYTHON_UNITTEST_MANIFESTS += [ 34 "test/python/python.ini", 35 ] 36 37 if CONFIG["ENABLE_TESTS"] or CONFIG["MOZ_DMD"]: 38 FINAL_TARGET_FILES += ["/tools/rb/fix_stacks.py"] 39 40 if CONFIG["MOZ_DMD"]: 41 FINAL_TARGET_FILES += ["/memory/replace/dmd/dmd.py"] 42 43 # Put a useful .gdbinit and .gdbinit.py in $objdir/build, to be picked up 44 # automatically by GDB via either libxul.so-gdb.py or js-gdb.py. 45 OBJDIR_PP_FILES.build += [".gdbinit.py.in"] 46 OBJDIR_FILES.build += [".gdbinit.loader"] 47 OBJDIR_FILES.build += [".gdbinit"] 48 49 # Install the clang-cl runtime library for ASAN next to the binaries we produce. 50 if CONFIG["MOZ_ASAN"] and CONFIG["CC_TYPE"] == "clang-cl": 51 FINAL_TARGET_FILES += ["%" + CONFIG["MOZ_CLANG_RT_ASAN_LIB_PATH"]] 52 FINAL_TARGET_FILES += [ 53 "%" + CONFIG["MOZ_CLANG_RT_ASAN_LIB_PATH"].replace(".dll", ".pdb") 54 ] 55 56 if CONFIG["MOZ_ASAN"] or CONFIG["MOZ_UBSAN"] or CONFIG["MOZ_TSAN"]: 57 DIRS += ["sanitizers"] 58 59 # Install the clang runtime library for ASAN next to the binaries we produce. 60 if CONFIG["MOZ_WIDGET_TOOLKIT"] == "android" and CONFIG["MOZ_ASAN"]: 61 FINAL_TARGET_FILES += ["%" + CONFIG["MOZ_CLANG_RT_ASAN_LIB_PATH"]] 62 63 if CONFIG["MOZ_WIDGET_TOOLKIT"] != "android" and CONFIG["LLVM_SYMBOLIZER"]: 64 FINAL_TARGET_FILES += ["/" + CONFIG["LLVM_SYMBOLIZER"]] 65 66 if CONFIG["MOZ_APP_BASENAME"]: 67 appini_defines = { 68 "TOPOBJDIR": TOPOBJDIR, 69 } 70 71 for var in ( 72 "GRE_MILESTONE", 73 "MOZ_APP_VERSION", 74 "MOZ_APP_BASENAME", 75 "MOZ_APP_VENDOR", 76 "MOZ_APP_ID", 77 "MAR_CHANNEL_ID", 78 "MOZ_APP_REMOTINGNAME", 79 "MOZ_CRASHREPORTER_URL", 80 "BB_UPDATER_URL", 81 ): 82 appini_defines[var] = CONFIG[var] 83 84 if CONFIG["MOZ_APP_DISPLAYNAME"] != CONFIG["MOZ_APP_BASENAME"]: 85 appini_defines["MOZ_APP_DISPLAYNAME"] = CONFIG["MOZ_APP_DISPLAYNAME"] 86 87 if CONFIG["MOZ_BUILD_APP"] == "browser": 88 appini_defines["MOZ_BUILD_APP_IS_BROWSER"] = True 89 90 if CONFIG["MOZ_APP_PROFILE"]: 91 appini_defines["MOZ_APP_PROFILE"] = CONFIG["MOZ_APP_PROFILE"] 92 93 for var in ("MOZ_CRASHREPORTER", "MOZ_PROFILE_MIGRATOR", "MOZ_UPDATER"): 94 if CONFIG[var]: 95 appini_defines[var] = True 96 97 appini_defines["MOZ_APPUPDATE_HOST"] = "aus5.mozilla.org" 98 if CONFIG["MOZ_APPUPDATE_HOST"]: 99 appini_defines["MOZ_APPUPDATE_HOST"] = CONFIG["MOZ_APPUPDATE_HOST"] 100 101 GeneratedFile( 102 "application.ini", 103 script="../python/mozbuild/mozbuild/action/preprocessor.py", 104 entry_point="generate", 105 inputs=["application.ini.in"], 106 flags=[ 107 "-D%s=%s" % (k, "1" if v is True else v) 108 for k, v in sorted(appini_defines.items(), key=lambda t: t[0]) 109 ], 110 ) 111 112 FINAL_TARGET_FILES += ["!application.ini"] 113 if ( 114 CONFIG["MOZ_WIDGET_TOOLKIT"] not in ("android", "cocoa") 115 and CONFIG["MOZ_UPDATER"] 116 ): 117 FINAL_TARGET_PP_FILES += ["update-settings.ini"] 118 119 GeneratedFile( 120 "application.ini.h", script="appini_header.py", inputs=["!application.ini"] 121 ) 122 123 124 # Put a .lldbinit in the bin directory and the objdir, to be picked up 125 # automatically by LLDB when we debug executables using either of those two 126 # directories as the current working directory. The .lldbinit file will 127 # load $(topsrcdir)/.lldbinit, which is where the actual debugging commands are. 128 DEFINES["topsrcdir"] = TOPSRCDIR 129 DEFINES["topobjdir"] = TOPOBJDIR 130 FINAL_TARGET_PP_FILES += [".lldbinit.in"] 131 OBJDIR_FILES += ["!/dist/bin/.lldbinit"] 132 133 # Put the .ycm_extra_conf.py file at the root of the objdir. It is used by 134 # the vim plugin YouCompleteMe. 135 OBJDIR_FILES += ["/.ycm_extra_conf.py"] 136 137 if CONFIG["MOZ_VALGRIND"]: 138 OBJDIR_FILES._valgrind += [ 139 "valgrind/cross-architecture.sup", 140 "valgrind/i386-pc-linux-gnu.sup", 141 "valgrind/x86_64-pc-linux-gnu.sup", 142 ]