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 15 LOCAL_PATH := $(call my-dir) 16 17 18 # Common variables. 19 # ========================================================= 20 libminijailSrcFiles := \ 21 bpf.c \ 22 libminijail.c \ 23 signal_handler.c \ 24 syscall_filter.c \ 25 syscall_wrapper.c \ 26 util.c 27 28 hostUnittestSrcFiles := \ 29 linux-x86/libconstants.gen.c \ 30 linux-x86/libsyscalls.gen.c 31 32 minijailCommonCFlags := -DHAVE_SECUREBITS_H -Wall -Werror 33 minijailCommonLibraries := libcap 34 35 36 # Static library for generated code. 37 # ========================================================= 38 include $(CLEAR_VARS) 39 LOCAL_MODULE := libminijail_generated 40 41 LOCAL_MODULE_CLASS := STATIC_LIBRARIES 42 generated_sources_dir := $(local-generated-sources-dir) 43 44 my_gen := $(generated_sources_dir)/$(TARGET_ARCH)/libsyscalls.c 45 # We need the quotes so the shell script treats the following as one argument. 46 my_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)) 55 LOCAL_GENERATED_SOURCES_$(TARGET_ARCH) += $(my_gen) 56 57 my_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)) 63 LOCAL_GENERATED_SOURCES_$(TARGET_ARCH) += $(my_gen) 64 65 # For processes running in 32-bit compat mode on 64-bit processors. 66 ifdef TARGET_2ND_ARCH 67 my_gen := $(generated_sources_dir)/$(TARGET_2ND_ARCH)/libsyscalls.c 68 my_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) 76 LOCAL_GENERATED_SOURCES_$(TARGET_2ND_ARCH) += $(my_gen) 77 78 my_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) 83 LOCAL_GENERATED_SOURCES_$(TARGET_2ND_ARCH) += $(my_gen) 84 endif 85 86 LOCAL_CFLAGS := $(minijailCommonCFlags) 87 LOCAL_CLANG := true 88 include $(BUILD_STATIC_LIBRARY) 89 90 91 # libminijail shared library for target. 92 # ========================================================= 93 include $(CLEAR_VARS) 94 LOCAL_MODULE := libminijail 95 96 LOCAL_CFLAGS := $(minijailCommonCFlags) 97 LOCAL_CLANG := true 98 LOCAL_SRC_FILES := $(libminijailSrcFiles) 99 100 LOCAL_STATIC_LIBRARIES := libminijail_generated 101 LOCAL_SHARED_LIBRARIES := $(minijailCommonLibraries) 102 LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH) 103 include $(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 # ========================================================= 127 include $(CLEAR_VARS) 128 LOCAL_MODULE := libminijail 129 130 LOCAL_CFLAGS := $(minijailCommonCFlags) 131 LOCAL_CLANG := true 132 LOCAL_SRC_FILES := $(libminijailSrcFiles) 133 134 LOCAL_WHOLE_STATIC_LIBRARIES := libminijail_generated $(minijailCommonLibraries) 135 LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH) 136 include $(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 # ========================================================= 142 include $(CLEAR_VARS) 143 LOCAL_MODULE := libminijail_unittest_gtest 144 145 LOCAL_CPP_EXTENSION := .cc 146 LOCAL_CFLAGS := $(minijailCommonCFlags) -Wno-writable-strings 147 LOCAL_CLANG := true 148 LOCAL_SRC_FILES := \ 149 $(libminijailSrcFiles) \ 150 libminijail_unittest.cc \ 151 152 LOCAL_STATIC_LIBRARIES := libminijail_generated 153 LOCAL_SHARED_LIBRARIES := $(minijailCommonLibraries) 154 include $(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 # ========================================================= 180 include $(CLEAR_VARS) 181 LOCAL_MODULE := syscall_filter_unittest_gtest 182 183 LOCAL_CPP_EXTENSION := .cc 184 LOCAL_CFLAGS := $(minijailCommonCFlags) 185 LOCAL_CLANG := true 186 LOCAL_SRC_FILES := \ 187 bpf.c \ 188 syscall_filter.c \ 189 util.c \ 190 syscall_filter_unittest.cc \ 191 192 LOCAL_STATIC_LIBRARIES := libminijail_generated 193 LOCAL_SHARED_LIBRARIES := $(minijailCommonLibraries) 194 include $(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 # ========================================================= 200 include $(CLEAR_VARS) 201 LOCAL_MODULE := syscall_filter_unittest_gtest 202 LOCAL_MODULE_HOST_OS := linux 203 204 LOCAL_CPP_EXTENSION := .cc 205 LOCAL_CFLAGS := $(minijailCommonCFlags) 206 LOCAL_CLANG := true 207 LOCAL_SRC_FILES := \ 208 bpf.c \ 209 syscall_filter.c \ 210 util.c \ 211 syscall_filter_unittest.cc \ 212 $(hostUnittestSrcFiles) 213 214 LOCAL_SHARED_LIBRARIES := $(minijailCommonLibraries) 215 include $(BUILD_HOST_NATIVE_TEST) 216 217 218 # libminijail_test executable for brillo_Minijail test. 219 # ========================================================= 220 include $(CLEAR_VARS) 221 LOCAL_MODULE := libminijail_test 222 223 LOCAL_CFLAGS := $(minijailCommonCFlags) 224 LOCAL_CLANG := true 225 LOCAL_SRC_FILES := \ 226 test/libminijail_test.cpp 227 228 LOCAL_SHARED_LIBRARIES := libbase libminijail 229 include $(BUILD_EXECUTABLE) 230 231 232 # libminijail usage example. 233 # ========================================================= 234 include $(CLEAR_VARS) 235 LOCAL_MODULE := drop_privs 236 LOCAL_MODULE_TAGS := optional 237 LOCAL_CFLAGS := $(minijailCommonCFlags) 238 LOCAL_CLANG := true 239 # Don't build with ASan, but leave commented out for easy local debugging. 240 # LOCAL_SANITIZE := address 241 LOCAL_SRC_FILES := \ 242 examples/drop_privs.cpp 243 244 LOCAL_SHARED_LIBRARIES := libbase libminijail 245 include $(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 # ========================================================= 252 include $(CLEAR_VARS) 253 LOCAL_MODULE := minijail0 254 LOCAL_MODULE_TAGS := optional 255 LOCAL_CFLAGS := \ 256 $(minijailCommonCFlags) -Wno-missing-field-initializers \ 257 -DPRELOADPATH=\"/invalidminijailpreload.so\" 258 LOCAL_CLANG := true 259 LOCAL_SRC_FILES := \ 260 elfparse.c \ 261 minijail0.c \ 262 263 LOCAL_STATIC_LIBRARIES := libminijail_generated 264 LOCAL_SHARED_LIBRARIES := $(minijailCommonLibraries) libminijail 265 include $(BUILD_EXECUTABLE) 266