# Copyright 2014 The Chromium 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/buildflag_header.gni")
import("//sandbox/features.gni")
import("//testing/libfuzzer/fuzzer_test.gni")

# Several targets want to include this header file. We separate it out
# here so multiple targets can depend on it.
source_set("sandbox_export") {
  sources = [ "sandbox_export.h" ]
}

source_set("common") {
  sources = [
    "constants.h",
    "features.cc",
    "features.h",
  ]

  deps = [
    "//base:base",
    "//sandbox:sandbox_buildflags",
  ]
}

# Meta-target that forwards to the proper platform one.
group("sandbox") {
  if (is_win) {
    public_deps = [ "//sandbox/win:sandbox" ]
  } else if (is_mac) {
    public_deps = [
      "//sandbox/mac:seatbelt",
      "//sandbox/mac:seatbelt_extension",
      "//sandbox/mac:system_services",
      "//sandbox/mac/mojom",
    ]
  } else if (is_linux || is_chromeos || is_android) {
    public_deps = [ "//sandbox/linux:sandbox" ]
  }
}

buildflag_header("sandbox_buildflags") {
  header = "sandbox_buildflags.h"
  flags = [
    "USE_SECCOMP_BPF=$use_seccomp_bpf",
    "DISABLE_SECCOMP_SSBD=$disable_seccomp_ssbd",
  ]
}

# This target must be here and not in win/ otherwise it would require a full
# parse of win/BUILD.gn which fails on non-Windows platforms.
#
# Although the code is Windows-based, the fuzzer is designed to work on Linux,
# so do not disable this fuzzer on non-Windows platforms.
fuzzer_test("sandbox_ipc_fuzzer") {
  sources = [
    "win/fuzzer/fuzzer_types.h",
    "win/fuzzer/sandbox_ipc_fuzzer.cc",
    "win/src/crosscall_server.cc",
    "win/src/ipc_args.cc",
  ]
  if (!is_win) {
    defines = [ "SANDBOX_FUZZ_TARGET" ]
  }
  deps = [
    ":sandbox",
    "//base",
  ]
  dict = "ipc.dict"
  libfuzzer_options = [ "max_len=1024" ]
}
