blob: a90d6543060ab296503ba262029888e50085e079 [file] [log] [blame]
Dan Willemsen2acbec52017-09-14 17:28:36 -07001// Copyright (C) 2015 The Android Open Source Project
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15// Common variables.
16// =========================================================
17libminijailSrcFiles = [
18 "bpf.c",
19 "libminijail.c",
20 "signal_handler.c",
21 "syscall_filter.c",
22 "syscall_wrapper.c",
23 "system.c",
24 "util.c",
25]
26
27unittestSrcFiles = [
28 "testrunner.cc",
29]
30
31minijailCommonLibraries = ["libcap"]
32
33cc_defaults {
34 name: "libminijail_flags",
35 cflags: [
36 "-DHAVE_SECUREBITS_H",
37 "-Wall",
38 "-Werror",
39 ],
40 target: {
41 darwin: {
42 enabled: false,
43 },
44 },
45}
46
47// Static library for generated code.
48// =========================================================
49cc_object {
50 name: "libminijail_gen_syscall_obj",
51 vendor_available: true,
52 srcs: ["gen_syscalls.c"],
53 cflags: [
54 "-dD",
55 "-E",
56 ],
57}
58
59cc_genrule {
60 name: "libminijail_gen_syscall",
61 vendor_available: true,
62 tool_files: ["gen_syscalls.sh"],
63 cmd: "$(location gen_syscalls.sh) $(in) $(out)",
64 srcs: [":libminijail_gen_syscall_obj"],
65 out: ["libsyscalls.c"],
66}
67
68cc_object {
69 name: "libminijail_gen_constants_obj",
70 vendor_available: true,
71 srcs: ["gen_constants.c"],
72 cflags: [
73 "-dD",
74 "-E",
75 ],
76}
77
78cc_genrule {
79 name: "libminijail_gen_constants",
80 vendor_available: true,
81 tool_files: ["gen_constants.sh"],
82 cmd: "$(location gen_constants.sh) $(in) $(out)",
83 srcs: [":libminijail_gen_constants_obj"],
84 out: ["libconstants.c"],
85}
86
87cc_library_static {
88 name: "libminijail_generated",
89 vendor_available: true,
90 defaults: ["libminijail_flags"],
91 host_supported: true,
92
93 target: {
94 android: {
95 generated_sources: [
96 "libminijail_gen_syscall",
97 "libminijail_gen_constants",
98 ],
99 },
100 host: {
101 srcs: [
102 "linux-x86/libconstants.gen.c",
103 "linux-x86/libsyscalls.gen.c",
104 ],
105 },
106 },
107}
108
109// libminijail shared and static library for target.
110// =========================================================
111cc_library {
112 name: "libminijail",
113 vendor_available: true,
114 defaults: ["libminijail_flags"],
115
116 srcs: libminijailSrcFiles,
117
118 static: {
119 whole_static_libs: ["libminijail_generated"] + minijailCommonLibraries,
120 },
121 shared: {
122 static_libs: ["libminijail_generated"],
123 shared_libs: minijailCommonLibraries,
124 },
125 export_include_dirs: ["."],
126}
127
128// Example ASan-ified libminijail shared library for target.
129// Commented out since it's only needed for local debugging.
130// =========================================================
131//cc_library_shared {
132// name: "libminijail_asan",
133// defaults: ["libminijail_flags"],
134//
135// sanitize: {
136// address: true,
137// },
138// relative_install_path: "asan",
139// srcs: libminijailSrcFiles,
140//
141// static_libs: ["libminijail_generated"],
142// shared_libs: minijailCommonLibraries,
143// export_include_dirs: ["."],
144//}
145
146// libminijail native unit tests using gtest.
147//
148// For a device, run with:
149// adb shell /data/nativetest/libminijail_unittest_gtest/libminijail_unittest_gtest
150//
151// For host, run with:
152// out/host/linux-x86/nativetest(64)/libminijail_unittest_gtest/libminijail_unittest_gtest
153// =========================================================
154cc_test {
155 name: "libminijail_unittest_gtest",
156 defaults: ["libminijail_flags"],
157 // TODO(b/31395668): Re-enable once the seccomp(2) syscall becomes available.
158 //host_supported: true
159
160 srcs: libminijailSrcFiles + ["libminijail_unittest.cc"] + unittestSrcFiles,
161
162 static_libs: ["libminijail_generated"],
163 shared_libs: minijailCommonLibraries,
164
165 target: {
166 android: {
167 cflags: ["-Wno-writable-strings"],
168 test_suites: ["device-tests"],
169 },
170 host: {
171 cflags: ["-DPRELOADPATH=\"/invalid\""],
172 },
173 },
174}
175
176// Syscall filtering native unit tests using gtest.
177//
178// For a device, run with:
179// adb shell /data/nativetest/syscall_filter_unittest_gtest/syscall_filter_unittest_gtest
180//
181// For host, run with:
182// out/host/linux-x86/nativetest(64)/syscall_filter_unittest_gtest/syscall_filter_unittest_gtest
183// =========================================================
184cc_test {
185 name: "syscall_filter_unittest_gtest",
186 defaults: ["libminijail_flags"],
187 host_supported: true,
188
189 srcs: [
190 "bpf.c",
191 "syscall_filter.c",
192 "util.c",
193 "syscall_filter_unittest.cc",
194 ] + unittestSrcFiles,
195
196 static_libs: ["libminijail_generated"],
197 shared_libs: minijailCommonLibraries,
198
199 target: {
200 android: {
201 test_suites: ["device-tests"],
202 },
203 },
204}
205
206// System functionality unit tests using gtest.
207//
208// For a device, run with:
209// adb shell /data/nativetest/system_unittest_gtest/system_unittest_gtest
210//
211// For host, run with:
212// out/host/linux-x86/nativetest(64)/system_unittest_gtest/system_unittest_gtest
213// =========================================================
214cc_test {
215 name: "system_unittest_gtest",
216 defaults: ["libminijail_flags"],
217 host_supported: true,
218
219 srcs: [
220 "system.c",
221 "util.c",
222 "system_unittest.cc",
223 ] + unittestSrcFiles,
224
225 static_libs: ["libminijail_generated"],
226 shared_libs: minijailCommonLibraries,
227
228 target: {
229 android: {
230 test_suites: ["device-tests"],
231 },
232 },
233}
234
235// libminijail_test executable for brillo_Minijail test.
236// =========================================================
237cc_test {
238 name: "libminijail_test",
239 defaults: ["libminijail_flags"],
240 test_suites: ["device-tests"],
241
242 gtest: false,
243
244 srcs: ["test/libminijail_test.cpp"],
245
246 shared_libs: [
247 "libbase",
248 "libminijail",
249 ],
250}
251
252// libminijail usage example.
253// =========================================================
254cc_binary {
255 name: "drop_privs",
256 defaults: ["libminijail_flags"],
257
258 // Don't build with ASan, but leave commented out for easy local debugging.
259 // sanitize: { address: true, },
260 srcs: ["examples/drop_privs.cpp"],
261
262 shared_libs: [
263 "libbase",
264 "libminijail",
265 ],
266}
267
268// minijail0 executable.
269// This is not currently used on Brillo/Android,
270// but it's convenient to be able to build it.
271// =========================================================
272cc_binary {
273 name: "minijail0",
274 defaults: ["libminijail_flags"],
275
276 cflags: [
277 "-Wno-missing-field-initializers",
278 "-DPRELOADPATH=\"/invalidminijailpreload.so\"",
279 ],
280 srcs: [
281 "elfparse.c",
282 "minijail0.c",
283 ],
284
285 static_libs: ["libminijail_generated"],
286 shared_libs: minijailCommonLibraries + ["libminijail"],
287}