blob: 68797a949d093461de97e1d8bd139d960c7d346b [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,
Jiyong Park85e7a262018-05-24 14:09:04 +090055 recovery_available: true,
Martin Stjernholma74925e2020-04-08 01:02:51 +010056 header_libs: ["libc_headers"], // TODO(b/153662223): Clean this up.
Dan Willemsen2acbec52017-09-14 17:28:36 -070057 srcs: ["gen_syscalls.c"],
58 cflags: [
59 "-dD",
60 "-E",
Chih-Hung Hsiehed6a82e2017-10-04 10:54:11 -070061 "-Wall",
62 "-Werror",
Dan Willemsen2acbec52017-09-14 17:28:36 -070063 ],
Jiyong Parke3a5cae2020-04-08 22:37:24 +090064 apex_available: [
65 "//apex_available:platform",
66 "com.android.adbd",
67 "com.android.media.swcodec",
68 ],
Jooyung Han42b623b2020-04-16 18:48:30 +090069 min_sdk_version: "29",
Dan Willemsen2acbec52017-09-14 17:28:36 -070070}
71
72cc_genrule {
73 name: "libminijail_gen_syscall",
74 vendor_available: true,
Jiyong Park85e7a262018-05-24 14:09:04 +090075 recovery_available: true,
Dan Willemsen2acbec52017-09-14 17:28:36 -070076 tool_files: ["gen_syscalls.sh"],
77 cmd: "$(location gen_syscalls.sh) $(in) $(out)",
78 srcs: [":libminijail_gen_syscall_obj"],
79 out: ["libsyscalls.c"],
Jiyong Parke3a5cae2020-04-08 22:37:24 +090080 apex_available: [
81 "//apex_available:platform",
82 "com.android.adbd",
83 "com.android.media.swcodec",
84 ],
Dan Willemsen2acbec52017-09-14 17:28:36 -070085}
86
87cc_object {
88 name: "libminijail_gen_constants_obj",
89 vendor_available: true,
Jiyong Park85e7a262018-05-24 14:09:04 +090090 recovery_available: true,
Martin Stjernholma74925e2020-04-08 01:02:51 +010091 header_libs: ["libc_headers"], // TODO(b/153662223): Clean this up.
Dan Willemsen2acbec52017-09-14 17:28:36 -070092 srcs: ["gen_constants.c"],
93 cflags: [
94 "-dD",
95 "-E",
Chih-Hung Hsiehed6a82e2017-10-04 10:54:11 -070096 "-Wall",
97 "-Werror",
Dan Willemsen2acbec52017-09-14 17:28:36 -070098 ],
Jiyong Parke3a5cae2020-04-08 22:37:24 +090099 apex_available: [
100 "//apex_available:platform",
101 "com.android.adbd",
102 "com.android.media.swcodec",
103 ],
Jooyung Han42b623b2020-04-16 18:48:30 +0900104 min_sdk_version: "29",
Dan Willemsen2acbec52017-09-14 17:28:36 -0700105}
106
107cc_genrule {
108 name: "libminijail_gen_constants",
109 vendor_available: true,
Jiyong Park85e7a262018-05-24 14:09:04 +0900110 recovery_available: true,
Dan Willemsen2acbec52017-09-14 17:28:36 -0700111 tool_files: ["gen_constants.sh"],
112 cmd: "$(location gen_constants.sh) $(in) $(out)",
113 srcs: [":libminijail_gen_constants_obj"],
114 out: ["libconstants.c"],
Jiyong Parke3a5cae2020-04-08 22:37:24 +0900115 apex_available: [
116 "//apex_available:platform",
117 "com.android.adbd",
118 "com.android.media.swcodec",
119 ],
Dan Willemsen2acbec52017-09-14 17:28:36 -0700120}
121
122cc_library_static {
123 name: "libminijail_generated",
124 vendor_available: true,
Jiyong Park85e7a262018-05-24 14:09:04 +0900125 recovery_available: true,
Dan Willemsen2acbec52017-09-14 17:28:36 -0700126 defaults: ["libminijail_flags"],
127 host_supported: true,
128
129 target: {
130 android: {
131 generated_sources: [
132 "libminijail_gen_syscall",
133 "libminijail_gen_constants",
134 ],
135 },
136 host: {
137 srcs: [
138 "linux-x86/libconstants.gen.c",
139 "linux-x86/libsyscalls.gen.c",
140 ],
141 },
142 },
Jiyong Parke3a5cae2020-04-08 22:37:24 +0900143 apex_available: [
144 "//apex_available:platform",
145 "com.android.adbd",
146 "com.android.media.swcodec",
147 ],
Jooyung Han42b623b2020-04-16 18:48:30 +0900148 min_sdk_version: "29",
Dan Willemsen2acbec52017-09-14 17:28:36 -0700149}
150
Luis Hector Chavezc90ec152019-12-13 09:12:33 -0800151cc_object {
152 name: "libminijail_gen_constants_llvmir",
153 vendor_available: true,
154 recovery_available: true,
155 host_supported: true,
Martin Stjernholma74925e2020-04-08 01:02:51 +0100156 header_libs: ["libc_headers"], // TODO(b/153662223): Clean this up.
Luis Hector Chavezc90ec152019-12-13 09:12:33 -0800157 cflags: [
158 "-S",
159 "-O0",
160 "-emit-llvm",
161 ],
162
163 target: {
164 android: {
165 generated_sources: ["libminijail_gen_constants"],
166 },
167 host: {
168 srcs: ["linux-x86/libconstants.gen.c"],
169 },
170 },
171}
172
173cc_object {
174 name: "libminijail_gen_syscall_llvmir",
175 vendor_available: true,
176 recovery_available: true,
177 host_supported: true,
Martin Stjernholma74925e2020-04-08 01:02:51 +0100178 header_libs: ["libc_headers"], // TODO(b/153662223): Clean this up.
Luis Hector Chavezc90ec152019-12-13 09:12:33 -0800179 cflags: [
180 "-S",
181 "-O0",
182 "-emit-llvm",
183 ],
184
185 target: {
186 android: {
187 generated_sources: ["libminijail_gen_syscall"],
188 },
189 host: {
190 srcs: ["linux-x86/libsyscalls.gen.c"],
191 },
192 },
193}
194
Dan Willemsen2acbec52017-09-14 17:28:36 -0700195// libminijail shared and static library for target.
196// =========================================================
197cc_library {
198 name: "libminijail",
Luis Hector Chavez413af652018-04-19 20:15:13 -0700199 host_supported: true,
Logan Chien9460f602017-11-21 20:32:45 +0800200
Dan Willemsen2acbec52017-09-14 17:28:36 -0700201 vendor_available: true,
Jiyong Park85e7a262018-05-24 14:09:04 +0900202 recovery_available: true,
Logan Chien9460f602017-11-21 20:32:45 +0800203 vndk: {
204 enabled: true,
205 },
206
Dan Willemsen2acbec52017-09-14 17:28:36 -0700207 defaults: ["libminijail_flags"],
208
209 srcs: libminijailSrcFiles,
210
211 static: {
212 whole_static_libs: ["libminijail_generated"] + minijailCommonLibraries,
213 },
214 shared: {
215 static_libs: ["libminijail_generated"],
216 shared_libs: minijailCommonLibraries,
217 },
218 export_include_dirs: ["."],
Luis Hector Chavez413af652018-04-19 20:15:13 -0700219
220 target: {
221 host: {
222 cflags: [
223 "-DPRELOADPATH=\"/invalidminijailpreload.so\"",
224 ],
225 },
226 },
Jiyong Parke3a5cae2020-04-08 22:37:24 +0900227 apex_available: [
228 "//apex_available:platform",
229 "com.android.adbd",
230 "com.android.media.swcodec",
231 ],
Jooyung Han42b623b2020-04-16 18:48:30 +0900232 min_sdk_version: "29",
Dan Willemsen2acbec52017-09-14 17:28:36 -0700233}
234
235// Example ASan-ified libminijail shared library for target.
236// Commented out since it's only needed for local debugging.
237// =========================================================
238//cc_library_shared {
239// name: "libminijail_asan",
240// defaults: ["libminijail_flags"],
241//
242// sanitize: {
243// address: true,
244// },
245// relative_install_path: "asan",
246// srcs: libminijailSrcFiles,
247//
248// static_libs: ["libminijail_generated"],
249// shared_libs: minijailCommonLibraries,
250// export_include_dirs: ["."],
251//}
252
253// libminijail native unit tests using gtest.
254//
255// For a device, run with:
256// adb shell /data/nativetest/libminijail_unittest_gtest/libminijail_unittest_gtest
257//
258// For host, run with:
259// out/host/linux-x86/nativetest(64)/libminijail_unittest_gtest/libminijail_unittest_gtest
260// =========================================================
261cc_test {
262 name: "libminijail_unittest_gtest",
263 defaults: ["libminijail_flags"],
264 // TODO(b/31395668): Re-enable once the seccomp(2) syscall becomes available.
265 //host_supported: true
266
267 srcs: libminijailSrcFiles + ["libminijail_unittest.cc"] + unittestSrcFiles,
268
269 static_libs: ["libminijail_generated"],
270 shared_libs: minijailCommonLibraries,
271
272 target: {
273 android: {
274 cflags: ["-Wno-writable-strings"],
275 test_suites: ["device-tests"],
276 },
277 host: {
278 cflags: ["-DPRELOADPATH=\"/invalid\""],
279 },
280 },
281}
282
283// Syscall filtering native unit tests using gtest.
284//
285// For a device, run with:
286// adb shell /data/nativetest/syscall_filter_unittest_gtest/syscall_filter_unittest_gtest
287//
288// For host, run with:
289// out/host/linux-x86/nativetest(64)/syscall_filter_unittest_gtest/syscall_filter_unittest_gtest
290// =========================================================
291cc_test {
292 name: "syscall_filter_unittest_gtest",
293 defaults: ["libminijail_flags"],
294 host_supported: true,
295
296 srcs: [
297 "bpf.c",
298 "syscall_filter.c",
299 "util.c",
300 "syscall_filter_unittest.cc",
301 ] + unittestSrcFiles,
302
303 static_libs: ["libminijail_generated"],
304 shared_libs: minijailCommonLibraries,
305
306 target: {
307 android: {
308 test_suites: ["device-tests"],
309 },
310 },
311}
312
313// System functionality unit tests using gtest.
314//
315// For a device, run with:
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500316// adb shell /data/nativetest/mj_system_unittest_gtest/mj_system_unittest_gtest
Dan Willemsen2acbec52017-09-14 17:28:36 -0700317//
318// For host, run with:
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500319// out/host/linux-x86/nativetest(64)/mj_system_unittest_gtest/mj_system_unittest_gtest
Dan Willemsen2acbec52017-09-14 17:28:36 -0700320// =========================================================
321cc_test {
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500322 name: "mj_system_unittest_gtest",
Dan Willemsen2acbec52017-09-14 17:28:36 -0700323 defaults: ["libminijail_flags"],
324 host_supported: true,
325
326 srcs: [
327 "system.c",
328 "util.c",
329 "system_unittest.cc",
330 ] + unittestSrcFiles,
331
332 static_libs: ["libminijail_generated"],
333 shared_libs: minijailCommonLibraries,
334
335 target: {
336 android: {
337 test_suites: ["device-tests"],
338 },
339 },
340}
341
Mike Frysinger32c39922018-01-17 17:09:54 -0500342// Utility functionality unit tests using gtest.
343//
344// For a device, run with:
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500345// adb shell /data/nativetest/mj_util_unittest_gtest/mj_util_unittest_gtest
Mike Frysinger32c39922018-01-17 17:09:54 -0500346//
347// For host, run with:
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500348// out/host/linux-x86/nativetest(64)/mj_util_unittest_gtest/mj_util_unittest_gtest
Mike Frysinger32c39922018-01-17 17:09:54 -0500349// =========================================================
350cc_test {
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500351 name: "mj_util_unittest_gtest",
Mike Frysinger32c39922018-01-17 17:09:54 -0500352 defaults: ["libminijail_flags"],
353 host_supported: true,
354
355 srcs: [
356 "util.c",
357 "util_unittest.cc",
358 ] + unittestSrcFiles,
359
360 static_libs: ["libminijail_generated"],
361 shared_libs: minijailCommonLibraries,
362
363 target: {
364 android: {
365 test_suites: ["device-tests"],
366 },
367 },
368}
369
Mike Frysinger4d2a81e2018-01-22 16:43:33 -0500370// Utility functionality unit tests using gtest.
371//
372// For a device, run with:
373// adb shell /data/nativetest/minijail0_cli_unittest_gtest/minijail0_cli_unittest_gtest
374//
375// For host, run with:
376// out/host/linux-x86/nativetest(64)/minijail0_cli_unittest_gtest/minijail0_cli_unittest_gtest
377// =========================================================
378cc_test {
379 name: "minijail0_cli_unittest_gtest",
380 defaults: ["libminijail_flags"],
381 host_supported: true,
382
383 cflags: [
384 "-DPRELOADPATH=\"/invalid\"",
385 ],
386 srcs: libminijailSrcFiles + [
387 "elfparse.c",
388 "minijail0_cli.c",
389 "minijail0_cli_unittest.cc",
390 ] + unittestSrcFiles,
391
392 static_libs: ["libminijail_generated"],
393 shared_libs: minijailCommonLibraries,
394
395 target: {
396 android: {
397 test_suites: ["device-tests"],
398 },
399 },
400}
401
Dan Willemsen2acbec52017-09-14 17:28:36 -0700402// libminijail_test executable for brillo_Minijail test.
403// =========================================================
404cc_test {
405 name: "libminijail_test",
406 defaults: ["libminijail_flags"],
407 test_suites: ["device-tests"],
408
409 gtest: false,
410
411 srcs: ["test/libminijail_test.cpp"],
412
413 shared_libs: [
414 "libbase",
415 "libminijail",
416 ],
417}
418
419// libminijail usage example.
420// =========================================================
421cc_binary {
422 name: "drop_privs",
423 defaults: ["libminijail_flags"],
424
425 // Don't build with ASan, but leave commented out for easy local debugging.
426 // sanitize: { address: true, },
427 srcs: ["examples/drop_privs.cpp"],
428
429 shared_libs: [
430 "libbase",
431 "libminijail",
432 ],
433}
434
435// minijail0 executable.
436// This is not currently used on Brillo/Android,
437// but it's convenient to be able to build it.
438// =========================================================
439cc_binary {
440 name: "minijail0",
441 defaults: ["libminijail_flags"],
Luis Hector Chavez413af652018-04-19 20:15:13 -0700442 host_supported: true,
Dan Willemsen2acbec52017-09-14 17:28:36 -0700443
444 cflags: [
Dan Willemsen2acbec52017-09-14 17:28:36 -0700445 "-DPRELOADPATH=\"/invalidminijailpreload.so\"",
446 ],
447 srcs: [
448 "elfparse.c",
449 "minijail0.c",
Mike Frysinger5ef22ca2018-01-20 13:42:10 -0500450 "minijail0_cli.c",
Dan Willemsen2acbec52017-09-14 17:28:36 -0700451 ],
452
453 static_libs: ["libminijail_generated"],
454 shared_libs: minijailCommonLibraries + ["libminijail"],
455}
Lingfeng Yanga111f542020-02-20 08:50:39 -0800456
Yo Chiang81df0662020-07-25 19:40:44 +0800457rust_defaults {
458 name: "libminijail_rust_defaults",
459 target: {
460 darwin: {
461 enabled: false,
462 },
463 },
464}
465
Andrew Walbran9bd40192020-06-05 14:44:30 +0100466// This target was generated by cargo2android.py --run --device, with some
467// manual fixes.
Andrew Walbran7f5b63b2020-07-21 14:30:42 +0100468rust_library {
Lingfeng Yanga111f542020-02-20 08:50:39 -0800469 name: "libminijail_sys",
Yo Chiang81df0662020-07-25 19:40:44 +0800470 defaults: ["libminijail_rust_defaults"],
Andrew Walbran9bd40192020-06-05 14:44:30 +0100471 host_supported: true,
Lingfeng Yanga111f542020-02-20 08:50:39 -0800472 crate_name: "minijail_sys",
Allen Webb96dd14e2020-06-17 08:33:50 -0700473 srcs: ["rust/minijail-sys/lib.rs"],
Lingfeng Yanga111f542020-02-20 08:50:39 -0800474 edition: "2018",
Andrew Walbran7f5b63b2020-07-21 14:30:42 +0100475 rustlibs: [
Lingfeng Yanga111f542020-02-20 08:50:39 -0800476 "liblibc",
477 ],
Lingfeng Yanga111f542020-02-20 08:50:39 -0800478 shared_libs: [
479 "libcap",
Alistair Delva54fa7322020-08-24 13:01:05 -0700480 "libminijail",
Lingfeng Yanga111f542020-02-20 08:50:39 -0800481 ],
482}
Alistair Delva9072fad2020-07-20 22:57:57 -0700483
484// This target was generated by cargo2android.py --run --device, with some
485// manual fixes.
Andrew Walbran7f5b63b2020-07-21 14:30:42 +0100486rust_library {
Alistair Delva9072fad2020-07-20 22:57:57 -0700487 name: "libminijail_rust",
Yo Chiang81df0662020-07-25 19:40:44 +0800488 defaults: ["libminijail_rust_defaults"],
Alistair Delva9072fad2020-07-20 22:57:57 -0700489 host_supported: true,
490 crate_name: "minijail",
491 srcs: ["rust/minijail/src/lib.rs"],
492 edition: "2018",
Andrew Walbran7f5b63b2020-07-21 14:30:42 +0100493 rustlibs: [
Alistair Delva9072fad2020-07-20 22:57:57 -0700494 "liblibc",
495 "libminijail_sys",
496 ],
497}