blob: 736dfd2592a81b1726d2f1fdf5bd09e63e0bc8a7 [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 ],
Jiyong Parka1fe6b82020-04-08 22:37:24 +090062 apex_available: [
63 "//apex_available:platform",
64 "com.android.adbd",
65 "com.android.media.swcodec",
66 ],
Jooyung Handd66b182020-04-16 18:48:30 +090067 min_sdk_version: "29",
Dan Willemsen2acbec52017-09-14 17:28:36 -070068}
69
70cc_genrule {
71 name: "libminijail_gen_syscall",
72 vendor_available: true,
Jiyong Park85e7a262018-05-24 14:09:04 +090073 recovery_available: true,
Dan Willemsen2acbec52017-09-14 17:28:36 -070074 tool_files: ["gen_syscalls.sh"],
75 cmd: "$(location gen_syscalls.sh) $(in) $(out)",
76 srcs: [":libminijail_gen_syscall_obj"],
77 out: ["libsyscalls.c"],
Jiyong Parka1fe6b82020-04-08 22:37:24 +090078 apex_available: [
79 "//apex_available:platform",
80 "com.android.adbd",
81 "com.android.media.swcodec",
82 ],
Dan Willemsen2acbec52017-09-14 17:28:36 -070083}
84
85cc_object {
86 name: "libminijail_gen_constants_obj",
87 vendor_available: true,
Jiyong Park85e7a262018-05-24 14:09:04 +090088 recovery_available: true,
Dan Willemsen2acbec52017-09-14 17:28:36 -070089 srcs: ["gen_constants.c"],
90 cflags: [
91 "-dD",
92 "-E",
Chih-Hung Hsiehed6a82e2017-10-04 10:54:11 -070093 "-Wall",
94 "-Werror",
Dan Willemsen2acbec52017-09-14 17:28:36 -070095 ],
Jiyong Parka1fe6b82020-04-08 22:37:24 +090096 apex_available: [
97 "//apex_available:platform",
98 "com.android.adbd",
99 "com.android.media.swcodec",
100 ],
Jooyung Handd66b182020-04-16 18:48:30 +0900101 min_sdk_version: "29",
Dan Willemsen2acbec52017-09-14 17:28:36 -0700102}
103
104cc_genrule {
105 name: "libminijail_gen_constants",
106 vendor_available: true,
Jiyong Park85e7a262018-05-24 14:09:04 +0900107 recovery_available: true,
Dan Willemsen2acbec52017-09-14 17:28:36 -0700108 tool_files: ["gen_constants.sh"],
109 cmd: "$(location gen_constants.sh) $(in) $(out)",
110 srcs: [":libminijail_gen_constants_obj"],
111 out: ["libconstants.c"],
Jiyong Parka1fe6b82020-04-08 22:37:24 +0900112 apex_available: [
113 "//apex_available:platform",
114 "com.android.adbd",
115 "com.android.media.swcodec",
116 ],
Dan Willemsen2acbec52017-09-14 17:28:36 -0700117}
118
119cc_library_static {
120 name: "libminijail_generated",
121 vendor_available: true,
Jiyong Park85e7a262018-05-24 14:09:04 +0900122 recovery_available: true,
Dan Willemsen2acbec52017-09-14 17:28:36 -0700123 defaults: ["libminijail_flags"],
124 host_supported: true,
125
126 target: {
127 android: {
128 generated_sources: [
129 "libminijail_gen_syscall",
130 "libminijail_gen_constants",
131 ],
132 },
133 host: {
134 srcs: [
135 "linux-x86/libconstants.gen.c",
136 "linux-x86/libsyscalls.gen.c",
137 ],
138 },
139 },
Jiyong Parka1fe6b82020-04-08 22:37:24 +0900140 apex_available: [
141 "//apex_available:platform",
142 "com.android.adbd",
143 "com.android.media.swcodec",
144 ],
Jooyung Handd66b182020-04-16 18:48:30 +0900145 min_sdk_version: "29",
Dan Willemsen2acbec52017-09-14 17:28:36 -0700146}
147
Luis Hector Chavezc90ec152019-12-13 09:12:33 -0800148cc_object {
149 name: "libminijail_gen_constants_llvmir",
150 vendor_available: true,
151 recovery_available: true,
152 host_supported: true,
153 cflags: [
154 "-S",
155 "-O0",
156 "-emit-llvm",
157 ],
158
159 target: {
160 android: {
161 generated_sources: ["libminijail_gen_constants"],
162 },
163 host: {
164 srcs: ["linux-x86/libconstants.gen.c"],
165 },
166 },
167}
168
169cc_object {
170 name: "libminijail_gen_syscall_llvmir",
171 vendor_available: true,
172 recovery_available: true,
173 host_supported: true,
174 cflags: [
175 "-S",
176 "-O0",
177 "-emit-llvm",
178 ],
179
180 target: {
181 android: {
182 generated_sources: ["libminijail_gen_syscall"],
183 },
184 host: {
185 srcs: ["linux-x86/libsyscalls.gen.c"],
186 },
187 },
188}
189
Dan Willemsen2acbec52017-09-14 17:28:36 -0700190// libminijail shared and static library for target.
191// =========================================================
192cc_library {
193 name: "libminijail",
Luis Hector Chavez413af652018-04-19 20:15:13 -0700194 host_supported: true,
Logan Chien9460f602017-11-21 20:32:45 +0800195
Dan Willemsen2acbec52017-09-14 17:28:36 -0700196 vendor_available: true,
Jiyong Park85e7a262018-05-24 14:09:04 +0900197 recovery_available: true,
Logan Chien9460f602017-11-21 20:32:45 +0800198 vndk: {
199 enabled: true,
200 },
201
Dan Willemsen2acbec52017-09-14 17:28:36 -0700202 defaults: ["libminijail_flags"],
203
204 srcs: libminijailSrcFiles,
205
206 static: {
207 whole_static_libs: ["libminijail_generated"] + minijailCommonLibraries,
208 },
209 shared: {
210 static_libs: ["libminijail_generated"],
211 shared_libs: minijailCommonLibraries,
212 },
213 export_include_dirs: ["."],
Luis Hector Chavez413af652018-04-19 20:15:13 -0700214
215 target: {
216 host: {
217 cflags: [
218 "-DPRELOADPATH=\"/invalidminijailpreload.so\"",
219 ],
220 },
221 },
Jiyong Parka1fe6b82020-04-08 22:37:24 +0900222 apex_available: [
223 "//apex_available:platform",
224 "com.android.adbd",
225 "com.android.media.swcodec",
226 ],
Jooyung Handd66b182020-04-16 18:48:30 +0900227 min_sdk_version: "29",
Dan Willemsen2acbec52017-09-14 17:28:36 -0700228}
229
230// Example ASan-ified libminijail shared library for target.
231// Commented out since it's only needed for local debugging.
232// =========================================================
233//cc_library_shared {
234// name: "libminijail_asan",
235// defaults: ["libminijail_flags"],
236//
237// sanitize: {
238// address: true,
239// },
240// relative_install_path: "asan",
241// srcs: libminijailSrcFiles,
242//
243// static_libs: ["libminijail_generated"],
244// shared_libs: minijailCommonLibraries,
245// export_include_dirs: ["."],
246//}
247
248// libminijail native unit tests using gtest.
249//
250// For a device, run with:
251// adb shell /data/nativetest/libminijail_unittest_gtest/libminijail_unittest_gtest
252//
253// For host, run with:
254// out/host/linux-x86/nativetest(64)/libminijail_unittest_gtest/libminijail_unittest_gtest
255// =========================================================
256cc_test {
257 name: "libminijail_unittest_gtest",
258 defaults: ["libminijail_flags"],
259 // TODO(b/31395668): Re-enable once the seccomp(2) syscall becomes available.
260 //host_supported: true
261
262 srcs: libminijailSrcFiles + ["libminijail_unittest.cc"] + unittestSrcFiles,
263
264 static_libs: ["libminijail_generated"],
265 shared_libs: minijailCommonLibraries,
266
267 target: {
268 android: {
269 cflags: ["-Wno-writable-strings"],
270 test_suites: ["device-tests"],
271 },
272 host: {
273 cflags: ["-DPRELOADPATH=\"/invalid\""],
274 },
275 },
276}
277
278// Syscall filtering native unit tests using gtest.
279//
280// For a device, run with:
281// adb shell /data/nativetest/syscall_filter_unittest_gtest/syscall_filter_unittest_gtest
282//
283// For host, run with:
284// out/host/linux-x86/nativetest(64)/syscall_filter_unittest_gtest/syscall_filter_unittest_gtest
285// =========================================================
286cc_test {
287 name: "syscall_filter_unittest_gtest",
288 defaults: ["libminijail_flags"],
289 host_supported: true,
290
291 srcs: [
292 "bpf.c",
293 "syscall_filter.c",
294 "util.c",
295 "syscall_filter_unittest.cc",
296 ] + unittestSrcFiles,
297
298 static_libs: ["libminijail_generated"],
299 shared_libs: minijailCommonLibraries,
300
301 target: {
302 android: {
303 test_suites: ["device-tests"],
304 },
305 },
306}
307
308// System functionality unit tests using gtest.
309//
310// For a device, run with:
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500311// adb shell /data/nativetest/mj_system_unittest_gtest/mj_system_unittest_gtest
Dan Willemsen2acbec52017-09-14 17:28:36 -0700312//
313// For host, run with:
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500314// out/host/linux-x86/nativetest(64)/mj_system_unittest_gtest/mj_system_unittest_gtest
Dan Willemsen2acbec52017-09-14 17:28:36 -0700315// =========================================================
316cc_test {
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500317 name: "mj_system_unittest_gtest",
Dan Willemsen2acbec52017-09-14 17:28:36 -0700318 defaults: ["libminijail_flags"],
319 host_supported: true,
320
321 srcs: [
322 "system.c",
323 "util.c",
324 "system_unittest.cc",
325 ] + unittestSrcFiles,
326
327 static_libs: ["libminijail_generated"],
328 shared_libs: minijailCommonLibraries,
329
330 target: {
331 android: {
332 test_suites: ["device-tests"],
333 },
334 },
335}
336
Mike Frysinger32c39922018-01-17 17:09:54 -0500337// Utility functionality unit tests using gtest.
338//
339// For a device, run with:
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500340// adb shell /data/nativetest/mj_util_unittest_gtest/mj_util_unittest_gtest
Mike Frysinger32c39922018-01-17 17:09:54 -0500341//
342// For host, run with:
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500343// out/host/linux-x86/nativetest(64)/mj_util_unittest_gtest/mj_util_unittest_gtest
Mike Frysinger32c39922018-01-17 17:09:54 -0500344// =========================================================
345cc_test {
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500346 name: "mj_util_unittest_gtest",
Mike Frysinger32c39922018-01-17 17:09:54 -0500347 defaults: ["libminijail_flags"],
348 host_supported: true,
349
350 srcs: [
351 "util.c",
352 "util_unittest.cc",
353 ] + unittestSrcFiles,
354
355 static_libs: ["libminijail_generated"],
356 shared_libs: minijailCommonLibraries,
357
358 target: {
359 android: {
360 test_suites: ["device-tests"],
361 },
362 },
363}
364
Mike Frysinger4d2a81e2018-01-22 16:43:33 -0500365// Utility functionality unit tests using gtest.
366//
367// For a device, run with:
368// adb shell /data/nativetest/minijail0_cli_unittest_gtest/minijail0_cli_unittest_gtest
369//
370// For host, run with:
371// out/host/linux-x86/nativetest(64)/minijail0_cli_unittest_gtest/minijail0_cli_unittest_gtest
372// =========================================================
373cc_test {
374 name: "minijail0_cli_unittest_gtest",
375 defaults: ["libminijail_flags"],
376 host_supported: true,
377
378 cflags: [
379 "-DPRELOADPATH=\"/invalid\"",
380 ],
381 srcs: libminijailSrcFiles + [
382 "elfparse.c",
383 "minijail0_cli.c",
384 "minijail0_cli_unittest.cc",
385 ] + unittestSrcFiles,
386
387 static_libs: ["libminijail_generated"],
388 shared_libs: minijailCommonLibraries,
389
390 target: {
391 android: {
392 test_suites: ["device-tests"],
393 },
394 },
395}
396
Dan Willemsen2acbec52017-09-14 17:28:36 -0700397// libminijail_test executable for brillo_Minijail test.
398// =========================================================
399cc_test {
400 name: "libminijail_test",
401 defaults: ["libminijail_flags"],
402 test_suites: ["device-tests"],
403
404 gtest: false,
405
406 srcs: ["test/libminijail_test.cpp"],
407
408 shared_libs: [
409 "libbase",
410 "libminijail",
411 ],
412}
413
414// libminijail usage example.
415// =========================================================
416cc_binary {
417 name: "drop_privs",
418 defaults: ["libminijail_flags"],
419
420 // Don't build with ASan, but leave commented out for easy local debugging.
421 // sanitize: { address: true, },
422 srcs: ["examples/drop_privs.cpp"],
423
424 shared_libs: [
425 "libbase",
426 "libminijail",
427 ],
428}
429
430// minijail0 executable.
431// This is not currently used on Brillo/Android,
432// but it's convenient to be able to build it.
433// =========================================================
434cc_binary {
435 name: "minijail0",
436 defaults: ["libminijail_flags"],
Luis Hector Chavez413af652018-04-19 20:15:13 -0700437 host_supported: true,
Dan Willemsen2acbec52017-09-14 17:28:36 -0700438
439 cflags: [
Dan Willemsen2acbec52017-09-14 17:28:36 -0700440 "-DPRELOADPATH=\"/invalidminijailpreload.so\"",
441 ],
442 srcs: [
443 "elfparse.c",
444 "minijail0.c",
Mike Frysinger5ef22ca2018-01-20 13:42:10 -0500445 "minijail0_cli.c",
Dan Willemsen2acbec52017-09-14 17:28:36 -0700446 ],
447
448 static_libs: ["libminijail_generated"],
449 shared_libs: minijailCommonLibraries + ["libminijail"],
450}
Lingfeng Yanga111f542020-02-20 08:50:39 -0800451
452// Generated by cargo2android.
453rust_library_host_rlib {
454 name: "libminijail_sys",
455 crate_name: "minijail_sys",
456 srcs: ["lib.rs"],
457 edition: "2018",
458 rlibs: [
459 "liblibc",
460 ],
461 static_libs: [
462 "libminijail",
463 ],
464 shared_libs: [
465 "libcap",
466 ],
Lingfeng Yang6f9654d2020-02-21 07:35:51 -0800467 target: {
468 darwin: {
469 enabled: false,
Jooyung Handd66b182020-04-16 18:48:30 +0900470 },
Lingfeng Yang6f9654d2020-02-21 07:35:51 -0800471 },
Lingfeng Yanga111f542020-02-20 08:50:39 -0800472}