• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 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
15LOCAL_PATH := $(call my-dir)
16
17
18# Common variables.
19# =========================================================
20libminijailSrcFiles := \
21	bpf.c \
22	libminijail.c \
23	signal_handler.c \
24	syscall_filter.c \
25	syscall_wrapper.c \
26	util.c
27
28hostUnittestSrcFiles := \
29	linux-x86/libconstants.gen.c \
30	linux-x86/libsyscalls.gen.c
31
32minijailCommonCFlags := -DHAVE_SECUREBITS_H -Wall -Werror
33minijailCommonLibraries := libcap
34
35
36# Static library for generated code.
37# =========================================================
38include $(CLEAR_VARS)
39LOCAL_MODULE := libminijail_generated
40
41LOCAL_MODULE_CLASS := STATIC_LIBRARIES
42generated_sources_dir := $(local-generated-sources-dir)
43
44my_gen := $(generated_sources_dir)/$(TARGET_ARCH)/libsyscalls.c
45# We need the quotes so the shell script treats the following as one argument.
46my_cc := "$(lastword $(CLANG)) \
47    $(addprefix -I ,$(TARGET_C_INCLUDES)) \
48    $(addprefix -isystem ,$(TARGET_C_SYSTEM_INCLUDES)) \
49    $(CLANG_TARGET_GLOBAL_CFLAGS)"
50$(my_gen): PRIVATE_CC := $(my_cc)
51$(my_gen): PRIVATE_CUSTOM_TOOL = $< $(PRIVATE_CC) $@
52$(my_gen): $(LOCAL_PATH)/gen_syscalls.sh
53	$(transform-generated-source)
54$(call include-depfile,$(my_gen).d,$(my_gen))
55LOCAL_GENERATED_SOURCES_$(TARGET_ARCH) += $(my_gen)
56
57my_gen := $(generated_sources_dir)/$(TARGET_ARCH)/libconstants.c
58$(my_gen): PRIVATE_CC := $(my_cc)
59$(my_gen): PRIVATE_CUSTOM_TOOL = $< $(PRIVATE_CC) $@
60$(my_gen): $(LOCAL_PATH)/gen_constants.sh
61	$(transform-generated-source)
62$(call include-depfile,$(my_gen).d,$(my_gen))
63LOCAL_GENERATED_SOURCES_$(TARGET_ARCH) += $(my_gen)
64
65# For processes running in 32-bit compat mode on 64-bit processors.
66ifdef TARGET_2ND_ARCH
67my_gen := $(generated_sources_dir)/$(TARGET_2ND_ARCH)/libsyscalls.c
68my_cc := "$(lastword $(CLANG)) \
69    $(addprefix -I ,$($(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_C_INCLUDES)) \
70    $(addprefix -isystem ,$($(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_C_SYSTEM_INCLUDES)) \
71    $($(TARGET_2ND_ARCH_VAR_PREFIX)CLANG_TARGET_GLOBAL_CFLAGS)"
72$(my_gen): PRIVATE_CC := $(my_cc)
73$(my_gen): PRIVATE_CUSTOM_TOOL = $< $(PRIVATE_CC) $@
74$(my_gen): $(LOCAL_PATH)/gen_syscalls.sh
75	$(transform-generated-source)
76LOCAL_GENERATED_SOURCES_$(TARGET_2ND_ARCH) += $(my_gen)
77
78my_gen := $(generated_sources_dir)/$(TARGET_2ND_ARCH)/libconstants.c
79$(my_gen): PRIVATE_CC := $(my_cc)
80$(my_gen): PRIVATE_CUSTOM_TOOL = $< $(PRIVATE_CC) $@
81$(my_gen): $(LOCAL_PATH)/gen_constants.sh
82	$(transform-generated-source)
83LOCAL_GENERATED_SOURCES_$(TARGET_2ND_ARCH) += $(my_gen)
84endif
85
86LOCAL_CFLAGS := $(minijailCommonCFlags)
87LOCAL_CLANG := true
88include $(BUILD_STATIC_LIBRARY)
89
90
91# libminijail shared library for target.
92# =========================================================
93include $(CLEAR_VARS)
94LOCAL_MODULE := libminijail
95
96LOCAL_CFLAGS := $(minijailCommonCFlags)
97LOCAL_CLANG := true
98LOCAL_SRC_FILES := $(libminijailSrcFiles)
99
100LOCAL_STATIC_LIBRARIES := libminijail_generated
101LOCAL_SHARED_LIBRARIES := $(minijailCommonLibraries)
102LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)
103include $(BUILD_SHARED_LIBRARY)
104
105
106# Example ASan-ified libminijail shared library for target.
107# Commented out since it's only needed for local debugging.
108# =========================================================
109# include $(CLEAR_VARS)
110# LOCAL_MODULE := libminijail_asan
111# LOCAL_MODULE_TAGS := optional
112#
113# LOCAL_CFLAGS := $(minijailCommonCFlags)
114# LOCAL_CLANG := true
115# LOCAL_SANITIZE := address
116# LOCAL_MODULE_RELATIVE_PATH := asan
117# LOCAL_SRC_FILES := $(libminijailSrcFiles)
118#
119# LOCAL_STATIC_LIBRARIES := libminijail_generated
120# LOCAL_SHARED_LIBRARIES := $(minijailCommonLibraries)
121# LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)
122# include $(BUILD_SHARED_LIBRARY)
123
124
125# libminijail static library for target.
126# =========================================================
127include $(CLEAR_VARS)
128LOCAL_MODULE := libminijail
129
130LOCAL_CFLAGS := $(minijailCommonCFlags)
131LOCAL_CLANG := true
132LOCAL_SRC_FILES := $(libminijailSrcFiles)
133
134LOCAL_WHOLE_STATIC_LIBRARIES := libminijail_generated $(minijailCommonLibraries)
135LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)
136include $(BUILD_STATIC_LIBRARY)
137
138
139# libminijail native unit tests using gtest. Run with:
140# adb shell /data/nativetest/libminijail_unittest_gtest/libminijail_unittest_gtest
141# =========================================================
142include $(CLEAR_VARS)
143LOCAL_MODULE := libminijail_unittest_gtest
144
145LOCAL_CPP_EXTENSION := .cc
146LOCAL_CFLAGS := $(minijailCommonCFlags) -Wno-writable-strings
147LOCAL_CLANG := true
148LOCAL_SRC_FILES := \
149	$(libminijailSrcFiles) \
150	libminijail_unittest.cc \
151
152LOCAL_STATIC_LIBRARIES := libminijail_generated
153LOCAL_SHARED_LIBRARIES := $(minijailCommonLibraries)
154include $(BUILD_NATIVE_TEST)
155
156
157# # libminijail native unit tests for the host. Run with:
158# # out/host/linux-x86/nativetest(64)/libminijail_unittest/libminijail_unittest_gtest
159# # TODO(b/31395668): Re-enable once the seccomp(2) syscall becomes available.
160# # =========================================================
161# include $(CLEAR_VARS)
162# LOCAL_MODULE := libminijail_unittest_gtest
163# LOCAL_MODULE_HOST_OS := linux
164
165# LOCAL_CPP_EXTENSION := .cc
166# LOCAL_CFLAGS := $(minijailCommonCFlags) -DPRELOADPATH=\"/invalid\"
167# LOCAL_CLANG := true
168# LOCAL_SRC_FILES := \
169# 	$(libminijailSrcFiles) \
170# 	libminijail_unittest.cc \
171# 	$(hostUnittestSrcFiles)
172
173# LOCAL_SHARED_LIBRARIES := $(minijailCommonLibraries)
174# include $(BUILD_HOST_NATIVE_TEST)
175
176
177# Syscall filtering native unit tests using gtest. Run with:
178# adb shell /data/nativetest/syscall_filter_unittest_gtest/syscall_filter_unittest_gtest
179# =========================================================
180include $(CLEAR_VARS)
181LOCAL_MODULE := syscall_filter_unittest_gtest
182
183LOCAL_CPP_EXTENSION := .cc
184LOCAL_CFLAGS := $(minijailCommonCFlags)
185LOCAL_CLANG := true
186LOCAL_SRC_FILES := \
187	bpf.c \
188	syscall_filter.c \
189	util.c \
190	syscall_filter_unittest.cc \
191
192LOCAL_STATIC_LIBRARIES := libminijail_generated
193LOCAL_SHARED_LIBRARIES := $(minijailCommonLibraries)
194include $(BUILD_NATIVE_TEST)
195
196
197# Syscall filtering native unit tests for the host. Run with:
198# out/host/linux-x86/nativetest(64)/syscall_filter_unittest_gtest/syscall_filter_unittest_gtest
199# =========================================================
200include $(CLEAR_VARS)
201LOCAL_MODULE := syscall_filter_unittest_gtest
202LOCAL_MODULE_HOST_OS := linux
203
204LOCAL_CPP_EXTENSION := .cc
205LOCAL_CFLAGS := $(minijailCommonCFlags)
206LOCAL_CLANG := true
207LOCAL_SRC_FILES := \
208	bpf.c \
209	syscall_filter.c \
210	util.c \
211	syscall_filter_unittest.cc \
212	$(hostUnittestSrcFiles)
213
214LOCAL_SHARED_LIBRARIES := $(minijailCommonLibraries)
215include $(BUILD_HOST_NATIVE_TEST)
216
217
218# libminijail_test executable for brillo_Minijail test.
219# =========================================================
220include $(CLEAR_VARS)
221LOCAL_MODULE := libminijail_test
222
223LOCAL_CFLAGS := $(minijailCommonCFlags)
224LOCAL_CLANG := true
225LOCAL_SRC_FILES := \
226	test/libminijail_test.cpp
227
228LOCAL_SHARED_LIBRARIES := libbase libminijail
229include $(BUILD_EXECUTABLE)
230
231
232# libminijail usage example.
233# =========================================================
234include $(CLEAR_VARS)
235LOCAL_MODULE := drop_privs
236LOCAL_MODULE_TAGS := optional
237LOCAL_CFLAGS := $(minijailCommonCFlags)
238LOCAL_CLANG := true
239# Don't build with ASan, but leave commented out for easy local debugging.
240# LOCAL_SANITIZE := address
241LOCAL_SRC_FILES := \
242	examples/drop_privs.cpp
243
244LOCAL_SHARED_LIBRARIES := libbase libminijail
245include $(BUILD_EXECUTABLE)
246
247
248# minijail0 executable.
249# This is not currently used on Brillo/Android,
250# but it's convenient to be able to build it.
251# =========================================================
252include $(CLEAR_VARS)
253LOCAL_MODULE := minijail0
254LOCAL_MODULE_TAGS := optional
255LOCAL_CFLAGS := \
256	$(minijailCommonCFlags) -Wno-missing-field-initializers \
257	-DPRELOADPATH=\"/invalidminijailpreload.so\"
258LOCAL_CLANG := true
259LOCAL_SRC_FILES := \
260	elfparse.c \
261	minijail0.c \
262
263LOCAL_STATIC_LIBRARIES := libminijail_generated
264LOCAL_SHARED_LIBRARIES := $(minijailCommonLibraries) libminijail
265include $(BUILD_EXECUTABLE)
266