diff options
Diffstat (limited to 'toolkit/library/moz.build')
-rw-r--r-- | toolkit/library/moz.build | 417 |
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] + ) |