blob: 5cd7966dc7522ecb54500a797e00f849cb6b0db4 [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: [
Luis Hector Chavezc3e17722018-10-16 20:43:12 -070036 "-D_FILE_OFFSET_BITS=64",
Mike Frysinger916c6c32018-09-27 14:17:53 -040037 "-DALLOW_DEBUG_LOGGING",
Allen Webbee876072019-02-21 10:56:21 -080038 "-DDEFAULT_PIVOT_ROOT=\"/var/empty\"",
Dan Willemsen2acbec52017-09-14 17:28:36 -070039 "-Wall",
40 "-Werror",
41 ],
42 target: {
43 darwin: {
44 enabled: false,
45 },
46 },
47}
48
49// Static library for generated code.
50// =========================================================
51cc_object {
52 name: "libminijail_gen_syscall_obj",
53 vendor_available: true,
Jiyong Park85e7a262018-05-24 14:09:04 +090054 recovery_available: true,
Dan Willemsen2acbec52017-09-14 17:28:36 -070055 srcs: ["gen_syscalls.c"],
56 cflags: [
57 "-dD",
58 "-E",
Chih-Hung Hsiehed6a82e2017-10-04 10:54:11 -070059 "-Wall",
60 "-Werror",
Dan Willemsen2acbec52017-09-14 17:28:36 -070061 ],
62}
63
64cc_genrule {
65 name: "libminijail_gen_syscall",
66 vendor_available: true,
Jiyong Park85e7a262018-05-24 14:09:04 +090067 recovery_available: true,
Dan Willemsen2acbec52017-09-14 17:28:36 -070068 tool_files: ["gen_syscalls.sh"],
69 cmd: "$(location gen_syscalls.sh) $(in) $(out)",
70 srcs: [":libminijail_gen_syscall_obj"],
71 out: ["libsyscalls.c"],
72}
73
74cc_object {
75 name: "libminijail_gen_constants_obj",
76 vendor_available: true,
Jiyong Park85e7a262018-05-24 14:09:04 +090077 recovery_available: true,
Dan Willemsen2acbec52017-09-14 17:28:36 -070078 srcs: ["gen_constants.c"],
79 cflags: [
80 "-dD",
81 "-E",
Chih-Hung Hsiehed6a82e2017-10-04 10:54:11 -070082 "-Wall",
83 "-Werror",
Dan Willemsen2acbec52017-09-14 17:28:36 -070084 ],
85}
86
87cc_genrule {
88 name: "libminijail_gen_constants",
89 vendor_available: true,
Jiyong Park85e7a262018-05-24 14:09:04 +090090 recovery_available: true,
Dan Willemsen2acbec52017-09-14 17:28:36 -070091 tool_files: ["gen_constants.sh"],
92 cmd: "$(location gen_constants.sh) $(in) $(out)",
93 srcs: [":libminijail_gen_constants_obj"],
94 out: ["libconstants.c"],
95}
96
97cc_library_static {
98 name: "libminijail_generated",
99 vendor_available: true,
Jiyong Park85e7a262018-05-24 14:09:04 +0900100 recovery_available: true,
Dan Willemsen2acbec52017-09-14 17:28:36 -0700101 defaults: ["libminijail_flags"],
102 host_supported: true,
103
104 target: {
105 android: {
106 generated_sources: [
107 "libminijail_gen_syscall",
108 "libminijail_gen_constants",
109 ],
110 },
111 host: {
112 srcs: [
113 "linux-x86/libconstants.gen.c",
114 "linux-x86/libsyscalls.gen.c",
115 ],
116 },
117 },
118}
119
120// libminijail shared and static library for target.
121// =========================================================
122cc_library {
123 name: "libminijail",
Luis Hector Chavez413af652018-04-19 20:15:13 -0700124 host_supported: true,
Logan Chien9460f602017-11-21 20:32:45 +0800125
Dan Willemsen2acbec52017-09-14 17:28:36 -0700126 vendor_available: true,
Jiyong Park85e7a262018-05-24 14:09:04 +0900127 recovery_available: true,
Logan Chien9460f602017-11-21 20:32:45 +0800128 vndk: {
129 enabled: true,
130 },
131
Dan Willemsen2acbec52017-09-14 17:28:36 -0700132 defaults: ["libminijail_flags"],
133
134 srcs: libminijailSrcFiles,
135
136 static: {
137 whole_static_libs: ["libminijail_generated"] + minijailCommonLibraries,
138 },
139 shared: {
140 static_libs: ["libminijail_generated"],
141 shared_libs: minijailCommonLibraries,
142 },
143 export_include_dirs: ["."],
Luis Hector Chavez413af652018-04-19 20:15:13 -0700144
145 target: {
146 host: {
147 cflags: [
148 "-DPRELOADPATH=\"/invalidminijailpreload.so\"",
149 ],
150 },
151 },
Dan Willemsen2acbec52017-09-14 17:28:36 -0700152}
153
154// Example ASan-ified libminijail shared library for target.
155// Commented out since it's only needed for local debugging.
156// =========================================================
157//cc_library_shared {
158// name: "libminijail_asan",
159// defaults: ["libminijail_flags"],
160//
161// sanitize: {
162// address: true,
163// },
164// relative_install_path: "asan",
165// srcs: libminijailSrcFiles,
166//
167// static_libs: ["libminijail_generated"],
168// shared_libs: minijailCommonLibraries,
169// export_include_dirs: ["."],
170//}
171
172// libminijail native unit tests using gtest.
173//
174// For a device, run with:
175// adb shell /data/nativetest/libminijail_unittest_gtest/libminijail_unittest_gtest
176//
177// For host, run with:
178// out/host/linux-x86/nativetest(64)/libminijail_unittest_gtest/libminijail_unittest_gtest
179// =========================================================
180cc_test {
181 name: "libminijail_unittest_gtest",
182 defaults: ["libminijail_flags"],
183 // TODO(b/31395668): Re-enable once the seccomp(2) syscall becomes available.
184 //host_supported: true
185
186 srcs: libminijailSrcFiles + ["libminijail_unittest.cc"] + unittestSrcFiles,
187
188 static_libs: ["libminijail_generated"],
189 shared_libs: minijailCommonLibraries,
190
191 target: {
192 android: {
193 cflags: ["-Wno-writable-strings"],
194 test_suites: ["device-tests"],
195 },
196 host: {
197 cflags: ["-DPRELOADPATH=\"/invalid\""],
198 },
199 },
200}
201
202// Syscall filtering native unit tests using gtest.
203//
204// For a device, run with:
205// adb shell /data/nativetest/syscall_filter_unittest_gtest/syscall_filter_unittest_gtest
206//
207// For host, run with:
208// out/host/linux-x86/nativetest(64)/syscall_filter_unittest_gtest/syscall_filter_unittest_gtest
209// =========================================================
210cc_test {
211 name: "syscall_filter_unittest_gtest",
212 defaults: ["libminijail_flags"],
213 host_supported: true,
214
215 srcs: [
216 "bpf.c",
217 "syscall_filter.c",
218 "util.c",
219 "syscall_filter_unittest.cc",
220 ] + unittestSrcFiles,
221
222 static_libs: ["libminijail_generated"],
223 shared_libs: minijailCommonLibraries,
224
225 target: {
226 android: {
227 test_suites: ["device-tests"],
228 },
229 },
230}
231
232// System functionality unit tests using gtest.
233//
234// For a device, run with:
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500235// adb shell /data/nativetest/mj_system_unittest_gtest/mj_system_unittest_gtest
Dan Willemsen2acbec52017-09-14 17:28:36 -0700236//
237// For host, run with:
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500238// out/host/linux-x86/nativetest(64)/mj_system_unittest_gtest/mj_system_unittest_gtest
Dan Willemsen2acbec52017-09-14 17:28:36 -0700239// =========================================================
240cc_test {
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500241 name: "mj_system_unittest_gtest",
Dan Willemsen2acbec52017-09-14 17:28:36 -0700242 defaults: ["libminijail_flags"],
243 host_supported: true,
244
245 srcs: [
246 "system.c",
247 "util.c",
248 "system_unittest.cc",
249 ] + unittestSrcFiles,
250
251 static_libs: ["libminijail_generated"],
252 shared_libs: minijailCommonLibraries,
253
254 target: {
255 android: {
256 test_suites: ["device-tests"],
257 },
258 },
259}
260
Mike Frysinger32c39922018-01-17 17:09:54 -0500261// Utility functionality unit tests using gtest.
262//
263// For a device, run with:
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500264// adb shell /data/nativetest/mj_util_unittest_gtest/mj_util_unittest_gtest
Mike Frysinger32c39922018-01-17 17:09:54 -0500265//
266// For host, run with:
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500267// out/host/linux-x86/nativetest(64)/mj_util_unittest_gtest/mj_util_unittest_gtest
Mike Frysinger32c39922018-01-17 17:09:54 -0500268// =========================================================
269cc_test {
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500270 name: "mj_util_unittest_gtest",
Mike Frysinger32c39922018-01-17 17:09:54 -0500271 defaults: ["libminijail_flags"],
272 host_supported: true,
273
274 srcs: [
275 "util.c",
276 "util_unittest.cc",
277 ] + unittestSrcFiles,
278
279 static_libs: ["libminijail_generated"],
280 shared_libs: minijailCommonLibraries,
281
282 target: {
283 android: {
284 test_suites: ["device-tests"],
285 },
286 },
287}
288
Mike Frysinger4d2a81e2018-01-22 16:43:33 -0500289// Utility functionality unit tests using gtest.
290//
291// For a device, run with:
292// adb shell /data/nativetest/minijail0_cli_unittest_gtest/minijail0_cli_unittest_gtest
293//
294// For host, run with:
295// out/host/linux-x86/nativetest(64)/minijail0_cli_unittest_gtest/minijail0_cli_unittest_gtest
296// =========================================================
297cc_test {
298 name: "minijail0_cli_unittest_gtest",
299 defaults: ["libminijail_flags"],
300 host_supported: true,
301
302 cflags: [
303 "-DPRELOADPATH=\"/invalid\"",
304 ],
305 srcs: libminijailSrcFiles + [
306 "elfparse.c",
307 "minijail0_cli.c",
308 "minijail0_cli_unittest.cc",
309 ] + unittestSrcFiles,
310
311 static_libs: ["libminijail_generated"],
312 shared_libs: minijailCommonLibraries,
313
314 target: {
315 android: {
316 test_suites: ["device-tests"],
317 },
318 },
319}
320
Dan Willemsen2acbec52017-09-14 17:28:36 -0700321// libminijail_test executable for brillo_Minijail test.
322// =========================================================
323cc_test {
324 name: "libminijail_test",
325 defaults: ["libminijail_flags"],
326 test_suites: ["device-tests"],
327
328 gtest: false,
329
330 srcs: ["test/libminijail_test.cpp"],
331
332 shared_libs: [
333 "libbase",
334 "libminijail",
335 ],
336}
337
338// libminijail usage example.
339// =========================================================
340cc_binary {
341 name: "drop_privs",
342 defaults: ["libminijail_flags"],
343
344 // Don't build with ASan, but leave commented out for easy local debugging.
345 // sanitize: { address: true, },
346 srcs: ["examples/drop_privs.cpp"],
347
348 shared_libs: [
349 "libbase",
350 "libminijail",
351 ],
352}
353
354// minijail0 executable.
355// This is not currently used on Brillo/Android,
356// but it's convenient to be able to build it.
357// =========================================================
358cc_binary {
359 name: "minijail0",
360 defaults: ["libminijail_flags"],
Luis Hector Chavez413af652018-04-19 20:15:13 -0700361 host_supported: true,
Dan Willemsen2acbec52017-09-14 17:28:36 -0700362
363 cflags: [
Dan Willemsen2acbec52017-09-14 17:28:36 -0700364 "-DPRELOADPATH=\"/invalidminijailpreload.so\"",
365 ],
366 srcs: [
367 "elfparse.c",
368 "minijail0.c",
Mike Frysinger5ef22ca2018-01-20 13:42:10 -0500369 "minijail0_cli.c",
Dan Willemsen2acbec52017-09-14 17:28:36 -0700370 ],
371
372 static_libs: ["libminijail_generated"],
373 shared_libs: minijailCommonLibraries + ["libminijail"],
374}