forked from mirrors/gecko-dev
		
	 f9be0e1c7f
			
		
	
	
		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
		
			
				
	
	
		
			149 lines
		
	
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			149 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)
 |