1# Copyright 2014 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5import("//build/config/mac/mac_sdk.gni")
6import("//testing/test.gni")
7
8generate_stubs_script = "//tools/generate_stubs/generate_stubs.py"
9generate_stubs_header = "xpc_stubs_header.fragment"
10generate_stubs_sig_public = "xpc_stubs.sig"
11generate_stubs_sig_private = "xpc_private_stubs.sig"
12generate_stubs_project = "sandbox/mac"
13generate_stubs_output_stem = "xpc_stubs"
14
15action("generate_stubs") {
16  script = generate_stubs_script
17  sources = [
18    generate_stubs_sig_private,
19    generate_stubs_sig_public,
20  ]
21  inputs = [
22    generate_stubs_header,
23  ]
24  outputs = [
25    "$target_gen_dir/$generate_stubs_output_stem.cc",
26    "$target_gen_dir/$generate_stubs_output_stem.h",
27  ]
28  args = [
29    "-i",
30    rebase_path(target_gen_dir, root_build_dir),
31    "-o",
32    rebase_path(target_gen_dir, root_build_dir),
33    "-t",
34    "posix_stubs",
35    "-e",
36    rebase_path(generate_stubs_header, root_build_dir),
37    "-s",
38    generate_stubs_output_stem,
39    "-p",
40    generate_stubs_project,
41    "-x",
42    "SANDBOX_EXPORT",
43  ]
44  args += rebase_path(sources, root_build_dir)
45}
46
47component("sandbox") {
48  sources = [
49    "bootstrap_sandbox.cc",
50    "bootstrap_sandbox.h",
51    "launchd_interception_server.cc",
52    "launchd_interception_server.h",
53    "mach_message_server.cc",
54    "mach_message_server.h",
55    "message_server.h",
56    "os_compatibility.cc",
57    "os_compatibility.h",
58    "policy.cc",
59    "policy.h",
60    "pre_exec_delegate.cc",
61    "pre_exec_delegate.h",
62    "xpc.cc",
63    "xpc.h",
64    "xpc_message_server.cc",
65    "xpc_message_server.h",
66  ]
67
68  defines = [ "SANDBOX_IMPLEMENTATION" ]
69  libs = [ "bsm" ]
70
71  deps = [
72    "//base",
73  ]
74
75  # When the build SDK is 10.6, generate a dynamic stub loader. When the
76  # SDK is higher, then libxpc.dylib will be loaded automatically as part
77  # of libSystem, and only forward declarations of private symbols are
78  # necessary.
79  if (mac_sdk_version == "10.6") {
80    deps += [ ":generate_stubs" ]
81    sources += get_target_outputs(":generate_stubs")
82  }
83}
84
85test("sandbox_mac_unittests") {
86  sources = [
87    "bootstrap_sandbox_unittest.mm",
88    "policy_unittest.cc",
89    "xpc_message_server_unittest.cc",
90  ]
91
92  libs = [
93    "CoreFoundation.framework",
94    "Foundation.framework",
95  ]
96
97  deps = [
98    ":sandbox",
99    "//base",
100    "//base/test:run_all_unittests",
101    "//testing/gtest",
102  ]
103}
104