summaryrefslogtreecommitdiffstats
path: root/toolkit/library/moz.build
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/library/moz.build')
-rw-r--r--toolkit/library/moz.build417
1 files changed, 417 insertions, 0 deletions
diff --git a/toolkit/library/moz.build b/toolkit/library/moz.build
new file mode 100644
index 0000000000..0f9d7e95bf
--- /dev/null
+++ b/toolkit/library/moz.build
@@ -0,0 +1,417 @@
+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# 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/.
+
+
+@template
+def Libxul_defines():
+ LIBRARY_DEFINES["MOZILLA_INTERNAL_API"] = True
+ LIBRARY_DEFINES["IMPL_LIBXUL"] = True
+ if not CONFIG["JS_SHARED_LIBRARY"]:
+ LIBRARY_DEFINES["STATIC_EXPORTABLE_JS_API"] = True
+
+
+@template
+def Libxul(name, output_category=None):
+ if CONFIG["MOZ_WIDGET_TOOLKIT"] in ("cocoa", "uikit"):
+ # This is going to be a framework named "XUL", not an ordinary library named
+ # "libxul.dylib"
+ GeckoFramework(name, output_category=output_category, linkage=None)
+ SHARED_LIBRARY_NAME = "XUL"
+ else:
+ GeckoSharedLibrary(name, output_category=output_category, linkage=None)
+ SHARED_LIBRARY_NAME = "xul"
+
+ DELAYLOAD_DLLS += [
+ "avrt.dll",
+ "comdlg32.dll",
+ "credui.dll",
+ "d3d11.dll",
+ "D3DCompiler_47.dll",
+ "dhcpcsvc.dll",
+ "dnsapi.dll",
+ "dwmapi.dll",
+ "dxgi.dll",
+ "gdi32.dll",
+ "hid.dll",
+ "imm32.dll",
+ "iphlpapi.dll",
+ "msi.dll",
+ "msimg32.dll",
+ "netapi32.dll",
+ "ole32.dll",
+ "oleaut32.dll",
+ "secur32.dll",
+ "setupapi.dll",
+ "shell32.dll",
+ "shlwapi.dll",
+ "urlmon.dll",
+ "user32.dll",
+ "userenv.dll",
+ "usp10.dll",
+ "uxtheme.dll",
+ "wininet.dll",
+ "winmm.dll",
+ "winspool.drv",
+ "wtsapi32.dll",
+ ]
+
+ if CONFIG["ACCESSIBILITY"]:
+ DELAYLOAD_DLLS += ["oleacc.dll"]
+
+ if CONFIG["MOZ_WEBRTC"]:
+ DELAYLOAD_DLLS += ["msdmo.dll"]
+
+ if CONFIG["OS_ARCH"] == "WINNT":
+ DELAYLOAD_DLLS += [
+ "api-ms-win-core-winrt-l1-1-0.dll",
+ "api-ms-win-core-winrt-string-l1-1-0.dll",
+ ]
+
+ if CONFIG["OS_ARCH"] == "WINNT" and CONFIG["ACCESSIBILITY"]:
+ LOCAL_INCLUDES += ["!/accessible/interfaces/gecko/"]
+
+ if CONFIG["OS_ARCH"] == "WINNT":
+ LOCAL_INCLUDES += [
+ "/widget/windows",
+ "/xpcom/base",
+ ]
+ RCINCLUDE = "/toolkit/library/xulrunner.rc"
+
+ # Show a breakdown of linker time. (Too verbose for local builds.)
+ if CONFIG["CC_TYPE"] == "clang-cl" and not CONFIG["DEVELOPER_OPTIONS"]:
+ LDFLAGS += ["-time"]
+
+ Libxul_defines()
+
+ if CONFIG["MOZ_NEEDS_LIBATOMIC"]:
+ OS_LIBS += ["atomic"]
+
+ # TouchBar-related classes are only available in the 10.12.2 SDK and later.
+ # We need to weak link these classes until we've upgraded our SDK to at
+ # least 10.12.2.
+ # We're also linking against libresolv to solve bug 1367932.
+ if CONFIG["OS_ARCH"] == "Darwin":
+ LDFLAGS += ["-Wl,-U,_OBJC_CLASS_$_NSTouchBar"]
+ LDFLAGS += ["-Wl,-U,_OBJC_CLASS_$_NSSharingServicePickerTouchBarItem"]
+ LDFLAGS += ["-Wl,-U,_OBJC_METACLASS_$_NSTouchBar"]
+ LDFLAGS += ["-Wl,-U,_OBJC_CLASS_$_NSCustomTouchBarItem"]
+ LDFLAGS += ["-Wl,-U,_OBJC_CLASS_$_NSPopoverTouchBarItem"]
+ LDFLAGS += ["-lresolv"]
+
+ if CONFIG["MOZ_DEBUG_SYMBOLS"] and CONFIG["CC_TYPE"] == "clang-cl":
+ LDFLAGS += ["-NATVIS:%s/toolkit/library/gecko.natvis" % TOPSRCDIR]
+ if CONFIG["RUSTC_NATVIS_LDFLAGS"]:
+ LDFLAGS += CONFIG["RUSTC_NATVIS_LDFLAGS"]
+
+ if CONFIG["OS_ARCH"] == "Linux" and CONFIG["OS_TARGET"] != "Android":
+ GeneratedFile(
+ "symverscript",
+ script="/build/gen_symverscript.py",
+ inputs=["../symverscript.in"],
+ flags=["xul%s" % CONFIG["MOZILLA_SYMBOLVERSION"]],
+ )
+ SYMBOLS_FILE = "!symverscript"
+
+
+# The real libxul definition is in ./build/moz.build, but we define a
+# xul library here such that # FINAL_LIBRARY = 'xul' refers to here, which
+# is then linked to both build/libxul and gtest/libxul.
+Library("xul")
+
+STATIC_LIBRARY_NAME = "xul_s"
+
+# Use a FINAL_LIBRARY for Libxul_defines to propagate from there. They wouldn't
+# propagate from here.
+FINAL_LIBRARY = "xul-real"
+
+if CONFIG["OS_ARCH"] == "WINNT":
+ SOURCES += [
+ "nsDllMain.cpp",
+ ]
+
+LOCAL_INCLUDES += [
+ "/config",
+ # need widget/windows for resource.h (included from widget.rc)
+ "/widget/windows",
+]
+
+if CONFIG["OS_ARCH"] == "WINNT" and CONFIG["CC_TYPE"] not in ("clang", "gcc"):
+ LOCAL_INCLUDES += [
+ "/xpcom/base",
+ ]
+
+DIRS += [
+ "build",
+ "gtest",
+]
+
+if CONFIG["OS_ARCH"] == "WINNT":
+ DIRS += ["dummydll"]
+
+# js needs to come after xul for now, because it is an archive and its content
+# is discarded when it comes first.
+USE_LIBS += [
+ "js",
+]
+
+USE_LIBS += [
+ "lgpllibs",
+ "nspr",
+ "nss",
+ "psshparser",
+ "sqlite",
+ "zlib",
+]
+
+if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
+ # The mozgtk library is a workaround that makes Gtk+ use libwayland-client
+ # instead of mozwayland. The reason it works is that by being a dependency
+ # of libxul, mozgtk appears in dependentlibs.list, preceding mozwayland
+ # (which is important and guaranteed by the USE_LIBS order in this file).
+ # That, in turn, makes firefox dlopen() mozgtk before mozwayland, which
+ # will trigger the loading of the Gtk+ libraries (mozgtk depending on them).
+ # Those libraries, if they depend on libwayland-client, will use the symbols
+ # from libwayland-client because mozwayland is not loaded yet.
+ # When eventually libxul is loaded after both mozgtk and mozwayland, it will
+ # get symbols from libwayland-client too.
+ # In the case where Gtk+ doesn't have wayland support, libwayland-client is
+ # not loaded, and libxul ends up using the mozwayland symbols.
+ USE_LIBS += [
+ "mozgtk",
+ ]
+ OS_LIBS += CONFIG["MOZ_GTK3_LIBS"]
+
+if CONFIG["MOZ_WAYLAND"]:
+ USE_LIBS += [
+ "mozwayland",
+ ]
+
+if CONFIG["MOZ_JPROF"]:
+ USE_LIBS += [
+ "jprof",
+ ]
+
+if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk" or CONFIG["MOZ_TREE_FREETYPE"]:
+ USE_LIBS += [
+ "freetype",
+ ]
+
+if CONFIG["MOZ_WEBRTC"]:
+ if CONFIG["OS_TARGET"] == "WINNT":
+ OS_LIBS += [
+ "secur32",
+ "iphlpapi",
+ "strmiids",
+ "dmoguids",
+ "wmcodecdspuuid",
+ "amstrmid",
+ "msdmo",
+ "wininet",
+ ]
+
+if CONFIG["MOZ_WIDGET_TOOLKIT"] == "cocoa":
+ OS_LIBS += [
+ "-framework Foundation",
+ "-framework CoreFoundation",
+ "-framework CoreLocation",
+ "-framework QuartzCore",
+ "-framework Carbon",
+ "-framework CoreAudio",
+ "-framework CoreVideo",
+ "-framework AudioToolbox",
+ "-framework AudioUnit",
+ "-framework AddressBook",
+ "-framework OpenGL",
+ "-framework Security",
+ "-framework ServiceManagement",
+ "-framework CoreServices",
+ "-framework ApplicationServices",
+ "-framework AppKit",
+ "-framework CoreMIDI",
+ "-framework SystemConfiguration",
+ "-framework AVFoundation",
+ "-framework CoreMedia",
+ "-framework IOKit",
+ "-F%s" % CONFIG["MACOS_PRIVATE_FRAMEWORKS_DIR"],
+ "-framework CoreUI",
+ "-framework CoreSymbolication",
+ "cups",
+ ]
+
+if CONFIG["MOZ_WIDGET_TOOLKIT"] == "uikit":
+ OS_LIBS += [
+ "-framework Foundation",
+ "-framework CoreFoundation",
+ "-framework CoreGraphics",
+ "-framework CoreText",
+ "-framework AVFoundation",
+ "-framework AudioToolbox",
+ "-framework CoreMedia",
+ "-framework CoreVideo",
+ "-framework OpenGLES",
+ "-framework QuartzCore",
+ ]
+
+if CONFIG["MOZ_WMF"]:
+ OS_LIBS += [
+ "mfuuid",
+ "wmcodecdspuuid",
+ "strmiids",
+ ]
+
+if CONFIG["OS_ARCH"] == "FreeBSD":
+ OS_LIBS += [
+ "util",
+ ]
+
+if CONFIG["OS_ARCH"] == "WINNT":
+ OS_LIBS += [
+ "crypt32",
+ "gdi32",
+ "shell32",
+ "ntdll",
+ "ole32",
+ "version",
+ "winspool",
+ "userenv",
+ "uuid",
+ ]
+
+if CONFIG["OS_ARCH"] == "Linux" and CONFIG["OS_TARGET"] != "Android":
+ OS_LIBS += [
+ "rt",
+ ]
+
+if CONFIG["MOZ_ANDROID_GOOGLE_VR"]:
+ OS_LIBS += [
+ "-L%s" % CONFIG["MOZ_ANDROID_GOOGLE_VR_LIBS"],
+ "-lgvr",
+ ]
+
+if CONFIG["MOZ_SYSTEM_JPEG"]:
+ OS_LIBS += CONFIG["MOZ_JPEG_LIBS"]
+
+if CONFIG["MOZ_SYSTEM_PNG"]:
+ OS_LIBS += CONFIG["MOZ_PNG_LIBS"]
+
+if CONFIG["MOZ_SYSTEM_WEBP"]:
+ OS_LIBS += CONFIG["MOZ_WEBP_LIBS"]
+
+if CONFIG["MOZ_SYSTEM_LIBEVENT"]:
+ OS_LIBS += CONFIG["MOZ_LIBEVENT_LIBS"]
+
+if CONFIG["MOZ_SYSTEM_LIBVPX"]:
+ OS_LIBS += CONFIG["MOZ_LIBVPX_LIBS"]
+
+if not CONFIG["MOZ_TREE_PIXMAN"]:
+ OS_LIBS += CONFIG["MOZ_PIXMAN_LIBS"]
+
+if CONFIG["HAVE_CLOCK_MONOTONIC"]:
+ OS_LIBS += CONFIG["REALTIME_LIBS"]
+
+OS_LIBS += CONFIG["ICONV_LIBS"]
+
+if CONFIG["OS_ARCH"] == "OpenBSD":
+ OS_LIBS += [
+ "sndio",
+ ]
+
+if CONFIG["MOZ_ENABLE_DBUS"]:
+ OS_LIBS += CONFIG["MOZ_DBUS_GLIB_LIBS"]
+
+if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk" and CONFIG["COMPILE_ENVIRONMENT"]:
+ OS_LIBS += [l for l in CONFIG["MOZ_GTK3_LIBS"] if l not in ("-lgtk-3", "-lgdk-3")]
+ OS_LIBS += CONFIG["MOZ_X11_LIBS"]
+ OS_LIBS += CONFIG["MOZ_PANGO_LIBS"]
+
+if CONFIG["MOZ_ENABLE_LIBPROXY"]:
+ OS_LIBS += CONFIG["MOZ_LIBPROXY_LIBS"]
+
+if CONFIG["OS_ARCH"] == "FreeBSD":
+ OS_LIBS += [
+ "util",
+ ]
+
+if CONFIG["OS_ARCH"] == "Darwin":
+ OS_LIBS += [
+ # Link to Metal as required by the Metal gfx-hal backend
+ "-weak_framework Metal",
+ "-weak_framework MediaPlayer",
+ ]
+
+
+if CONFIG["OS_ARCH"] == "WINNT":
+ OS_LIBS += [
+ "shell32",
+ "ole32",
+ "version",
+ "winspool",
+ "comdlg32",
+ "imm32",
+ "msimg32",
+ "netapi32",
+ "shlwapi",
+ "ws2_32",
+ "dnsapi",
+ "dwmapi",
+ "iphlpapi",
+ "uxtheme",
+ "setupapi",
+ "secur32",
+ "sensorsapi",
+ "portabledeviceguids",
+ "wininet",
+ "wintrust",
+ "wtsapi32",
+ "locationapi",
+ "sapi",
+ "dxguid",
+ "dhcpcsvc",
+ # gfx-rs supports D3D11 and D3D12, but we are not linking to them implicitly
+ # "d3d11", # should be explicitly linked by gfx-backend-d3d11
+ #'d3d12', # should be explicitly linked by d3d12-rs
+ "d3dcompiler",
+ ]
+
+ if CONFIG["CC_TYPE"] == "clang-cl":
+ OS_LIBS += [
+ "runtimeobject",
+ ]
+
+ if CONFIG["ACCESSIBILITY"]:
+ OS_LIBS += [
+ "oleacc",
+ ]
+
+ # Prevent winapi-rs from statically linking
+ LIBRARY_DEFINES["WINAPI_NO_BUNDLED_LIBRARIES"] = True
+
+if CONFIG["MOZ_WIDGET_TOOLKIT"] == "windows":
+ OS_LIBS += [
+ "usp10",
+ "oleaut32",
+ ]
+
+# The buildid is refreshed on every (incremental) build. But we want to avoid
+# rebuilding libxul every time, so instead of having a source file that
+# #include's buildid.h, which would have a dependency on it, and that would
+# thus trigger make to rebuild everything, we generate a source with the
+# buildid hard coded in it. Then we make that source file depend on all the
+# objects files that constitute libxul, so that if any of the files linked into
+# libxul is rebuilt, we refresh the buildid and link it into libxul.
+
+if CONFIG["COMPILE_ENVIRONMENT"]:
+ SOURCES += ["!buildid.cpp"]
+ if CONFIG["MOZ_WIDGET_TOOLKIT"] in ("cocoa", "uikit"):
+ libxul_list = "XUL"
+ else:
+ libxul_list = "%sxul_%s" % (
+ CONFIG["DLL_PREFIX"],
+ CONFIG["DLL_SUFFIX"].lstrip(".").replace(".", "_"),
+ )
+ GeneratedFile(
+ "buildid.cpp", script="gen_buildid.py", inputs=["!build/%s.list" % libxul_list]
+ )