blob: 80a88b4127794e380a22f55f01d06866a2608f83 [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",
Nicole Anderson-Aubcc8cfd2020-11-10 20:33:27 +000038 "-DALLOW_DUPLICATE_SYSCALLS",
Allen Webbee876072019-02-21 10:56:21 -080039 "-DDEFAULT_PIVOT_ROOT=\"/var/empty\"",
Dan Willemsen2acbec52017-09-14 17:28:36 -070040 "-Wall",
41 "-Werror",
42 ],
43 target: {
44 darwin: {
45 enabled: false,
46 },
47 },
48}
49
50// Static library for generated code.
51// =========================================================
52cc_object {
53 name: "libminijail_gen_syscall_obj",
54 vendor_available: true,
Justin Yuned25bf32020-11-11 18:21:21 +090055 product_available: true,
Jiyong Park85e7a262018-05-24 14:09:04 +090056 recovery_available: true,
Martin Stjernholma74925e2020-04-08 01:02:51 +010057 header_libs: ["libc_headers"], // TODO(b/153662223): Clean this up.
Dan Willemsen2acbec52017-09-14 17:28:36 -070058 srcs: ["gen_syscalls.c"],
59 cflags: [
60 "-dD",
61 "-E",
Chih-Hung Hsiehed6a82e2017-10-04 10:54:11 -070062 "-Wall",
63 "-Werror",
Dan Willemsen2acbec52017-09-14 17:28:36 -070064 ],
Jiyong Parke3a5cae2020-04-08 22:37:24 +090065 apex_available: [
66 "//apex_available:platform",
67 "com.android.adbd",
68 "com.android.media.swcodec",
Jiyong Park1081a942020-12-07 15:09:28 +090069 "com.android.virt",
Jiyong Parke3a5cae2020-04-08 22:37:24 +090070 ],
Jooyung Han42b623b2020-04-16 18:48:30 +090071 min_sdk_version: "29",
Dan Willemsen2acbec52017-09-14 17:28:36 -070072}
73
74cc_genrule {
75 name: "libminijail_gen_syscall",
76 vendor_available: true,
Justin Yuned25bf32020-11-11 18:21:21 +090077 product_available: true,
Jiyong Park85e7a262018-05-24 14:09:04 +090078 recovery_available: true,
Dan Willemsen2acbec52017-09-14 17:28:36 -070079 tool_files: ["gen_syscalls.sh"],
80 cmd: "$(location gen_syscalls.sh) $(in) $(out)",
81 srcs: [":libminijail_gen_syscall_obj"],
82 out: ["libsyscalls.c"],
Jiyong Parke3a5cae2020-04-08 22:37:24 +090083 apex_available: [
84 "//apex_available:platform",
85 "com.android.adbd",
86 "com.android.media.swcodec",
Jiyong Park1081a942020-12-07 15:09:28 +090087 "com.android.virt",
Jiyong Parke3a5cae2020-04-08 22:37:24 +090088 ],
Dan Willemsen2acbec52017-09-14 17:28:36 -070089}
90
91cc_object {
92 name: "libminijail_gen_constants_obj",
93 vendor_available: true,
Justin Yuned25bf32020-11-11 18:21:21 +090094 product_available: true,
Jiyong Park85e7a262018-05-24 14:09:04 +090095 recovery_available: true,
Martin Stjernholma74925e2020-04-08 01:02:51 +010096 header_libs: ["libc_headers"], // TODO(b/153662223): Clean this up.
Dan Willemsen2acbec52017-09-14 17:28:36 -070097 srcs: ["gen_constants.c"],
98 cflags: [
99 "-dD",
100 "-E",
Chih-Hung Hsiehed6a82e2017-10-04 10:54:11 -0700101 "-Wall",
102 "-Werror",
Dan Willemsen2acbec52017-09-14 17:28:36 -0700103 ],
Jiyong Parke3a5cae2020-04-08 22:37:24 +0900104 apex_available: [
105 "//apex_available:platform",
106 "com.android.adbd",
107 "com.android.media.swcodec",
Jiyong Park1081a942020-12-07 15:09:28 +0900108 "com.android.virt",
Jiyong Parke3a5cae2020-04-08 22:37:24 +0900109 ],
Jooyung Han42b623b2020-04-16 18:48:30 +0900110 min_sdk_version: "29",
Dan Willemsen2acbec52017-09-14 17:28:36 -0700111}
112
113cc_genrule {
114 name: "libminijail_gen_constants",
115 vendor_available: true,
Justin Yuned25bf32020-11-11 18:21:21 +0900116 product_available: true,
Jiyong Park85e7a262018-05-24 14:09:04 +0900117 recovery_available: true,
Dan Willemsen2acbec52017-09-14 17:28:36 -0700118 tool_files: ["gen_constants.sh"],
119 cmd: "$(location gen_constants.sh) $(in) $(out)",
120 srcs: [":libminijail_gen_constants_obj"],
121 out: ["libconstants.c"],
Jiyong Parke3a5cae2020-04-08 22:37:24 +0900122 apex_available: [
123 "//apex_available:platform",
124 "com.android.adbd",
125 "com.android.media.swcodec",
Jiyong Park1081a942020-12-07 15:09:28 +0900126 "com.android.virt",
Jiyong Parke3a5cae2020-04-08 22:37:24 +0900127 ],
Dan Willemsen2acbec52017-09-14 17:28:36 -0700128}
129
130cc_library_static {
131 name: "libminijail_generated",
132 vendor_available: true,
Justin Yuned25bf32020-11-11 18:21:21 +0900133 product_available: true,
Jiyong Park85e7a262018-05-24 14:09:04 +0900134 recovery_available: true,
Dan Willemsen2acbec52017-09-14 17:28:36 -0700135 defaults: ["libminijail_flags"],
136 host_supported: true,
137
138 target: {
139 android: {
140 generated_sources: [
141 "libminijail_gen_syscall",
142 "libminijail_gen_constants",
143 ],
144 },
145 host: {
146 srcs: [
147 "linux-x86/libconstants.gen.c",
148 "linux-x86/libsyscalls.gen.c",
149 ],
150 },
151 },
Jiyong Parke3a5cae2020-04-08 22:37:24 +0900152 apex_available: [
153 "//apex_available:platform",
154 "com.android.adbd",
155 "com.android.media.swcodec",
Jiyong Park1081a942020-12-07 15:09:28 +0900156 "com.android.virt",
Jiyong Parke3a5cae2020-04-08 22:37:24 +0900157 ],
Jooyung Han42b623b2020-04-16 18:48:30 +0900158 min_sdk_version: "29",
Dan Willemsen2acbec52017-09-14 17:28:36 -0700159}
160
Luis Hector Chavezc90ec152019-12-13 09:12:33 -0800161cc_object {
162 name: "libminijail_gen_constants_llvmir",
163 vendor_available: true,
Justin Yuned25bf32020-11-11 18:21:21 +0900164 product_available: true,
Luis Hector Chavezc90ec152019-12-13 09:12:33 -0800165 recovery_available: true,
166 host_supported: true,
Martin Stjernholma74925e2020-04-08 01:02:51 +0100167 header_libs: ["libc_headers"], // TODO(b/153662223): Clean this up.
Luis Hector Chavezc90ec152019-12-13 09:12:33 -0800168 cflags: [
169 "-S",
170 "-O0",
171 "-emit-llvm",
172 ],
173
174 target: {
175 android: {
176 generated_sources: ["libminijail_gen_constants"],
177 },
178 host: {
179 srcs: ["linux-x86/libconstants.gen.c"],
180 },
181 },
182}
183
184cc_object {
185 name: "libminijail_gen_syscall_llvmir",
186 vendor_available: true,
Justin Yuned25bf32020-11-11 18:21:21 +0900187 product_available: true,
Luis Hector Chavezc90ec152019-12-13 09:12:33 -0800188 recovery_available: true,
189 host_supported: true,
Martin Stjernholma74925e2020-04-08 01:02:51 +0100190 header_libs: ["libc_headers"], // TODO(b/153662223): Clean this up.
Luis Hector Chavezc90ec152019-12-13 09:12:33 -0800191 cflags: [
192 "-S",
193 "-O0",
194 "-emit-llvm",
195 ],
196
197 target: {
198 android: {
199 generated_sources: ["libminijail_gen_syscall"],
200 },
201 host: {
202 srcs: ["linux-x86/libsyscalls.gen.c"],
203 },
204 },
205}
206
Dan Willemsen2acbec52017-09-14 17:28:36 -0700207// libminijail shared and static library for target.
208// =========================================================
209cc_library {
210 name: "libminijail",
Luis Hector Chavez413af652018-04-19 20:15:13 -0700211 host_supported: true,
Logan Chien9460f602017-11-21 20:32:45 +0800212
Dan Willemsen2acbec52017-09-14 17:28:36 -0700213 vendor_available: true,
Justin Yuned25bf32020-11-11 18:21:21 +0900214 product_available: true,
Jiyong Park85e7a262018-05-24 14:09:04 +0900215 recovery_available: true,
Logan Chien9460f602017-11-21 20:32:45 +0800216 vndk: {
217 enabled: true,
218 },
219
Dan Willemsen2acbec52017-09-14 17:28:36 -0700220 defaults: ["libminijail_flags"],
221
222 srcs: libminijailSrcFiles,
223
224 static: {
225 whole_static_libs: ["libminijail_generated"] + minijailCommonLibraries,
226 },
227 shared: {
228 static_libs: ["libminijail_generated"],
229 shared_libs: minijailCommonLibraries,
230 },
231 export_include_dirs: ["."],
Luis Hector Chavez413af652018-04-19 20:15:13 -0700232
233 target: {
234 host: {
235 cflags: [
236 "-DPRELOADPATH=\"/invalidminijailpreload.so\"",
237 ],
238 },
239 },
Jiyong Parke3a5cae2020-04-08 22:37:24 +0900240 apex_available: [
241 "//apex_available:platform",
242 "com.android.adbd",
243 "com.android.media.swcodec",
Jiyong Park1081a942020-12-07 15:09:28 +0900244 "com.android.virt",
Jiyong Parke3a5cae2020-04-08 22:37:24 +0900245 ],
Jooyung Han42b623b2020-04-16 18:48:30 +0900246 min_sdk_version: "29",
Dan Willemsen2acbec52017-09-14 17:28:36 -0700247}
248
249// Example ASan-ified libminijail shared library for target.
250// Commented out since it's only needed for local debugging.
251// =========================================================
252//cc_library_shared {
253// name: "libminijail_asan",
254// defaults: ["libminijail_flags"],
255//
256// sanitize: {
257// address: true,
258// },
259// relative_install_path: "asan",
260// srcs: libminijailSrcFiles,
261//
262// static_libs: ["libminijail_generated"],
263// shared_libs: minijailCommonLibraries,
264// export_include_dirs: ["."],
265//}
266
267// libminijail native unit tests using gtest.
268//
269// For a device, run with:
270// adb shell /data/nativetest/libminijail_unittest_gtest/libminijail_unittest_gtest
271//
272// For host, run with:
273// out/host/linux-x86/nativetest(64)/libminijail_unittest_gtest/libminijail_unittest_gtest
274// =========================================================
275cc_test {
276 name: "libminijail_unittest_gtest",
277 defaults: ["libminijail_flags"],
278 // TODO(b/31395668): Re-enable once the seccomp(2) syscall becomes available.
279 //host_supported: true
280
281 srcs: libminijailSrcFiles + ["libminijail_unittest.cc"] + unittestSrcFiles,
282
283 static_libs: ["libminijail_generated"],
284 shared_libs: minijailCommonLibraries,
285
286 target: {
287 android: {
288 cflags: ["-Wno-writable-strings"],
289 test_suites: ["device-tests"],
290 },
291 host: {
292 cflags: ["-DPRELOADPATH=\"/invalid\""],
293 },
294 },
295}
296
297// Syscall filtering native unit tests using gtest.
298//
299// For a device, run with:
300// adb shell /data/nativetest/syscall_filter_unittest_gtest/syscall_filter_unittest_gtest
301//
302// For host, run with:
303// out/host/linux-x86/nativetest(64)/syscall_filter_unittest_gtest/syscall_filter_unittest_gtest
304// =========================================================
305cc_test {
306 name: "syscall_filter_unittest_gtest",
307 defaults: ["libminijail_flags"],
308 host_supported: true,
309
310 srcs: [
311 "bpf.c",
312 "syscall_filter.c",
Luis Héctor Chávez01b628c2021-01-03 05:46:57 -0800313 "syscall_wrapper.c",
Dan Willemsen2acbec52017-09-14 17:28:36 -0700314 "util.c",
315 "syscall_filter_unittest.cc",
316 ] + unittestSrcFiles,
317
318 static_libs: ["libminijail_generated"],
319 shared_libs: minijailCommonLibraries,
320
321 target: {
322 android: {
323 test_suites: ["device-tests"],
324 },
325 },
326}
327
328// System functionality unit tests using gtest.
329//
330// For a device, run with:
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500331// adb shell /data/nativetest/mj_system_unittest_gtest/mj_system_unittest_gtest
Dan Willemsen2acbec52017-09-14 17:28:36 -0700332//
333// For host, run with:
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500334// out/host/linux-x86/nativetest(64)/mj_system_unittest_gtest/mj_system_unittest_gtest
Dan Willemsen2acbec52017-09-14 17:28:36 -0700335// =========================================================
336cc_test {
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500337 name: "mj_system_unittest_gtest",
Dan Willemsen2acbec52017-09-14 17:28:36 -0700338 defaults: ["libminijail_flags"],
339 host_supported: true,
340
341 srcs: [
Luis Héctor Chávez01b628c2021-01-03 05:46:57 -0800342 "syscall_wrapper.c",
Dan Willemsen2acbec52017-09-14 17:28:36 -0700343 "system.c",
344 "util.c",
345 "system_unittest.cc",
346 ] + unittestSrcFiles,
347
348 static_libs: ["libminijail_generated"],
349 shared_libs: minijailCommonLibraries,
350
351 target: {
352 android: {
353 test_suites: ["device-tests"],
354 },
355 },
356}
357
Mike Frysinger32c39922018-01-17 17:09:54 -0500358// Utility functionality unit tests using gtest.
359//
360// For a device, run with:
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500361// adb shell /data/nativetest/mj_util_unittest_gtest/mj_util_unittest_gtest
Mike Frysinger32c39922018-01-17 17:09:54 -0500362//
363// For host, run with:
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500364// out/host/linux-x86/nativetest(64)/mj_util_unittest_gtest/mj_util_unittest_gtest
Mike Frysinger32c39922018-01-17 17:09:54 -0500365// =========================================================
366cc_test {
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500367 name: "mj_util_unittest_gtest",
Mike Frysinger32c39922018-01-17 17:09:54 -0500368 defaults: ["libminijail_flags"],
369 host_supported: true,
370
371 srcs: [
372 "util.c",
373 "util_unittest.cc",
374 ] + unittestSrcFiles,
375
376 static_libs: ["libminijail_generated"],
377 shared_libs: minijailCommonLibraries,
378
379 target: {
380 android: {
381 test_suites: ["device-tests"],
382 },
383 },
384}
385
Mike Frysinger4d2a81e2018-01-22 16:43:33 -0500386// Utility functionality unit tests using gtest.
387//
388// For a device, run with:
389// adb shell /data/nativetest/minijail0_cli_unittest_gtest/minijail0_cli_unittest_gtest
390//
391// For host, run with:
392// out/host/linux-x86/nativetest(64)/minijail0_cli_unittest_gtest/minijail0_cli_unittest_gtest
393// =========================================================
394cc_test {
395 name: "minijail0_cli_unittest_gtest",
396 defaults: ["libminijail_flags"],
397 host_supported: true,
398
399 cflags: [
400 "-DPRELOADPATH=\"/invalid\"",
401 ],
402 srcs: libminijailSrcFiles + [
403 "elfparse.c",
404 "minijail0_cli.c",
405 "minijail0_cli_unittest.cc",
406 ] + unittestSrcFiles,
407
408 static_libs: ["libminijail_generated"],
409 shared_libs: minijailCommonLibraries,
410
411 target: {
412 android: {
413 test_suites: ["device-tests"],
414 },
415 },
416}
417
Dan Willemsen2acbec52017-09-14 17:28:36 -0700418// libminijail_test executable for brillo_Minijail test.
419// =========================================================
420cc_test {
421 name: "libminijail_test",
422 defaults: ["libminijail_flags"],
423 test_suites: ["device-tests"],
424
425 gtest: false,
426
427 srcs: ["test/libminijail_test.cpp"],
428
429 shared_libs: [
430 "libbase",
431 "libminijail",
432 ],
433}
434
435// libminijail usage example.
436// =========================================================
437cc_binary {
438 name: "drop_privs",
439 defaults: ["libminijail_flags"],
440
441 // Don't build with ASan, but leave commented out for easy local debugging.
442 // sanitize: { address: true, },
443 srcs: ["examples/drop_privs.cpp"],
444
445 shared_libs: [
446 "libbase",
447 "libminijail",
448 ],
449}
450
451// minijail0 executable.
452// This is not currently used on Brillo/Android,
453// but it's convenient to be able to build it.
454// =========================================================
455cc_binary {
456 name: "minijail0",
457 defaults: ["libminijail_flags"],
Luis Hector Chavez413af652018-04-19 20:15:13 -0700458 host_supported: true,
Dan Willemsen2acbec52017-09-14 17:28:36 -0700459
460 cflags: [
Dan Willemsen2acbec52017-09-14 17:28:36 -0700461 "-DPRELOADPATH=\"/invalidminijailpreload.so\"",
462 ],
463 srcs: [
464 "elfparse.c",
465 "minijail0.c",
Mike Frysinger5ef22ca2018-01-20 13:42:10 -0500466 "minijail0_cli.c",
Dan Willemsen2acbec52017-09-14 17:28:36 -0700467 ],
468
469 static_libs: ["libminijail_generated"],
470 shared_libs: minijailCommonLibraries + ["libminijail"],
471}
Lingfeng Yanga111f542020-02-20 08:50:39 -0800472
Yo Chiang81df0662020-07-25 19:40:44 +0800473rust_defaults {
474 name: "libminijail_rust_defaults",
475 target: {
476 darwin: {
477 enabled: false,
478 },
479 },
480}
481
Andrew Walbran9bd40192020-06-05 14:44:30 +0100482// This target was generated by cargo2android.py --run --device, with some
483// manual fixes.
Andrew Walbran7f5b63b2020-07-21 14:30:42 +0100484rust_library {
Lingfeng Yanga111f542020-02-20 08:50:39 -0800485 name: "libminijail_sys",
Yo Chiang81df0662020-07-25 19:40:44 +0800486 defaults: ["libminijail_rust_defaults"],
Andrew Walbran9bd40192020-06-05 14:44:30 +0100487 host_supported: true,
Lingfeng Yanga111f542020-02-20 08:50:39 -0800488 crate_name: "minijail_sys",
Allen Webb96dd14e2020-06-17 08:33:50 -0700489 srcs: ["rust/minijail-sys/lib.rs"],
Lingfeng Yanga111f542020-02-20 08:50:39 -0800490 edition: "2018",
Andrew Walbran7f5b63b2020-07-21 14:30:42 +0100491 rustlibs: [
Lingfeng Yanga111f542020-02-20 08:50:39 -0800492 "liblibc",
493 ],
Lingfeng Yanga111f542020-02-20 08:50:39 -0800494 shared_libs: [
495 "libcap",
Alistair Delva54fa7322020-08-24 13:01:05 -0700496 "libminijail",
Lingfeng Yanga111f542020-02-20 08:50:39 -0800497 ],
Jiyong Park1081a942020-12-07 15:09:28 +0900498 apex_available: [
499 "//apex_available:platform",
500 "com.android.virt",
501 ],
Lingfeng Yanga111f542020-02-20 08:50:39 -0800502}
Alistair Delva9072fad2020-07-20 22:57:57 -0700503
504// This target was generated by cargo2android.py --run --device, with some
505// manual fixes.
Andrew Walbran7f5b63b2020-07-21 14:30:42 +0100506rust_library {
Alistair Delva9072fad2020-07-20 22:57:57 -0700507 name: "libminijail_rust",
Yo Chiang81df0662020-07-25 19:40:44 +0800508 defaults: ["libminijail_rust_defaults"],
Alistair Delva9072fad2020-07-20 22:57:57 -0700509 host_supported: true,
510 crate_name: "minijail",
511 srcs: ["rust/minijail/src/lib.rs"],
512 edition: "2018",
Andrew Walbran7f5b63b2020-07-21 14:30:42 +0100513 rustlibs: [
Alistair Delva9072fad2020-07-20 22:57:57 -0700514 "liblibc",
515 "libminijail_sys",
516 ],
Jiyong Park1081a942020-12-07 15:09:28 +0900517 apex_available: [
518 "//apex_available:platform",
519 "com.android.virt",
520 ],
Alistair Delva9072fad2020-07-20 22:57:57 -0700521}