# 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.

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

  if (is_win) {
    defines += [ "NACL_WINDOWS=1" ]
  } else {
    defines += [ "NACL_WINDOWS=0" ]
  }

  if (is_linux) {
    defines += [ "NACL_LINUX=1" ]
  } else {
    defines += [ "NACL_LINUX=0" ]
  }

  if (is_mac) {
    defines += [ "NACL_OSX=1" ]
  } else {
    defines += [ "NACL_OSX=0" ]
  }

  if (current_cpu == "arm") {
    defines += [
      "NACL_BUILD_ARCH=arm",
      "NACL_BUILD_SUBARCH=32",
    ]
  }

  if (current_cpu == "mips") {
    defines += [
      "NACL_BUILD_ARCH=mips",
      "NACL_BUILD_SUBARCH=32",
    ]
  }

  if (current_cpu == "x86") {
    defines += [
      "NACL_BUILD_ARCH=x86",
      "NACL_BUILD_SUBARCH=32",
    ]
  }

  if (current_cpu == "x64") {
    defines += [
      "NACL_BUILD_ARCH=x86",
      "NACL_BUILD_SUBARCH=64",
    ]
  }
}

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" ]
  }
}
