mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-24 02:35:41 +00:00
f9be0e1c7f
The `freestanding` library is built with specific compiler flags to signify that it is indeed freestanding code. That is, it does not depend on a standard library. One of the requirements of freestanding code is that the toolchain still expects implementations of `memcpy`, `memmove`, `memcmp`, and `memset`. I did briefly implement my own naive versions of these functions, but that solution is less than ideal since the implementations must be `extern` and are thus picked up by the entire `firefox.exe` binary. This denies the rest of `firefox.exe` the benefit of optimized implementations. On Windows, the sandbox is linked into `firefox.exe`, so we cannot just shrug and assume that naive implementations will not have any effect on anything. There are, however, optimized implementations of these functions that are exported by `ntdll.dll`. They are not included in the `ntdll.lib` that is included in the Windows SDK. Using `llvm-dlltool`, we can build an import library containing the missing entries and then add that library to `OS_LIBS`. Depends on D43156 Differential Revision: https://phabricator.services.mozilla.com/D43157 --HG-- extra : moz-landing-system : lando
150 lines
3.9 KiB
Python
150 lines
3.9 KiB
Python
# -*- 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/.
|
|
|
|
with Files("**"):
|
|
BUG_COMPONENT = ("Firefox", "General")
|
|
|
|
with Files("blocklist.xml"):
|
|
BUG_COMPONENT = ("Toolkit", "Blocklist Implementation")
|
|
|
|
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("profile/channel-prefs.js"):
|
|
BUG_COMPONENT = ("Firefox", "Installer")
|
|
with Files("profile/firefox.js"):
|
|
BUG_COMPONENT = ("Firefox", "General")
|
|
|
|
if CONFIG['MOZ_NO_PIE_COMPAT']:
|
|
GeckoProgram(CONFIG['MOZ_APP_NAME'] + '-bin')
|
|
|
|
DIRS += ['no-pie']
|
|
else:
|
|
GeckoProgram(CONFIG['MOZ_APP_NAME'])
|
|
|
|
SOURCES += [
|
|
'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',
|
|
]
|
|
|
|
if CONFIG['ENABLE_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'
|
|
DEFINES['MOZ_PHOENIX'] = True
|
|
DIRS += [
|
|
'winlauncher',
|
|
]
|
|
USE_LIBS += [
|
|
'winlauncher',
|
|
]
|
|
LOCAL_INCLUDES += [
|
|
'/browser/app/winlauncher',
|
|
]
|
|
DELAYLOAD_DLLS += [
|
|
'oleaut32.dll',
|
|
'ole32.dll',
|
|
'rpcrt4.dll',
|
|
'version.dll',
|
|
]
|
|
|
|
if CONFIG['CC_TYPE'] == 'clang-cl':
|
|
libpath_flag = '-LIBPATH:'
|
|
else:
|
|
libpath_flag = '-L'
|
|
|
|
WIN32_EXE_LDFLAGS += [
|
|
libpath_flag + OBJDIR + '/winlauncher/freestanding',
|
|
]
|
|
|
|
if CONFIG['MOZ_SANDBOX'] and CONFIG['OS_ARCH'] == 'Darwin':
|
|
USE_LIBS += [
|
|
'mozsandbox',
|
|
]
|
|
|
|
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',
|
|
]
|
|
|
|
DELAYLOAD_DLLS += [
|
|
'winmm.dll',
|
|
'user32.dll',
|
|
]
|
|
|
|
# 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['MOZ_LINKER']:
|
|
OS_LIBS += CONFIG['MOZ_ZLIB_LIBS']
|
|
|
|
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.get('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'):
|
|
DEFINES[icon.upper() + '_ICO'] = '"%s/%s/%s.ico"' % (
|
|
TOPSRCDIR, CONFIG['MOZ_BRANDING_DIRECTORY'], icon)
|