blob: a1fb3f17b5a7aa3ef46035f8a48889406d6b21e5 [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",
69 ],
Jooyung Han42b623b2020-04-16 18:48:30 +090070 min_sdk_version: "29",
Dan Willemsen2acbec52017-09-14 17:28:36 -070071}
72
73cc_genrule {
74 name: "libminijail_gen_syscall",
75 vendor_available: true,
Justin Yuned25bf32020-11-11 18:21:21 +090076 product_available: true,
Jiyong Park85e7a262018-05-24 14:09:04 +090077 recovery_available: true,
Dan Willemsen2acbec52017-09-14 17:28:36 -070078 tool_files: ["gen_syscalls.sh"],
79 cmd: "$(location gen_syscalls.sh) $(in) $(out)",
80 srcs: [":libminijail_gen_syscall_obj"],
81 out: ["libsyscalls.c"],
Jiyong Parke3a5cae2020-04-08 22:37:24 +090082 apex_available: [
83 "//apex_available:platform",
84 "com.android.adbd",
85 "com.android.media.swcodec",
86 ],
Dan Willemsen2acbec52017-09-14 17:28:36 -070087}
88
89cc_object {
90 name: "libminijail_gen_constants_obj",
91 vendor_available: true,
Justin Yuned25bf32020-11-11 18:21:21 +090092 product_available: true,
Jiyong Park85e7a262018-05-24 14:09:04 +090093 recovery_available: true,
Martin Stjernholma74925e2020-04-08 01:02:51 +010094 header_libs: ["libc_headers"], // TODO(b/153662223): Clean this up.
Dan Willemsen2acbec52017-09-14 17:28:36 -070095 srcs: ["gen_constants.c"],
96 cflags: [
97 "-dD",
98 "-E",
Chih-Hung Hsiehed6a82e2017-10-04 10:54:11 -070099 "-Wall",
100 "-Werror",
Dan Willemsen2acbec52017-09-14 17:28:36 -0700101 ],
Jiyong Parke3a5cae2020-04-08 22:37:24 +0900102 apex_available: [
103 "//apex_available:platform",
104 "com.android.adbd",
105 "com.android.media.swcodec",
106 ],
Jooyung Han42b623b2020-04-16 18:48:30 +0900107 min_sdk_version: "29",
Dan Willemsen2acbec52017-09-14 17:28:36 -0700108}
109
110cc_genrule {
111 name: "libminijail_gen_constants",
112 vendor_available: true,
Justin Yuned25bf32020-11-11 18:21:21 +0900113 product_available: true,
Jiyong Park85e7a262018-05-24 14:09:04 +0900114 recovery_available: true,
Dan Willemsen2acbec52017-09-14 17:28:36 -0700115 tool_files: ["gen_constants.sh"],
116 cmd: "$(location gen_constants.sh) $(in) $(out)",
117 srcs: [":libminijail_gen_constants_obj"],
118 out: ["libconstants.c"],
Jiyong Parke3a5cae2020-04-08 22:37:24 +0900119 apex_available: [
120 "//apex_available:platform",
121 "com.android.adbd",
122 "com.android.media.swcodec",
123 ],
Dan Willemsen2acbec52017-09-14 17:28:36 -0700124}
125
126cc_library_static {
127 name: "libminijail_generated",
128 vendor_available: true,
Justin Yuned25bf32020-11-11 18:21:21 +0900129 product_available: true,
Jiyong Park85e7a262018-05-24 14:09:04 +0900130 recovery_available: true,
Dan Willemsen2acbec52017-09-14 17:28:36 -0700131 defaults: ["libminijail_flags"],
132 host_supported: true,
133
134 target: {
135 android: {
136 generated_sources: [
137 "libminijail_gen_syscall",
138 "libminijail_gen_constants",
139 ],
140 },
141 host: {
142 srcs: [
143 "linux-x86/libconstants.gen.c",
144 "linux-x86/libsyscalls.gen.c",
145 ],
146 },
147 },
Jiyong Parke3a5cae2020-04-08 22:37:24 +0900148 apex_available: [
149 "//apex_available:platform",
150 "com.android.adbd",
151 "com.android.media.swcodec",
152 ],
Jooyung Han42b623b2020-04-16 18:48:30 +0900153 min_sdk_version: "29",
Dan Willemsen2acbec52017-09-14 17:28:36 -0700154}
155
Luis Hector Chavezc90ec152019-12-13 09:12:33 -0800156cc_object {
157 name: "libminijail_gen_constants_llvmir",
158 vendor_available: true,
Justin Yuned25bf32020-11-11 18:21:21 +0900159 product_available: true,
Luis Hector Chavezc90ec152019-12-13 09:12:33 -0800160 recovery_available: true,
161 host_supported: true,
Martin Stjernholma74925e2020-04-08 01:02:51 +0100162 header_libs: ["libc_headers"], // TODO(b/153662223): Clean this up.
Luis Hector Chavezc90ec152019-12-13 09:12:33 -0800163 cflags: [
164 "-S",
165 "-O0",
166 "-emit-llvm",
167 ],
168
169 target: {
170 android: {
171 generated_sources: ["libminijail_gen_constants"],
172 },
173 host: {
174 srcs: ["linux-x86/libconstants.gen.c"],
175 },
176 },
177}
178
179cc_object {
180 name: "libminijail_gen_syscall_llvmir",
181 vendor_available: true,
Justin Yuned25bf32020-11-11 18:21:21 +0900182 product_available: true,
Luis Hector Chavezc90ec152019-12-13 09:12:33 -0800183 recovery_available: true,
184 host_supported: true,
Martin Stjernholma74925e2020-04-08 01:02:51 +0100185 header_libs: ["libc_headers"], // TODO(b/153662223): Clean this up.
Luis Hector Chavezc90ec152019-12-13 09:12:33 -0800186 cflags: [
187 "-S",
188 "-O0",
189 "-emit-llvm",
190 ],
191
192 target: {
193 android: {
194 generated_sources: ["libminijail_gen_syscall"],
195 },
196 host: {
197 srcs: ["linux-x86/libsyscalls.gen.c"],
198 },
199 },
200}
201
Dan Willemsen2acbec52017-09-14 17:28:36 -0700202// libminijail shared and static library for target.
203// =========================================================
204cc_library {
205 name: "libminijail",
Luis Hector Chavez413af652018-04-19 20:15:13 -0700206 host_supported: true,
Logan Chien9460f602017-11-21 20:32:45 +0800207
Dan Willemsen2acbec52017-09-14 17:28:36 -0700208 vendor_available: true,
Justin Yuned25bf32020-11-11 18:21:21 +0900209 product_available: true,
Jiyong Park85e7a262018-05-24 14:09:04 +0900210 recovery_available: true,
Logan Chien9460f602017-11-21 20:32:45 +0800211 vndk: {
212 enabled: true,
213 },
214
Dan Willemsen2acbec52017-09-14 17:28:36 -0700215 defaults: ["libminijail_flags"],
216
217 srcs: libminijailSrcFiles,
218
219 static: {
220 whole_static_libs: ["libminijail_generated"] + minijailCommonLibraries,
221 },
222 shared: {
223 static_libs: ["libminijail_generated"],
224 shared_libs: minijailCommonLibraries,
225 },
226 export_include_dirs: ["."],
Luis Hector Chavez413af652018-04-19 20:15:13 -0700227
228 target: {
229 host: {
230 cflags: [
231 "-DPRELOADPATH=\"/invalidminijailpreload.so\"",
232 ],
233 },
234 },
Jiyong Parke3a5cae2020-04-08 22:37:24 +0900235 apex_available: [
236 "//apex_available:platform",
237 "com.android.adbd",
238 "com.android.media.swcodec",
239 ],
Jooyung Han42b623b2020-04-16 18:48:30 +0900240 min_sdk_version: "29",
Dan Willemsen2acbec52017-09-14 17:28:36 -0700241}
242
243// Example ASan-ified libminijail shared library for target.
244// Commented out since it's only needed for local debugging.
245// =========================================================
246//cc_library_shared {
247// name: "libminijail_asan",
248// defaults: ["libminijail_flags"],
249//
250// sanitize: {
251// address: true,
252// },
253// relative_install_path: "asan",
254// srcs: libminijailSrcFiles,
255//
256// static_libs: ["libminijail_generated"],
257// shared_libs: minijailCommonLibraries,
258// export_include_dirs: ["."],
259//}
260
261// libminijail native unit tests using gtest.
262//
263// For a device, run with:
264// adb shell /data/nativetest/libminijail_unittest_gtest/libminijail_unittest_gtest
265//
266// For host, run with:
267// out/host/linux-x86/nativetest(64)/libminijail_unittest_gtest/libminijail_unittest_gtest
268// =========================================================
269cc_test {
270 name: "libminijail_unittest_gtest",
271 defaults: ["libminijail_flags"],
272 // TODO(b/31395668): Re-enable once the seccomp(2) syscall becomes available.
273 //host_supported: true
274
275 srcs: libminijailSrcFiles + ["libminijail_unittest.cc"] + unittestSrcFiles,
276
277 static_libs: ["libminijail_generated"],
278 shared_libs: minijailCommonLibraries,
279
280 target: {
281 android: {
282 cflags: ["-Wno-writable-strings"],
283 test_suites: ["device-tests"],
284 },
285 host: {
286 cflags: ["-DPRELOADPATH=\"/invalid\""],
287 },
288 },
289}
290
291// Syscall filtering native unit tests using gtest.
292//
293// For a device, run with:
294// adb shell /data/nativetest/syscall_filter_unittest_gtest/syscall_filter_unittest_gtest
295//
296// For host, run with:
297// out/host/linux-x86/nativetest(64)/syscall_filter_unittest_gtest/syscall_filter_unittest_gtest
298// =========================================================
299cc_test {
300 name: "syscall_filter_unittest_gtest",
301 defaults: ["libminijail_flags"],
302 host_supported: true,
303
304 srcs: [
305 "bpf.c",
306 "syscall_filter.c",
307 "util.c",
308 "syscall_filter_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
321// System functionality unit tests using gtest.
322//
323// For a device, run with:
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500324// adb shell /data/nativetest/mj_system_unittest_gtest/mj_system_unittest_gtest
Dan Willemsen2acbec52017-09-14 17:28:36 -0700325//
326// For host, run with:
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500327// out/host/linux-x86/nativetest(64)/mj_system_unittest_gtest/mj_system_unittest_gtest
Dan Willemsen2acbec52017-09-14 17:28:36 -0700328// =========================================================
329cc_test {
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500330 name: "mj_system_unittest_gtest",
Dan Willemsen2acbec52017-09-14 17:28:36 -0700331 defaults: ["libminijail_flags"],
332 host_supported: true,
333
334 srcs: [
335 "system.c",
336 "util.c",
337 "system_unittest.cc",
338 ] + unittestSrcFiles,
339
340 static_libs: ["libminijail_generated"],
341 shared_libs: minijailCommonLibraries,
342
343 target: {
344 android: {
345 test_suites: ["device-tests"],
346 },
347 },
348}
349
Mike Frysinger32c39922018-01-17 17:09:54 -0500350// Utility functionality unit tests using gtest.
351//
352// For a device, run with:
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500353// adb shell /data/nativetest/mj_util_unittest_gtest/mj_util_unittest_gtest
Mike Frysinger32c39922018-01-17 17:09:54 -0500354//
355// For host, run with:
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500356// out/host/linux-x86/nativetest(64)/mj_util_unittest_gtest/mj_util_unittest_gtest
Mike Frysinger32c39922018-01-17 17:09:54 -0500357// =========================================================
358cc_test {
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500359 name: "mj_util_unittest_gtest",
Mike Frysinger32c39922018-01-17 17:09:54 -0500360 defaults: ["libminijail_flags"],
361 host_supported: true,
362
363 srcs: [
364 "util.c",
365 "util_unittest.cc",
366 ] + unittestSrcFiles,
367
368 static_libs: ["libminijail_generated"],
369 shared_libs: minijailCommonLibraries,
370
371 target: {
372 android: {
373 test_suites: ["device-tests"],
374 },
375 },
376}
377
Mike Frysinger4d2a81e2018-01-22 16:43:33 -0500378// Utility functionality unit tests using gtest.
379//
380// For a device, run with:
381// adb shell /data/nativetest/minijail0_cli_unittest_gtest/minijail0_cli_unittest_gtest
382//
383// For host, run with:
384// out/host/linux-x86/nativetest(64)/minijail0_cli_unittest_gtest/minijail0_cli_unittest_gtest
385// =========================================================
386cc_test {
387 name: "minijail0_cli_unittest_gtest",
388 defaults: ["libminijail_flags"],
389 host_supported: true,
390
391 cflags: [
392 "-DPRELOADPATH=\"/invalid\"",
393 ],
394 srcs: libminijailSrcFiles + [
395 "elfparse.c",
396 "minijail0_cli.c",
397 "minijail0_cli_unittest.cc",
398 ] + unittestSrcFiles,
399
400 static_libs: ["libminijail_generated"],
401 shared_libs: minijailCommonLibraries,
402
403 target: {
404 android: {
405 test_suites: ["device-tests"],
406 },
407 },
408}
409
Dan Willemsen2acbec52017-09-14 17:28:36 -0700410// libminijail_test executable for brillo_Minijail test.
411// =========================================================
412cc_test {
413 name: "libminijail_test",
414 defaults: ["libminijail_flags"],
415 test_suites: ["device-tests"],
416
417 gtest: false,
418
419 srcs: ["test/libminijail_test.cpp"],
420
421 shared_libs: [
422 "libbase",
423 "libminijail",
424 ],
425}
426
427// libminijail usage example.
428// =========================================================
429cc_binary {
430 name: "drop_privs",
431 defaults: ["libminijail_flags"],
432
433 // Don't build with ASan, but leave commented out for easy local debugging.
434 // sanitize: { address: true, },
435 srcs: ["examples/drop_privs.cpp"],
436
437 shared_libs: [
438 "libbase",
439 "libminijail",
440 ],
441}
442
443// minijail0 executable.
444// This is not currently used on Brillo/Android,
445// but it's convenient to be able to build it.
446// =========================================================
447cc_binary {
448 name: "minijail0",
449 defaults: ["libminijail_flags"],
Luis Hector Chavez413af652018-04-19 20:15:13 -0700450 host_supported: true,
Dan Willemsen2acbec52017-09-14 17:28:36 -0700451
452 cflags: [
Dan Willemsen2acbec52017-09-14 17:28:36 -0700453 "-DPRELOADPATH=\"/invalidminijailpreload.so\"",
454 ],
455 srcs: [
456 "elfparse.c",
457 "minijail0.c",
Mike Frysinger5ef22ca2018-01-20 13:42:10 -0500458 "minijail0_cli.c",
Dan Willemsen2acbec52017-09-14 17:28:36 -0700459 ],
460
461 static_libs: ["libminijail_generated"],
462 shared_libs: minijailCommonLibraries + ["libminijail"],
463}
Lingfeng Yanga111f542020-02-20 08:50:39 -0800464
Yo Chiang81df0662020-07-25 19:40:44 +0800465rust_defaults {
466 name: "libminijail_rust_defaults",
467 target: {
468 darwin: {
469 enabled: false,
470 },
471 },
472}
473
Andrew Walbran9bd40192020-06-05 14:44:30 +0100474// This target was generated by cargo2android.py --run --device, with some
475// manual fixes.
Andrew Walbran7f5b63b2020-07-21 14:30:42 +0100476rust_library {
Lingfeng Yanga111f542020-02-20 08:50:39 -0800477 name: "libminijail_sys",
Yo Chiang81df0662020-07-25 19:40:44 +0800478 defaults: ["libminijail_rust_defaults"],
Andrew Walbran9bd40192020-06-05 14:44:30 +0100479 host_supported: true,
Lingfeng Yanga111f542020-02-20 08:50:39 -0800480 crate_name: "minijail_sys",
Allen Webb96dd14e2020-06-17 08:33:50 -0700481 srcs: ["rust/minijail-sys/lib.rs"],
Lingfeng Yanga111f542020-02-20 08:50:39 -0800482 edition: "2018",
Andrew Walbran7f5b63b2020-07-21 14:30:42 +0100483 rustlibs: [
Lingfeng Yanga111f542020-02-20 08:50:39 -0800484 "liblibc",
485 ],
Lingfeng Yanga111f542020-02-20 08:50:39 -0800486 shared_libs: [
487 "libcap",
Alistair Delva54fa7322020-08-24 13:01:05 -0700488 "libminijail",
Lingfeng Yanga111f542020-02-20 08:50:39 -0800489 ],
490}
Alistair Delva9072fad2020-07-20 22:57:57 -0700491
492// This target was generated by cargo2android.py --run --device, with some
493// manual fixes.
Andrew Walbran7f5b63b2020-07-21 14:30:42 +0100494rust_library {
Alistair Delva9072fad2020-07-20 22:57:57 -0700495 name: "libminijail_rust",
Yo Chiang81df0662020-07-25 19:40:44 +0800496 defaults: ["libminijail_rust_defaults"],
Alistair Delva9072fad2020-07-20 22:57:57 -0700497 host_supported: true,
498 crate_name: "minijail",
499 srcs: ["rust/minijail/src/lib.rs"],
500 edition: "2018",
Andrew Walbran7f5b63b2020-07-21 14:30:42 +0100501 rustlibs: [
Alistair Delva9072fad2020-07-20 22:57:57 -0700502 "liblibc",
503 "libminijail_sys",
504 ],
505}