blob: a52439e055ca98a3cb9bb5879080346aebfd418a [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: [
36 "-DHAVE_SECUREBITS_H",
37 "-Wall",
38 "-Werror",
39 ],
40 target: {
41 darwin: {
42 enabled: false,
43 },
44 },
45}
46
47// Static library for generated code.
48// =========================================================
49cc_object {
50 name: "libminijail_gen_syscall_obj",
51 vendor_available: true,
52 srcs: ["gen_syscalls.c"],
53 cflags: [
54 "-dD",
55 "-E",
Chih-Hung Hsiehed6a82e2017-10-04 10:54:11 -070056 "-Wall",
57 "-Werror",
Dan Willemsen2acbec52017-09-14 17:28:36 -070058 ],
59}
60
61cc_genrule {
62 name: "libminijail_gen_syscall",
63 vendor_available: true,
64 tool_files: ["gen_syscalls.sh"],
65 cmd: "$(location gen_syscalls.sh) $(in) $(out)",
66 srcs: [":libminijail_gen_syscall_obj"],
67 out: ["libsyscalls.c"],
68}
69
70cc_object {
71 name: "libminijail_gen_constants_obj",
72 vendor_available: true,
73 srcs: ["gen_constants.c"],
74 cflags: [
75 "-dD",
76 "-E",
Chih-Hung Hsiehed6a82e2017-10-04 10:54:11 -070077 "-Wall",
78 "-Werror",
Dan Willemsen2acbec52017-09-14 17:28:36 -070079 ],
80}
81
82cc_genrule {
83 name: "libminijail_gen_constants",
84 vendor_available: true,
85 tool_files: ["gen_constants.sh"],
86 cmd: "$(location gen_constants.sh) $(in) $(out)",
87 srcs: [":libminijail_gen_constants_obj"],
88 out: ["libconstants.c"],
89}
90
91cc_library_static {
92 name: "libminijail_generated",
93 vendor_available: true,
94 defaults: ["libminijail_flags"],
95 host_supported: true,
96
97 target: {
98 android: {
99 generated_sources: [
100 "libminijail_gen_syscall",
101 "libminijail_gen_constants",
102 ],
103 },
104 host: {
105 srcs: [
106 "linux-x86/libconstants.gen.c",
107 "linux-x86/libsyscalls.gen.c",
108 ],
109 },
110 },
111}
112
113// libminijail shared and static library for target.
114// =========================================================
115cc_library {
116 name: "libminijail",
Logan Chiena62adc62017-11-21 20:32:45 +0800117
Dan Willemsen2acbec52017-09-14 17:28:36 -0700118 vendor_available: true,
Logan Chiena62adc62017-11-21 20:32:45 +0800119 vndk: {
120 enabled: true,
121 },
122
Dan Willemsen2acbec52017-09-14 17:28:36 -0700123 defaults: ["libminijail_flags"],
124
125 srcs: libminijailSrcFiles,
126
127 static: {
128 whole_static_libs: ["libminijail_generated"] + minijailCommonLibraries,
129 },
130 shared: {
131 static_libs: ["libminijail_generated"],
132 shared_libs: minijailCommonLibraries,
133 },
134 export_include_dirs: ["."],
135}
136
137// Example ASan-ified libminijail shared library for target.
138// Commented out since it's only needed for local debugging.
139// =========================================================
140//cc_library_shared {
141// name: "libminijail_asan",
142// defaults: ["libminijail_flags"],
143//
144// sanitize: {
145// address: true,
146// },
147// relative_install_path: "asan",
148// srcs: libminijailSrcFiles,
149//
150// static_libs: ["libminijail_generated"],
151// shared_libs: minijailCommonLibraries,
152// export_include_dirs: ["."],
153//}
154
155// libminijail native unit tests using gtest.
156//
157// For a device, run with:
158// adb shell /data/nativetest/libminijail_unittest_gtest/libminijail_unittest_gtest
159//
160// For host, run with:
161// out/host/linux-x86/nativetest(64)/libminijail_unittest_gtest/libminijail_unittest_gtest
162// =========================================================
163cc_test {
164 name: "libminijail_unittest_gtest",
165 defaults: ["libminijail_flags"],
166 // TODO(b/31395668): Re-enable once the seccomp(2) syscall becomes available.
167 //host_supported: true
168
169 srcs: libminijailSrcFiles + ["libminijail_unittest.cc"] + unittestSrcFiles,
170
171 static_libs: ["libminijail_generated"],
172 shared_libs: minijailCommonLibraries,
173
174 target: {
175 android: {
176 cflags: ["-Wno-writable-strings"],
177 test_suites: ["device-tests"],
178 },
179 host: {
180 cflags: ["-DPRELOADPATH=\"/invalid\""],
181 },
182 },
183}
184
185// Syscall filtering native unit tests using gtest.
186//
187// For a device, run with:
188// adb shell /data/nativetest/syscall_filter_unittest_gtest/syscall_filter_unittest_gtest
189//
190// For host, run with:
191// out/host/linux-x86/nativetest(64)/syscall_filter_unittest_gtest/syscall_filter_unittest_gtest
192// =========================================================
193cc_test {
194 name: "syscall_filter_unittest_gtest",
195 defaults: ["libminijail_flags"],
196 host_supported: true,
197
198 srcs: [
199 "bpf.c",
200 "syscall_filter.c",
201 "util.c",
202 "syscall_filter_unittest.cc",
203 ] + unittestSrcFiles,
204
205 static_libs: ["libminijail_generated"],
206 shared_libs: minijailCommonLibraries,
207
208 target: {
209 android: {
210 test_suites: ["device-tests"],
211 },
212 },
213}
214
215// System functionality unit tests using gtest.
216//
217// For a device, run with:
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500218// adb shell /data/nativetest/mj_system_unittest_gtest/mj_system_unittest_gtest
Dan Willemsen2acbec52017-09-14 17:28:36 -0700219//
220// For host, run with:
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500221// out/host/linux-x86/nativetest(64)/mj_system_unittest_gtest/mj_system_unittest_gtest
Dan Willemsen2acbec52017-09-14 17:28:36 -0700222// =========================================================
223cc_test {
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500224 name: "mj_system_unittest_gtest",
Dan Willemsen2acbec52017-09-14 17:28:36 -0700225 defaults: ["libminijail_flags"],
226 host_supported: true,
227
228 srcs: [
229 "system.c",
230 "util.c",
231 "system_unittest.cc",
232 ] + unittestSrcFiles,
233
234 static_libs: ["libminijail_generated"],
235 shared_libs: minijailCommonLibraries,
236
237 target: {
238 android: {
239 test_suites: ["device-tests"],
240 },
241 },
242}
243
Mike Frysinger32c39922018-01-17 17:09:54 -0500244// Utility functionality unit tests using gtest.
245//
246// For a device, run with:
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500247// adb shell /data/nativetest/mj_util_unittest_gtest/mj_util_unittest_gtest
Mike Frysinger32c39922018-01-17 17:09:54 -0500248//
249// For host, run with:
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500250// out/host/linux-x86/nativetest(64)/mj_util_unittest_gtest/mj_util_unittest_gtest
Mike Frysinger32c39922018-01-17 17:09:54 -0500251// =========================================================
252cc_test {
Jorge Lucangeli Obes1ed75bc2018-01-25 14:06:42 -0500253 name: "mj_util_unittest_gtest",
Mike Frysinger32c39922018-01-17 17:09:54 -0500254 defaults: ["libminijail_flags"],
255 host_supported: true,
256
257 srcs: [
258 "util.c",
259 "util_unittest.cc",
260 ] + unittestSrcFiles,
261
262 static_libs: ["libminijail_generated"],
263 shared_libs: minijailCommonLibraries,
264
265 target: {
266 android: {
267 test_suites: ["device-tests"],
268 },
269 },
270}
271
Mike Frysinger4d2a81e2018-01-22 16:43:33 -0500272// Utility functionality unit tests using gtest.
273//
274// For a device, run with:
275// adb shell /data/nativetest/minijail0_cli_unittest_gtest/minijail0_cli_unittest_gtest
276//
277// For host, run with:
278// out/host/linux-x86/nativetest(64)/minijail0_cli_unittest_gtest/minijail0_cli_unittest_gtest
279// =========================================================
280cc_test {
281 name: "minijail0_cli_unittest_gtest",
282 defaults: ["libminijail_flags"],
283 host_supported: true,
284
285 cflags: [
286 "-DPRELOADPATH=\"/invalid\"",
287 ],
288 srcs: libminijailSrcFiles + [
289 "elfparse.c",
290 "minijail0_cli.c",
291 "minijail0_cli_unittest.cc",
292 ] + unittestSrcFiles,
293
294 static_libs: ["libminijail_generated"],
295 shared_libs: minijailCommonLibraries,
296
297 target: {
298 android: {
299 test_suites: ["device-tests"],
300 },
301 },
302}
303
Dan Willemsen2acbec52017-09-14 17:28:36 -0700304// libminijail_test executable for brillo_Minijail test.
305// =========================================================
306cc_test {
307 name: "libminijail_test",
308 defaults: ["libminijail_flags"],
309 test_suites: ["device-tests"],
310
311 gtest: false,
312
313 srcs: ["test/libminijail_test.cpp"],
314
315 shared_libs: [
316 "libbase",
317 "libminijail",
318 ],
319}
320
321// libminijail usage example.
322// =========================================================
323cc_binary {
324 name: "drop_privs",
325 defaults: ["libminijail_flags"],
326
327 // Don't build with ASan, but leave commented out for easy local debugging.
328 // sanitize: { address: true, },
329 srcs: ["examples/drop_privs.cpp"],
330
331 shared_libs: [
332 "libbase",
333 "libminijail",
334 ],
335}
336
337// minijail0 executable.
338// This is not currently used on Brillo/Android,
339// but it's convenient to be able to build it.
340// =========================================================
341cc_binary {
342 name: "minijail0",
343 defaults: ["libminijail_flags"],
344
345 cflags: [
Dan Willemsen2acbec52017-09-14 17:28:36 -0700346 "-DPRELOADPATH=\"/invalidminijailpreload.so\"",
347 ],
348 srcs: [
349 "elfparse.c",
350 "minijail0.c",
Mike Frysinger5ef22ca2018-01-20 13:42:10 -0500351 "minijail0_cli.c",
Dan Willemsen2acbec52017-09-14 17:28:36 -0700352 ],
353
354 static_libs: ["libminijail_generated"],
355 shared_libs: minijailCommonLibraries + ["libminijail"],
356}