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