# This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. with Files("**"): BUG_COMPONENT = ("Firefox", "General") with Files("firefox.exe.manifest"): BUG_COMPONENT = ("Core", "Widget: Win32") with Files("module.ver"): BUG_COMPONENT = ("Core", "Widget: Win32") with Files("splash.rc"): BUG_COMPONENT = ("Core", "Widget: Win32") with Files("macversion.py"): BUG_COMPONENT = ("Core", "Widget: Cocoa") with Files("macbuild/**"): BUG_COMPONENT = ("Core", "Widget: Cocoa") with Files("moz.build"): BUG_COMPONENT = ("Firefox Build System", "General") with Files("Makefile.in"): BUG_COMPONENT = ("Firefox Build System", "General") with Files("generate_channel_prefs.py"): BUG_COMPONENT = ("Firefox Build System", "General") with Files("profile/channel-prefs.js"): BUG_COMPONENT = ("Firefox", "Installer") with Files("profile/firefox.js"): BUG_COMPONENT = ("Firefox", "General") DIRS += ["distribution"] if CONFIG["MOZ_WIDGET_TOOLKIT"] != "cocoa": GeneratedFile( "channel-prefs.js", script="generate_channel_prefs.py", inputs=["profile/channel-prefs.js"], ) FINAL_TARGET_FILES.defaults.pref += ["!channel-prefs.js"] if CONFIG["MOZ_MACBUNDLE_NAME"]: DIRS += ["macbuild/Contents"] browser_linkage = "standalone" if CONFIG["FUZZING_SNAPSHOT"] or CONFIG["AFLFUZZ"]: browser_linkage = "dependent" if CONFIG["MOZ_NO_PIE_COMPAT"]: GeckoProgram(CONFIG["MOZ_APP_NAME"] + "-bin", linkage=browser_linkage) DIRS += ["no-pie"] else: GeckoProgram(CONFIG["MOZ_APP_NAME"], linkage=browser_linkage) # Compile the application data (which changes every build due to the build ID) # in a separate tiny file so that nsBrowserApp.cpp doesn't need to be # recompiled on every no-op build. SOURCES += [ "ApplicationData.cpp", "nsBrowserApp.cpp", ] # Neither channel-prefs.js nor firefox.exe want to end up in dist/bin/browser. DIST_SUBDIR = "" LOCAL_INCLUDES += [ "!/build", "/toolkit/xre", "/xpcom/base", "/xpcom/build", ] if CONFIG["LIBFUZZER"]: USE_LIBS += ["fuzzer"] LOCAL_INCLUDES += [ "/tools/fuzzing/libfuzzer", ] elif CONFIG["FUZZING_INTERFACES"]: USE_LIBS += ["fuzzer-interface"] if CONFIG["MOZ_GECKODRIVER"]: DEFINES["MOZ_GECKODRIVER"] = True if CONFIG["CC_TYPE"] == "clang-cl": # Always enter a Windows program through wmain, whether or not we're # a console application. WIN32_EXE_LDFLAGS += ["-ENTRY:wmainCRTStartup"] if CONFIG["OS_ARCH"] == "WINNT": RCINCLUDE = "splash.rc" DIRS += [ "installation_dir_layout", "pbproxy", "winlauncher", ] USE_LIBS += [ "winlauncher", ] LOCAL_INCLUDES += [ "/browser/app/winlauncher", ] OS_LIBS += [ "advapi32", "shell32", "uuid", ] DELAYLOAD_DLLS += [ "advapi32.dll", "oleaut32.dll", "ole32.dll", "rpcrt4.dll", "shell32.dll", "version.dll", ] if CONFIG["CC_TYPE"] == "clang-cl": libpath_flag = "-LIBPATH:" else: libpath_flag = "-L" WIN32_EXE_LDFLAGS += [ libpath_flag + OBJDIR + "/winlauncher/freestanding", ] # Don't build firefox.exe with CETCOMPAT, because we need to be able to # only enable it for processes that are not using JIT in xul.dll. LINK_FLAGS["CETCOMPAT"] = [] if CONFIG["DESKTOP_LAUNCHER_ENABLED"]: DIRS += [ "desktop-launcher", ] if CONFIG["OS_ARCH"] == "Darwin": OS_LIBS += [ "-framework CoreFoundation", ] if CONFIG["MOZ_SANDBOX"] and CONFIG["OS_ARCH"] == "WINNT": # For sandbox includes and the include dependencies those have LOCAL_INCLUDES += [ "/security/sandbox/chromium", "/security/sandbox/chromium-shim", ] USE_LIBS += [ "sandbox_s", ] OS_LIBS += [ "shlwapi", "winmm", ] DELAYLOAD_DLLS += [ "winmm.dll", "user32.dll", "userenv.dll", "usp10.dll", ] if CONFIG["TARGET_OS"] in ("WINNT", "OSX"): DIRS += ["nmhproxy"] # Control the default heap size. # This is the heap returned by GetProcessHeap(). # As we use the CRT heap, the default size is too large and wastes VM. # # The default heap size is 1MB on Win32. # The heap will grow if need be. # # Set it to 256k. See bug 127069. if CONFIG["OS_ARCH"] == "WINNT" and CONFIG["CC_TYPE"] not in ("clang", "gcc"): LDFLAGS += ["/HEAP:0x40000"] DisableStlWrapping() if CONFIG["HAVE_CLOCK_MONOTONIC"]: OS_LIBS += CONFIG["REALTIME_LIBS"] if CONFIG["MOZ_LINUX_32_SSE2_STARTUP_ERROR"]: DEFINES["MOZ_LINUX_32_SSE2_STARTUP_ERROR"] = True COMPILE_FLAGS["OS_CXXFLAGS"] = [ f for f in COMPILE_FLAGS["OS_CXXFLAGS"] if not f.startswith("-march=") and f not in ("-msse", "-msse2", "-mfpmath=sse") ] + [ "-mno-sse", "-mno-sse2", "-mfpmath=387", ] for icon in ("firefox", "document", "newwindow", "newtab", "pbmode", "document_pdf"): DEFINES[icon.upper() + "_ICO"] = '"%s/%s/%s.ico"' % ( TOPSRCDIR, CONFIG["MOZ_BRANDING_DIRECTORY"], icon, ) # User-selectable custom launcher icons (see CustomIconManager.sys.mjs). Unlike # the branding icons above, these are channel-agnostic decorations, so they live # in a single shared location rather than per-branding-directory. The same # source file is also shipped into omni.ja via browser/components/shell/jar.mn # so the about:settings picker can render a preview of it. for icon in ( "retro2004", "retro2017", "pride", "minimal-dark", "minimal-light", "pixelated", "momo", "kit", ): # Hyphens aren't valid in the C macro name, so map e.g. minimal-dark -> # CUSTOM_MINIMAL_DARK_ICO. macro = "CUSTOM_" + icon.upper().replace("-", "_") + "_ICO" DEFINES[macro] = '"%s/browser/components/shell/icons/%s.ico"' % ( TOPSRCDIR, icon, ) if CONFIG["MOZ_ASAN"] or CONFIG["MOZ_DEBUG"]: WINCONSOLE = True else: WINCONSOLE = False