blob: 687a36652ab9ed654af03f46f88ac72ab917e83d [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 ],
62}
63
64cc_genrule {
65 name: "libminijail_gen_syscall",
66 vendor_available: true,
Jiyong Park85e7a262018-05-24 14:09:04 +090067 recovery_available: true,
Dan Willemsen2acbec52017-09-14 17:28:36 -070068 tool_files: ["gen_syscalls.sh"],
69 cmd: "$(location gen_syscalls.sh) $(in) $(out)",
70 srcs: [":libminijail_gen_syscall_obj"],
71 out: ["libsyscalls.c"],
72}
73
74cc_object {
75 name: "libminijail_gen_constants_obj",
76 vendor_available: true,
Jiyong Park85e7a262018-05-24 14:09:04 +090077 recovery_available: true,
Dan Willemsen2acbec52017-09-14 17:28:36 -070078 srcs: ["gen_constants.c"],
79 cflags: [
80 "-dD",
81 "-E",
Chih-Hung Hsiehed6a82e2017-10-04 10:54:11 -070082 "-Wall",
83 "-Werror",
Dan Willemsen2acbec52017-09-14 17:28:36 -070084 ],
85}
86
87cc_genrule {
88 name: "libminijail_gen_constants",
89 vendor_available: true,
Jiyong Park85e7a262018-05-24 14:09:04 +090090 recovery_available: true,
Dan Willemsen2acbec52017-09-14 17:28:36 -070091 tool_files: ["gen_constants.sh"],
92 cmd: "$(location gen_constants.sh) $(in) $(out)",
93 srcs: [":libminijail_gen_constants_obj"],
94 out: ["libconstants.c"],
95}
96
97cc_library_static {
98 name: "libminijail_generated",
99 vendor_available: true,
Jiyong Park85e7a262018-05-24 14:09:04 +0900100 recovery_available: true,
Dan Willemsen2acbec52017-09-14 17:28:36 -0700101 defaults: ["libminijail_flags"],
102 host_supported: true,
103
104 target: {
105 android: {
106 generated_sources: [
107 "libminijail_gen_syscall",
108 "libminijail_gen_constants",
109 ],
110 },
111 host: {
112 srcs: [
113 "linux-x86/libconstants.gen.c",
114 "linux-x86/libsyscalls.gen.c",
115 ],
116 },
117 },
118}
119
Luis Hector Chavezc90ec152019-12-13 09:12:33 -0800120cc_object {
121 name: "libminijail_gen_constants_llvmir",
122 vendor_available: true,
123 recovery_available: true,
124 host_supported: true,
125 cflags: [
126 "-S",
127 "-O0",
128 "-emit-llvm",
129 ],
130
131 target: {
132 android: {
133 generated_sources: ["libminijail_gen_constants"],
134 },
135 host: {
136 srcs: ["linux-x86/libconstants.gen.c"],
137 },
138 },
139}
140
141cc_object {
142 name: "libminijail_gen_syscall_llvmir",
143 vendor_available: true,
144 recovery_available: true,
145 host_supported: true,
146 cflags: [
147 "-S",
148 "-O0",
149 "-emit-llvm",
150 ],
151
152 target: {
153 android: {
154 generated_sources: ["libminijail_gen_syscall"],
155 },
156 host: {
157 srcs: ["linux-x86/libsyscalls.gen.c"],
158 },
159 },
160}
161
Dan Willemsen2acbec52017-09-14 17:28:36 -0700162// libminijail shared and static library for target.
163// =========================================================
164cc_library {
165 name: "libminijail",
Luis Hector Chavez413af652018-04-19 20:15:13 -0700166 host_supported: true,
Logan Chien9460f602017-11-21 20:32:45 +0800167
Dan Willemsen2acbec52017-09-14 17:28:36 -0700168 vendor_available: true,
Jiyong Park85e7a262018-05-24 14:09:04 +0900169 recovery_available: true,
Logan Chien9460f602017-11-21 20:32:45 +0800170 vndk: {
171 enabled: true,
172 },
173
Dan Willemsen2acbec52017-09-14 17:28:36 -0700174 defaults: ["libminijail_flags"],
175
176 srcs: libminijailSrcFiles,
177
178 static: {
179 whole_static_libs: ["libminijail_generated"] + minijailCommonLibraries,
180 },
181 shared: {
182 static_libs: ["libminijail_generated"],
183 shared_libs: minijailCommonLibraries,
184 },
185 export_include_dirs: ["."],
Luis Hector Chavez413af652018-04-19 20:15:13 -0700186
187 target: {
188 host: {
189 cflags: [
190 "-DPRELOADPATH=\"/invalidminijailpreload.so\"",
191 ],
192 },
193 },
Dan Willemsen2acbec52017-09-14 17:28:36 -0700194}
195
196// Example ASan-ified libminijail shared library for target.
197// Commented out since it's only needed for local debugging.
198// =========================================================
199//cc_library_shared {
200// name: "libminijail_asan",
201// defaults: ["libminijail_flags"],
202//
203// sanitize: {
204// address: true,
205// },
206// relative_install_path: "asan",
207// srcs: libminijailSrcFiles,
208//
209// static_libs: ["libminijail_generated"],
210// shared_libs: minijailCommonLibraries,
211// export_include_dirs: ["."],
212//}
213
214// libminijail native unit tests using gtest.
215//
216// For a device, run with:
217// adb shell /data/nativetest/libminijail_unittest_gtest/libminijail_unittest_gtest
218//
219// For host, run with:
220// out/host/linux-x86/nativetest(64)/libminijail_unittest_gtest/libminijail_unittest_gtest
221// =========================================================
222cc_test {
223 name: "libminijail_unittest_gtest",
224 defaults: ["libminijail_flags"],
225 // TODO(b/31395668): Re-enable once the seccomp(2) syscall becomes available.
226 //host_supported: true
227
228 srcs: libminijailSrcFiles + ["libminijail_unittest.cc"] + unittestSrcFiles,
229
230 static_libs: ["libminijail_generated"],
231 shared_libs: minijailCommonLibraries,
232
233 target: {
234 android: {
235 cflags: ["-Wno-writable-strings"],
236 test_suites: ["device-tests"],
237 },
238 host: {
239 cflags: ["-DPRELOADPATH=\"/invalid\""],
240 },
241 },
242}
243
244// Syscall filtering native unit tests using gtest.
245//
246// For a device, run with:
247// adb shell /data/nativetest/syscall_filter_unittest_gtest/syscall_filter_unittest_gtest
248//
249// For host, run with:
250// out/host/linux-x86/nativetest(64)/syscall_filter_unittest_gtest/syscall_filter_unittest_gtest
251// =========================================================
252cc_test {
253 name: "syscall_filter_unittest_gtest",
254 defaults: ["libminijail_flags"],
255 host_supported: true,
256
257 srcs: [
258 "bpf.c",
259 "syscall_filter.c",
260 "util.c",
261 "syscall_filter_unittest.cc",
262 ] + unittestSrcFiles,
263
264 static_libs: ["libminijail_generated"],
265 shared_libs: minijailCommonLibraries,
266
267 target: {
268 android: {
269 test_suites: ["device-tests"],
270 },
271 },
272}
273
274// System functionality unit tests using gtest.
275//
276// For a device, run with:
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500277// adb shell /data/nativetest/mj_system_unittest_gtest/mj_system_unittest_gtest
Dan Willemsen2acbec52017-09-14 17:28:36 -0700278//
279// For host, run with:
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500280// out/host/linux-x86/nativetest(64)/mj_system_unittest_gtest/mj_system_unittest_gtest
Dan Willemsen2acbec52017-09-14 17:28:36 -0700281// =========================================================
282cc_test {
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500283 name: "mj_system_unittest_gtest",
Dan Willemsen2acbec52017-09-14 17:28:36 -0700284 defaults: ["libminijail_flags"],
285 host_supported: true,
286
287 srcs: [
288 "system.c",
289 "util.c",
290 "system_unittest.cc",
291 ] + unittestSrcFiles,
292
293 static_libs: ["libminijail_generated"],
294 shared_libs: minijailCommonLibraries,
295
296 target: {
297 android: {
298 test_suites: ["device-tests"],
299 },
300 },
301}
302
Mike Frysinger32c39922018-01-17 17:09:54 -0500303// Utility functionality unit tests using gtest.
304//
305// For a device, run with:
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500306// adb shell /data/nativetest/mj_util_unittest_gtest/mj_util_unittest_gtest
Mike Frysinger32c39922018-01-17 17:09:54 -0500307//
308// For host, run with:
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500309// out/host/linux-x86/nativetest(64)/mj_util_unittest_gtest/mj_util_unittest_gtest
Mike Frysinger32c39922018-01-17 17:09:54 -0500310// =========================================================
311cc_test {
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500312 name: "mj_util_unittest_gtest",
Mike Frysinger32c39922018-01-17 17:09:54 -0500313 defaults: ["libminijail_flags"],
314 host_supported: true,
315
316 srcs: [
317 "util.c",
318 "util_unittest.cc",
319 ] + unittestSrcFiles,
320
321 static_libs: ["libminijail_generated"],
322 shared_libs: minijailCommonLibraries,
323
324 target: {
325 android: {
326 test_suites: ["device-tests"],
327 },
328 },
329}
330
Mike Frysinger4d2a81e2018-01-22 16:43:33 -0500331// Utility functionality unit tests using gtest.
332//
333// For a device, run with:
334// adb shell /data/nativetest/minijail0_cli_unittest_gtest/minijail0_cli_unittest_gtest
335//
336// For host, run with:
337// out/host/linux-x86/nativetest(64)/minijail0_cli_unittest_gtest/minijail0_cli_unittest_gtest
338// =========================================================
339cc_test {
340 name: "minijail0_cli_unittest_gtest",
341 defaults: ["libminijail_flags"],
342 host_supported: true,
343
344 cflags: [
345 "-DPRELOADPATH=\"/invalid\"",
346 ],
347 srcs: libminijailSrcFiles + [
348 "elfparse.c",
349 "minijail0_cli.c",
350 "minijail0_cli_unittest.cc",
351 ] + unittestSrcFiles,
352
353 static_libs: ["libminijail_generated"],
354 shared_libs: minijailCommonLibraries,
355
356 target: {
357 android: {
358 test_suites: ["device-tests"],
359 },
360 },
361}
362
Dan Willemsen2acbec52017-09-14 17:28:36 -0700363// libminijail_test executable for brillo_Minijail test.
364// =========================================================
365cc_test {
366 name: "libminijail_test",
367 defaults: ["libminijail_flags"],
368 test_suites: ["device-tests"],
369
370 gtest: false,
371
372 srcs: ["test/libminijail_test.cpp"],
373
374 shared_libs: [
375 "libbase",
376 "libminijail",
377 ],
378}
379
380// libminijail usage example.
381// =========================================================
382cc_binary {
383 name: "drop_privs",
384 defaults: ["libminijail_flags"],
385
386 // Don't build with ASan, but leave commented out for easy local debugging.
387 // sanitize: { address: true, },
388 srcs: ["examples/drop_privs.cpp"],
389
390 shared_libs: [
391 "libbase",
392 "libminijail",
393 ],
394}
395
396// minijail0 executable.
397// This is not currently used on Brillo/Android,
398// but it's convenient to be able to build it.
399// =========================================================
400cc_binary {
401 name: "minijail0",
402 defaults: ["libminijail_flags"],
Luis Hector Chavez413af652018-04-19 20:15:13 -0700403 host_supported: true,
Dan Willemsen2acbec52017-09-14 17:28:36 -0700404
405 cflags: [
Dan Willemsen2acbec52017-09-14 17:28:36 -0700406 "-DPRELOADPATH=\"/invalidminijailpreload.so\"",
407 ],
408 srcs: [
409 "elfparse.c",
410 "minijail0.c",
Mike Frysinger5ef22ca2018-01-20 13:42:10 -0500411 "minijail0_cli.c",
Dan Willemsen2acbec52017-09-14 17:28:36 -0700412 ],
413
414 static_libs: ["libminijail_generated"],
415 shared_libs: minijailCommonLibraries + ["libminijail"],
416}
Lingfeng Yanga111f542020-02-20 08:50:39 -0800417
418// Generated by cargo2android.
419rust_library_host_rlib {
420 name: "libminijail_sys",
421 crate_name: "minijail_sys",
422 srcs: ["lib.rs"],
423 edition: "2018",
424 rlibs: [
425 "liblibc",
426 ],
427 static_libs: [
428 "libminijail",
429 ],
430 shared_libs: [
431 "libcap",
432 ],
433}