1*6777b538SAndroid Build Coastguard Worker# Copyright (c) 2014 The Native Client Authors. All rights reserved. 2*6777b538SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker# found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Workerimport("//build/config/nacl/config.gni") 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard Worker# Native Client Definitions 8*6777b538SAndroid Build Coastguard Workerconfig("nacl_defines") { 9*6777b538SAndroid Build Coastguard Worker if (is_linux || is_chromeos || is_android || is_nacl) { 10*6777b538SAndroid Build Coastguard Worker defines = [ 11*6777b538SAndroid Build Coastguard Worker "_POSIX_C_SOURCE=199506", 12*6777b538SAndroid Build Coastguard Worker "_XOPEN_SOURCE=600", 13*6777b538SAndroid Build Coastguard Worker "_GNU_SOURCE=1", 14*6777b538SAndroid Build Coastguard Worker "__STDC_LIMIT_MACROS=1", 15*6777b538SAndroid Build Coastguard Worker ] 16*6777b538SAndroid Build Coastguard Worker } else if (is_win) { 17*6777b538SAndroid Build Coastguard Worker defines = [ "__STDC_LIMIT_MACROS=1" ] 18*6777b538SAndroid Build Coastguard Worker } 19*6777b538SAndroid Build Coastguard Worker 20*6777b538SAndroid Build Coastguard Worker if (current_cpu == "pnacl") { 21*6777b538SAndroid Build Coastguard Worker # TODO: Remove the following definition once NACL_BUILD_ARCH and 22*6777b538SAndroid Build Coastguard Worker # NACL_BUILD_SUBARCH are defined by the PNaCl toolchain. 23*6777b538SAndroid Build Coastguard Worker defines += [ "NACL_BUILD_ARCH=pnacl" ] 24*6777b538SAndroid Build Coastguard Worker } 25*6777b538SAndroid Build Coastguard Worker} 26*6777b538SAndroid Build Coastguard Worker 27*6777b538SAndroid Build Coastguard Workerconfig("nexe_defines") { 28*6777b538SAndroid Build Coastguard Worker defines = [ 29*6777b538SAndroid Build Coastguard Worker "DYNAMIC_ANNOTATIONS_ENABLED=1", 30*6777b538SAndroid Build Coastguard Worker "DYNAMIC_ANNOTATIONS_PREFIX=NACL_", 31*6777b538SAndroid Build Coastguard Worker ] 32*6777b538SAndroid Build Coastguard Worker} 33*6777b538SAndroid Build Coastguard Worker 34*6777b538SAndroid Build Coastguard Workerconfig("nacl_warnings") { 35*6777b538SAndroid Build Coastguard Worker if (is_win) { 36*6777b538SAndroid Build Coastguard Worker # Some NaCl code uses forward declarations of static const variables, 37*6777b538SAndroid Build Coastguard Worker # with initialized definitions later on. (The alternative would be 38*6777b538SAndroid Build Coastguard Worker # many, many more forward declarations of everything used in that 39*6777b538SAndroid Build Coastguard Worker # const variable's initializer before the definition.) The Windows 40*6777b538SAndroid Build Coastguard Worker # compiler is too stupid to notice that there is an initializer later 41*6777b538SAndroid Build Coastguard Worker # in the file, and warns about the forward declaration. 42*6777b538SAndroid Build Coastguard Worker cflags = [ "/wd4132" ] 43*6777b538SAndroid Build Coastguard Worker } 44*6777b538SAndroid Build Coastguard Worker} 45*6777b538SAndroid Build Coastguard Worker 46*6777b538SAndroid Build Coastguard Workerconfig("nacl_static_libstdc++") { 47*6777b538SAndroid Build Coastguard Worker # The sysroot of linux x86 bots can have a different version of libstdc++ 48*6777b538SAndroid Build Coastguard Worker # than the one that is on the bots natively. Linking dynamically against 49*6777b538SAndroid Build Coastguard Worker # libstdc++ can then lead to linking against symbols that are not found when 50*6777b538SAndroid Build Coastguard Worker # running the executable. 51*6777b538SAndroid Build Coastguard Worker # Therefore, link statically instead. 52*6777b538SAndroid Build Coastguard Worker if (is_linux && current_cpu == "x86") { 53*6777b538SAndroid Build Coastguard Worker ldflags = [ "-static-libstdc++" ] 54*6777b538SAndroid Build Coastguard Worker } 55*6777b538SAndroid Build Coastguard Worker} 56*6777b538SAndroid Build Coastguard Worker 57*6777b538SAndroid Build Coastguard Worker# The base target that all targets in the NaCl build should depend on. 58*6777b538SAndroid Build Coastguard Worker# This allows configs to be modified for everything in the NaCl build, even when 59*6777b538SAndroid Build Coastguard Worker# the NaCl build is composed into the Chrome build. (GN has no functionality to 60*6777b538SAndroid Build Coastguard Worker# add flags to everything in //native_client, having a base target works around 61*6777b538SAndroid Build Coastguard Worker# that limitation.) 62*6777b538SAndroid Build Coastguard Workersource_set("nacl_base") { 63*6777b538SAndroid Build Coastguard Worker public_configs = [ 64*6777b538SAndroid Build Coastguard Worker ":nacl_defines", 65*6777b538SAndroid Build Coastguard Worker ":nacl_warnings", 66*6777b538SAndroid Build Coastguard Worker ":nacl_static_libstdc++", 67*6777b538SAndroid Build Coastguard Worker ] 68*6777b538SAndroid Build Coastguard Worker if (current_os == "nacl") { 69*6777b538SAndroid Build Coastguard Worker public_configs += [ ":nexe_defines" ] 70*6777b538SAndroid Build Coastguard Worker } 71*6777b538SAndroid Build Coastguard Worker} 72*6777b538SAndroid Build Coastguard Worker 73*6777b538SAndroid Build Coastguard Workerconfig("compiler") { 74*6777b538SAndroid Build Coastguard Worker configs = [] 75*6777b538SAndroid Build Coastguard Worker cflags = [] 76*6777b538SAndroid Build Coastguard Worker ldflags = [] 77*6777b538SAndroid Build Coastguard Worker libs = [] 78*6777b538SAndroid Build Coastguard Worker 79*6777b538SAndroid Build Coastguard Worker if (is_clang && current_cpu != "pnacl") { 80*6777b538SAndroid Build Coastguard Worker # -no-integrated-as is the default in nacl-clang for historical 81*6777b538SAndroid Build Coastguard Worker # compatibility with inline assembly code and so forth. But there 82*6777b538SAndroid Build Coastguard Worker # are no such cases in Chromium code, and -integrated-as is nicer in 83*6777b538SAndroid Build Coastguard Worker # general. Moreover, the IRT must be built using LLVM's assembler 84*6777b538SAndroid Build Coastguard Worker # on x86-64 to preserve sandbox base address hiding. Use it 85*6777b538SAndroid Build Coastguard Worker # everywhere for consistency (and possibly quicker builds). 86*6777b538SAndroid Build Coastguard Worker cflags += [ "-integrated-as" ] 87*6777b538SAndroid Build Coastguard Worker } 88*6777b538SAndroid Build Coastguard Worker 89*6777b538SAndroid Build Coastguard Worker asmflags = cflags 90*6777b538SAndroid Build Coastguard Worker} 91*6777b538SAndroid Build Coastguard Worker 92*6777b538SAndroid Build Coastguard Workerconfig("compiler_codegen") { 93*6777b538SAndroid Build Coastguard Worker cflags = [] 94*6777b538SAndroid Build Coastguard Worker 95*6777b538SAndroid Build Coastguard Worker if (is_nacl_irt) { 96*6777b538SAndroid Build Coastguard Worker cflags += [ 97*6777b538SAndroid Build Coastguard Worker # A debugger should be able to unwind IRT call frames. This is 98*6777b538SAndroid Build Coastguard Worker # the default behavior on x86-64 and when compiling C++ with 99*6777b538SAndroid Build Coastguard Worker # exceptions enabled; the change is for the benefit of x86-32 C. 100*6777b538SAndroid Build Coastguard Worker # The frame pointer is unnecessary when unwind tables are used. 101*6777b538SAndroid Build Coastguard Worker "-fasynchronous-unwind-tables", 102*6777b538SAndroid Build Coastguard Worker "-fomit-frame-pointer", 103*6777b538SAndroid Build Coastguard Worker ] 104*6777b538SAndroid Build Coastguard Worker 105*6777b538SAndroid Build Coastguard Worker if (current_cpu == "x86") { 106*6777b538SAndroid Build Coastguard Worker # The x86-32 IRT needs to be callable with an under-aligned 107*6777b538SAndroid Build Coastguard Worker # stack; so we disable SSE instructions, which can fault on 108*6777b538SAndroid Build Coastguard Worker # misaligned addresses. See 109*6777b538SAndroid Build Coastguard Worker # https://code.google.com/p/nativeclient/issues/detail?id=3935 110*6777b538SAndroid Build Coastguard Worker cflags += [ 111*6777b538SAndroid Build Coastguard Worker "-mstackrealign", 112*6777b538SAndroid Build Coastguard Worker "-mno-sse", 113*6777b538SAndroid Build Coastguard Worker ] 114*6777b538SAndroid Build Coastguard Worker } 115*6777b538SAndroid Build Coastguard Worker } 116*6777b538SAndroid Build Coastguard Worker 117*6777b538SAndroid Build Coastguard Worker asmflags = cflags 118*6777b538SAndroid Build Coastguard Worker} 119*6777b538SAndroid Build Coastguard Worker 120*6777b538SAndroid Build Coastguard Workerconfig("irt_optimize") { 121*6777b538SAndroid Build Coastguard Worker cflags = [ 122*6777b538SAndroid Build Coastguard Worker # Optimize for space, keep the IRT nexe small. 123*6777b538SAndroid Build Coastguard Worker "-Os", 124*6777b538SAndroid Build Coastguard Worker 125*6777b538SAndroid Build Coastguard Worker # These are omitted from non-IRT libraries to keep the libraries 126*6777b538SAndroid Build Coastguard Worker # themselves small. 127*6777b538SAndroid Build Coastguard Worker "-ffunction-sections", 128*6777b538SAndroid Build Coastguard Worker "-fdata-sections", 129*6777b538SAndroid Build Coastguard Worker ] 130*6777b538SAndroid Build Coastguard Worker 131*6777b538SAndroid Build Coastguard Worker ldflags = [ "-Wl,--gc-sections" ] 132*6777b538SAndroid Build Coastguard Worker} 133