# Copyright (c) 2014 The Native Client Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/config/nacl/config.gni")

# Native Client Definitions
config("nacl_defines") {
  defines = [
    "_DEFAULT_SOURCE=1",
    "_BSD_SOURCE=1",
    "_POSIX_C_SOURCE=199506",
    "_XOPEN_SOURCE=600",
    "_GNU_SOURCE=1",
    "__STDC_LIMIT_MACROS=1",
  ]
}

config("nexe_defines") {
  defines = [
    "DYNAMIC_ANNOTATIONS_ENABLED=1",
    "DYNAMIC_ANNOTATIONS_PREFIX=NACL_",
  ]
}

# The base target that all targets in the NaCl build should depend on.
# This allows configs to be modified for everything in the NaCl build, even when
# the NaCl build is composed into the Chrome build.  (GN has no functionality to
# add flags to everythin in //native_client, having a base target works around
# that limitation.)
source_set("nacl_base") {
  public_configs = [ ":nacl_defines" ]
  if (current_os == "nacl") {
    public_configs += [ ":nexe_defines" ]
  }
}

config("compiler") {
  cflags = []

  if (is_clang && current_cpu != "pnacl") {
    # -no-integrated-as is the default in nacl-clang for historical
    # compatibility with inline assembly code and so forth.  But there
    # are no such cases in Chromium code, and -integrated-as is nicer in
    # general.  Moreover, the IRT must be built using LLVM's assembler
    # on x86-64 to preserve sandbox base address hiding.  Use it
    # everywhere for consistency (and possibly quicker builds).
    cflags += [ "-integrated-as" ]
  }

  asmflags = cflags
}

config("compiler_codegen") {
  cflags = []

  if (is_nacl_irt) {
    cflags += [
      # A debugger should be able to unwind IRT call frames.  This is
      # the default behavior on x86-64 and when compiling C++ with
      # exceptions enabled; the change is for the benefit of x86-32 C.
      # The frame pointer is unnecessary when unwind tables are used.
      "-fasynchronous-unwind-tables",
      "-fomit-frame-pointer",
    ]

    if (current_cpu == "x86") {
      # The x86-32 IRT needs to be callable with an under-aligned
      # stack; so we disable SSE instructions, which can fault on
      # misaligned addresses.  See
      # https://code.google.com/p/nativeclient/issues/detail?id=3935
      cflags += [
        "-mstackrealign",
        "-mno-sse",
      ]
    }
  }

  asmflags = cflags
}

config("irt_optimize") {
  cflags = [
    # Optimize for space, keep the IRT nexe small.
    "-Os",

    # These are omitted from non-IRT libraries to keep the libraries
    # themselves small.
    "-ffunction-sections",
    "-fdata-sections",
  ]

  ldflags = [ "-Wl,--gc-sections" ]
}
