blob: 011e178e7925e3d66baa990fc190612822997f92 [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",
313 "util.c",
314 "syscall_filter_unittest.cc",
315 ] + unittestSrcFiles,
316
317 static_libs: ["libminijail_generated"],
318 shared_libs: minijailCommonLibraries,
319
320 target: {
321 android: {
322 test_suites: ["device-tests"],
323 },
324 },
325}
326
327// System functionality unit tests using gtest.
328//
329// For a device, run with:
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500330// adb shell /data/nativetest/mj_system_unittest_gtest/mj_system_unittest_gtest
Dan Willemsen2acbec52017-09-14 17:28:36 -0700331//
332// For host, run with:
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500333// out/host/linux-x86/nativetest(64)/mj_system_unittest_gtest/mj_system_unittest_gtest
Dan Willemsen2acbec52017-09-14 17:28:36 -0700334// =========================================================
335cc_test {
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500336 name: "mj_system_unittest_gtest",
Dan Willemsen2acbec52017-09-14 17:28:36 -0700337 defaults: ["libminijail_flags"],
338 host_supported: true,
339
340 srcs: [
341 "system.c",
342 "util.c",
343 "system_unittest.cc",
344 ] + unittestSrcFiles,
345
346 static_libs: ["libminijail_generated"],
347 shared_libs: minijailCommonLibraries,
348
349 target: {
350 android: {
351 test_suites: ["device-tests"],
352 },
353 },
354}
355
Mike Frysinger32c39922018-01-17 17:09:54 -0500356// Utility functionality unit tests using gtest.
357//
358// For a device, run with:
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500359// adb shell /data/nativetest/mj_util_unittest_gtest/mj_util_unittest_gtest
Mike Frysinger32c39922018-01-17 17:09:54 -0500360//
361// For host, run with:
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500362// out/host/linux-x86/nativetest(64)/mj_util_unittest_gtest/mj_util_unittest_gtest
Mike Frysinger32c39922018-01-17 17:09:54 -0500363// =========================================================
364cc_test {
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500365 name: "mj_util_unittest_gtest",
Mike Frysinger32c39922018-01-17 17:09:54 -0500366 defaults: ["libminijail_flags"],
367 host_supported: true,
368
369 srcs: [
370 "util.c",
371 "util_unittest.cc",
372 ] + unittestSrcFiles,
373
374 static_libs: ["libminijail_generated"],
375 shared_libs: minijailCommonLibraries,
376
377 target: {
378 android: {
379 test_suites: ["device-tests"],
380 },
381 },
382}
383
Mike Frysinger4d2a81e2018-01-22 16:43:33 -0500384// Utility functionality unit tests using gtest.
385//
386// For a device, run with:
387// adb shell /data/nativetest/minijail0_cli_unittest_gtest/minijail0_cli_unittest_gtest
388//
389// For host, run with:
390// out/host/linux-x86/nativetest(64)/minijail0_cli_unittest_gtest/minijail0_cli_unittest_gtest
391// =========================================================
392cc_test {
393 name: "minijail0_cli_unittest_gtest",
394 defaults: ["libminijail_flags"],
395 host_supported: true,
396
397 cflags: [
398 "-DPRELOADPATH=\"/invalid\"",
399 ],
400 srcs: libminijailSrcFiles + [
401 "elfparse.c",
402 "minijail0_cli.c",
403 "minijail0_cli_unittest.cc",
404 ] + unittestSrcFiles,
405
406 static_libs: ["libminijail_generated"],
407 shared_libs: minijailCommonLibraries,
408
409 target: {
410 android: {
411 test_suites: ["device-tests"],
412 },
413 },
414}
415
Dan Willemsen2acbec52017-09-14 17:28:36 -0700416// libminijail_test executable for brillo_Minijail test.
417// =========================================================
418cc_test {
419 name: "libminijail_test",
420 defaults: ["libminijail_flags"],
421 test_suites: ["device-tests"],
422
423 gtest: false,
424
425 srcs: ["test/libminijail_test.cpp"],
426
427 shared_libs: [
428 "libbase",
429 "libminijail",
430 ],
431}
432
433// libminijail usage example.
434// =========================================================
435cc_binary {
436 name: "drop_privs",
437 defaults: ["libminijail_flags"],
438
439 // Don't build with ASan, but leave commented out for easy local debugging.
440 // sanitize: { address: true, },
441 srcs: ["examples/drop_privs.cpp"],
442
443 shared_libs: [
444 "libbase",
445 "libminijail",
446 ],
447}
448
449// minijail0 executable.
450// This is not currently used on Brillo/Android,
451// but it's convenient to be able to build it.
452// =========================================================
453cc_binary {
454 name: "minijail0",
455 defaults: ["libminijail_flags"],
Luis Hector Chavez413af652018-04-19 20:15:13 -0700456 host_supported: true,
Dan Willemsen2acbec52017-09-14 17:28:36 -0700457
458 cflags: [
Dan Willemsen2acbec52017-09-14 17:28:36 -0700459 "-DPRELOADPATH=\"/invalidminijailpreload.so\"",
460 ],
461 srcs: [
462 "elfparse.c",
463 "minijail0.c",
Mike Frysinger5ef22ca2018-01-20 13:42:10 -0500464 "minijail0_cli.c",
Dan Willemsen2acbec52017-09-14 17:28:36 -0700465 ],
466
467 static_libs: ["libminijail_generated"],
468 shared_libs: minijailCommonLibraries + ["libminijail"],
469}
Lingfeng Yanga111f542020-02-20 08:50:39 -0800470
Yo Chiang81df0662020-07-25 19:40:44 +0800471rust_defaults {
472 name: "libminijail_rust_defaults",
473 target: {
474 darwin: {
475 enabled: false,
476 },
477 },
478}
479
Andrew Walbran9bd40192020-06-05 14:44:30 +0100480// This target was generated by cargo2android.py --run --device, with some
481// manual fixes.
Andrew Walbran7f5b63b2020-07-21 14:30:42 +0100482rust_library {
Lingfeng Yanga111f542020-02-20 08:50:39 -0800483 name: "libminijail_sys",
Yo Chiang81df0662020-07-25 19:40:44 +0800484 defaults: ["libminijail_rust_defaults"],
Andrew Walbran9bd40192020-06-05 14:44:30 +0100485 host_supported: true,
Lingfeng Yanga111f542020-02-20 08:50:39 -0800486 crate_name: "minijail_sys",
Allen Webb96dd14e2020-06-17 08:33:50 -0700487 srcs: ["rust/minijail-sys/lib.rs"],
Lingfeng Yanga111f542020-02-20 08:50:39 -0800488 edition: "2018",
Andrew Walbran7f5b63b2020-07-21 14:30:42 +0100489 rustlibs: [
Lingfeng Yanga111f542020-02-20 08:50:39 -0800490 "liblibc",
491 ],
Lingfeng Yanga111f542020-02-20 08:50:39 -0800492 shared_libs: [
493 "libcap",
Alistair Delva54fa7322020-08-24 13:01:05 -0700494 "libminijail",
Lingfeng Yanga111f542020-02-20 08:50:39 -0800495 ],
Jiyong Park1081a942020-12-07 15:09:28 +0900496 apex_available: [
497 "//apex_available:platform",
498 "com.android.virt",
499 ],
Lingfeng Yanga111f542020-02-20 08:50:39 -0800500}
Alistair Delva9072fad2020-07-20 22:57:57 -0700501
502// This target was generated by cargo2android.py --run --device, with some
503// manual fixes.
Andrew Walbran7f5b63b2020-07-21 14:30:42 +0100504rust_library {
Alistair Delva9072fad2020-07-20 22:57:57 -0700505 name: "libminijail_rust",
Yo Chiang81df0662020-07-25 19:40:44 +0800506 defaults: ["libminijail_rust_defaults"],
Alistair Delva9072fad2020-07-20 22:57:57 -0700507 host_supported: true,
508 crate_name: "minijail",
509 srcs: ["rust/minijail/src/lib.rs"],
510 edition: "2018",
Andrew Walbran7f5b63b2020-07-21 14:30:42 +0100511 rustlibs: [
Alistair Delva9072fad2020-07-20 22:57:57 -0700512 "liblibc",
513 "libminijail_sys",
514 ],
Jiyong Park1081a942020-12-07 15:09:28 +0900515 apex_available: [
516 "//apex_available:platform",
517 "com.android.virt",
518 ],
Alistair Delva9072fad2020-07-20 22:57:57 -0700519}