| OLD | NEW |
| 1 #!/usr/bin/python | 1 #!/usr/bin/python |
| 2 # Copyright (c) 2013 The Native Client Authors. All rights reserved. | 2 # Copyright (c) 2013 The Native Client Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 """Recipes for PNaCl toolchain packages. | 6 """Recipes for PNaCl toolchain packages. |
| 7 | 7 |
| 8 Recipes consist of specially-structured dictionaries, with keys for package | 8 Recipes consist of specially-structured dictionaries, with keys for package |
| 9 name, type, commands to execute, etc. The structure is documented in the | 9 name, type, commands to execute, etc. The structure is documented in the |
| 10 PackageBuilder docstring in toolchain_main.py. | 10 PackageBuilder docstring in toolchain_main.py. |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 86 BUILD_CROSS_MINGW = False | 86 BUILD_CROSS_MINGW = False |
| 87 # Path to the mingw cross-compiler libs on Ubuntu | 87 # Path to the mingw cross-compiler libs on Ubuntu |
| 88 CROSS_MINGW_LIBPATH = '/usr/lib/gcc/i686-w64-mingw32/4.6' | 88 CROSS_MINGW_LIBPATH = '/usr/lib/gcc/i686-w64-mingw32/4.6' |
| 89 # Path and version of the native mingw compiler to be installed on Windows hosts | 89 # Path and version of the native mingw compiler to be installed on Windows hosts |
| 90 MINGW_PATH = os.path.join(NACL_DIR, 'mingw32') | 90 MINGW_PATH = os.path.join(NACL_DIR, 'mingw32') |
| 91 MINGW_VERSION = 'i686-w64-mingw32-4.8.1' | 91 MINGW_VERSION = 'i686-w64-mingw32-4.8.1' |
| 92 | 92 |
| 93 CHROME_CLANG = os.path.join(os.path.dirname(NACL_DIR), 'third_party', | 93 CHROME_CLANG = os.path.join(os.path.dirname(NACL_DIR), 'third_party', |
| 94 'llvm-build', 'Release+Asserts', 'bin', 'clang') | 94 'llvm-build', 'Release+Asserts', 'bin', 'clang') |
| 95 CHROME_CLANGXX = CHROME_CLANG + '++' | 95 CHROME_CLANGXX = CHROME_CLANG + '++' |
| 96 CHROME_LIBCXX_STATIC = os.path.join(os.path.dirname(NACL_DIR), 'third_party', |
| 97 'libc++-static') |
| 96 | 98 |
| 97 # Required SDK version and target version for Mac builds. | 99 # Required SDK version and target version for Mac builds. |
| 98 # See MAC_SDK_FLAGS, below. | 100 # See MAC_SDK_FLAGS, below. |
| 99 MAC_SDK_MIN = '10.10' | 101 MAC_SDK_MIN = '10.10' |
| 100 MAC_DEPLOYMENT_TARGET = '10.6' | 102 MAC_DEPLOYMENT_TARGET = '10.6' |
| 101 | 103 |
| 102 # Redirectors are small shims acting like sym links with optional arguments. | 104 # Redirectors are small shims acting like sym links with optional arguments. |
| 103 # For mac/linux we simply use a shell script which create small redirector | 105 # For mac/linux we simply use a shell script which create small redirector |
| 104 # shell scripts. For windows we compile an executable which redirects to | 106 # shell scripts. For windows we compile an executable which redirects to |
| 105 # the target using a compiled in table. | 107 # the target using a compiled in table. |
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 278 result['CXXFLAGS'] += ['-stdlib=libc++'] | 280 result['CXXFLAGS'] += ['-stdlib=libc++'] |
| 279 if TripleIsLinux(host): | 281 if TripleIsLinux(host): |
| 280 # Use our own libc++ on Linux. | 282 # Use our own libc++ on Linux. |
| 281 # TODO(dschuff): Get the Chrome clang maintainers to build libc++ for | 283 # TODO(dschuff): Get the Chrome clang maintainers to build libc++ for |
| 282 # Linux too and use that. | 284 # Linux too and use that. |
| 283 result['CXXFLAGS'] += ['-I%(' + FlavoredName('abs_libcxx', host, opts) + | 285 result['CXXFLAGS'] += ['-I%(' + FlavoredName('abs_libcxx', host, opts) + |
| 284 ')s/include/c++/v1'] | 286 ')s/include/c++/v1'] |
| 285 result['LDFLAGS'] += ['-L%(' + FlavoredName('abs_libcxx', | 287 result['LDFLAGS'] += ['-L%(' + FlavoredName('abs_libcxx', |
| 286 host, opts) + ')s/lib'] | 288 host, opts) + ')s/lib'] |
| 287 deps.append(FlavoredName('libcxx', host, opts)) | 289 deps.append(FlavoredName('libcxx', host, opts)) |
| 290 elif TripleIsMac(host): |
| 291 result['LDFLAGS'] += ['-L' + CHROME_LIBCXX_STATIC] |
| 288 | 292 |
| 289 result['CFLAGS'] += extra_cc_flags | 293 result['CFLAGS'] += extra_cc_flags |
| 290 result['CXXFLAGS'] += extra_cc_flags | 294 result['CXXFLAGS'] += extra_cc_flags |
| 291 | 295 |
| 292 return result, deps | 296 return result, deps |
| 293 | 297 |
| 294 | 298 |
| 295 def ConfigureHostArchFlags(host, extra_cflags, options, extra_configure=None, | 299 def ConfigureHostArchFlags(host, extra_cflags, options, extra_configure=None, |
| 296 use_afl_fuzz=False): | 300 use_afl_fuzz=False): |
| 297 """Return flags passed to LLVM and binutils configure for compilers and | 301 """Return flags passed to LLVM and binutils configure for compilers and |
| (...skipping 25 matching lines...) Expand all Loading... |
| 323 configure_args.append('--build=' + host) | 327 configure_args.append('--build=' + host) |
| 324 elif is_cross: | 328 elif is_cross: |
| 325 configure_args.append('--host=' + host) | 329 configure_args.append('--host=' + host) |
| 326 | 330 |
| 327 extra_cxx_args = list(extra_cc_args) | 331 extra_cxx_args = list(extra_cc_args) |
| 328 | 332 |
| 329 hashables = [] | 333 hashables = [] |
| 330 | 334 |
| 331 if not options.gcc: | 335 if not options.gcc: |
| 332 cc, cxx, ar, ranlib = CompilersForHost(host) | 336 cc, cxx, ar, ranlib = CompilersForHost(host) |
| 333 hashables += [cc, cxx, ar, ranlib] | 337 hashables += [cc, cxx, ar, ranlib, CHROME_LIBCXX_STATIC] |
| 334 | 338 |
| 335 # Introduce afl-fuzz compiler wrappers if needed. | 339 # Introduce afl-fuzz compiler wrappers if needed. |
| 336 if use_afl_fuzz: | 340 if use_afl_fuzz: |
| 337 cc, cxx = AflFuzzCompilers(options.afl_fuzz_dir) | 341 cc, cxx = AflFuzzCompilers(options.afl_fuzz_dir) |
| 338 | 342 |
| 339 if ProgramPath('ccache'): | 343 if ProgramPath('ccache'): |
| 340 # Set CCACHE_CPP2 envvar, to avoid an error due to a strange | 344 # Set CCACHE_CPP2 envvar, to avoid an error due to a strange |
| 341 # ccache/clang++ interaction. Specifically, errors about | 345 # ccache/clang++ interaction. Specifically, errors about |
| 342 # "argument unused during compilation". | 346 # "argument unused during compilation". |
| 343 os.environ['CCACHE_CPP2'] = 'yes' | 347 os.environ['CCACHE_CPP2'] = 'yes' |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 396 | 400 |
| 397 Returns the tuple (flags, inputs, deps) where 'flags' is a list of | 401 Returns the tuple (flags, inputs, deps) where 'flags' is a list of |
| 398 arguments to cmake, 'inputs' is a dict of extra inputs to be hashed, | 402 arguments to cmake, 'inputs' is a dict of extra inputs to be hashed, |
| 399 and 'deps' is a list of extra dependencies for a component using these flags. | 403 and 'deps' is a list of extra dependencies for a component using these flags. |
| 400 """ | 404 """ |
| 401 cmake_flags = [] | 405 cmake_flags = [] |
| 402 if options.afl_fuzz_dir: | 406 if options.afl_fuzz_dir: |
| 403 cc, cxx = AflFuzzCompilers(options.afl_fuzz_dir) | 407 cc, cxx = AflFuzzCompilers(options.afl_fuzz_dir) |
| 404 else: | 408 else: |
| 405 cc, cxx, _, _ = CompilersForHost(host) | 409 cc, cxx, _, _ = CompilersForHost(host) |
| 406 hashables = [cc, cxx] | 410 hashables = [cc, cxx, CHROME_LIBCXX_STATIC] |
| 407 | 411 |
| 408 cmake_flags.extend(['-DCMAKE_C_COMPILER='+cc, '-DCMAKE_CXX_COMPILER='+cxx]) | 412 cmake_flags.extend(['-DCMAKE_C_COMPILER='+cc, '-DCMAKE_CXX_COMPILER='+cxx]) |
| 409 if ProgramPath('ccache'): | 413 if ProgramPath('ccache'): |
| 410 cmake_flags.extend(['-DSYSTEM_HAS_CCACHE=ON']) | 414 cmake_flags.extend(['-DSYSTEM_HAS_CCACHE=ON']) |
| 411 | 415 |
| 412 # There seems to be a bug in chrome clang where it exposes the msan interface | 416 # There seems to be a bug in chrome clang where it exposes the msan interface |
| 413 # (even when compiling without msan) but then does not link with an | 417 # (even when compiling without msan) but then does not link with an |
| 414 # msan-enabled compiler_rt, leaving references to __msan_allocated_memory | 418 # msan-enabled compiler_rt, leaving references to __msan_allocated_memory |
| 415 # undefined. | 419 # undefined. |
| 416 cmake_flags.append('-DHAVE_SANITIZER_MSAN_INTERFACE_H=FALSE') | 420 cmake_flags.append('-DHAVE_SANITIZER_MSAN_INTERFACE_H=FALSE') |
| (...skipping 937 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1354 SANDBOXED_TRANSLATOR_ARCHES)) | 1358 SANDBOXED_TRANSLATOR_ARCHES)) |
| 1355 | 1359 |
| 1356 tb = toolchain_main.PackageBuilder(packages, | 1360 tb = toolchain_main.PackageBuilder(packages, |
| 1357 upload_packages, | 1361 upload_packages, |
| 1358 leftover_args) | 1362 leftover_args) |
| 1359 return tb.Main() | 1363 return tb.Main() |
| 1360 | 1364 |
| 1361 | 1365 |
| 1362 if __name__ == '__main__': | 1366 if __name__ == '__main__': |
| 1363 sys.exit(main()) | 1367 sys.exit(main()) |
| OLD | NEW |