1 # Copyright (C) 2008 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 16 # shared definitions 17 ifeq ($(strip $(SHOW)),) 18 define pretty 19 @echo $1 20 endef 21 hide := @ 22 else 23 define pretty 24 endef 25 hide := 26 endif 27 28 define my-dir 29 . 30 endef 31 32 # return the directory containing the intermediate files for a given 33 # kind of executable 34 # $1 = type (EXECUTABLES or STATIC_LIBRARIES) 35 # $2 = module name 36 # $3 = ignored 37 # 38 define intermediates-dir-for 39 $(OBJS_DIR)/intermediates/$(2) 40 endef 41 42 # Generate the full path of a given static library 43 define library-path 44 $(OBJS_DIR)/$(1).a 45 endef 46 47 define executable-path 48 $(OBJS_DIR)/$(1)$(EXE) 49 endef 50 51 # Compile a C source file 52 # 53 define compile-c-source 54 SRC:=$(1) 55 OBJ:=$$(LOCAL_OBJS_DIR)/$$(SRC:%.c=%.o) 56 LOCAL_OBJECTS += $$(OBJ) 57 DEPENDENCY_DIRS += $$(dir $$(OBJ)) 58 $$(OBJ): PRIVATE_CFLAGS := $$(CFLAGS) $$(LOCAL_CFLAGS) -I$$(LOCAL_PATH) -I$$(OBJS_DIR) 59 $$(OBJ): PRIVATE_CC := $$(LOCAL_CC) 60 $$(OBJ): PRIVATE_OBJ := $$(OBJ) 61 $$(OBJ): PRIVATE_MODULE := $$(LOCAL_MODULE) 62 $$(OBJ): PRIVATE_SRC := $$(SRC_PATH)/$$(SRC) 63 $$(OBJ): PRIVATE_SRC0 := $$(SRC) 64 $$(OBJ): $$(SRC_PATH)/$$(SRC) 65 @mkdir -p $$(dir $$(PRIVATE_OBJ)) 66 @echo "Compile: $$(PRIVATE_MODULE) <= $$(PRIVATE_SRC0)" 67 $(hide) $$(PRIVATE_CC) $$(PRIVATE_CFLAGS) -c -o $$(PRIVATE_OBJ) -MMD -MP -MF $$(PRIVATE_OBJ).d.tmp $$(PRIVATE_SRC) 68 $(hide) $$(BUILD_SYSTEM)/mkdeps.sh $$(PRIVATE_OBJ) $$(PRIVATE_OBJ).d.tmp $$(PRIVATE_OBJ).d 69 endef 70 71 # Compile a C++ source file 72 # 73 define compile-cxx-source 74 SRC:=$(1) 75 OBJ:=$$(LOCAL_OBJS_DIR)/$$(SRC:%$(LOCAL_CPP_EXTENSION)=%.o) 76 LOCAL_OBJECTS += $$(OBJ) 77 DEPENDENCY_DIRS += $$(dir $$(OBJ)) 78 $$(OBJ): PRIVATE_CFLAGS := $$(CFLAGS) $$(LOCAL_CFLAGS) -I$$(LOCAL_PATH) -I$$(OBJS_DIR) 79 $$(OBJ): PRIVATE_CXX := $$(LOCAL_CC) 80 $$(OBJ): PRIVATE_OBJ := $$(OBJ) 81 $$(OBJ): PRIVATE_MODULE := $$(LOCAL_MODULE) 82 $$(OBJ): PRIVATE_SRC := $$(SRC_PATH)/$$(SRC) 83 $$(OBJ): PRIVATE_SRC0 := $$(SRC) 84 $$(OBJ): $$(SRC_PATH)/$$(SRC) 85 @mkdir -p $$(dir $$(PRIVATE_OBJ)) 86 @echo "Compile: $$(PRIVATE_MODULE) <= $$(PRIVATE_SRC0)" 87 $(hide) $$(PRIVATE_CXX) $$(PRIVATE_CFLAGS) -c -o $$(PRIVATE_OBJ) -MMD -MP -MF $$(PRIVATE_OBJ).d.tmp $$(PRIVATE_SRC) 88 $(hide) $$(BUILD_SYSTEM)/mkdeps.sh $$(PRIVATE_OBJ) $$(PRIVATE_OBJ).d.tmp $$(PRIVATE_OBJ).d 89 endef 90 91 # Compile an Objective-C source file 92 # 93 define compile-objc-source 94 SRC:=$(1) 95 OBJ:=$$(LOCAL_OBJS_DIR)/$$(SRC:%.m=%.o) 96 LOCAL_OBJECTS += $$(OBJ) 97 DEPENDENCY_DIRS += $$(dir $$(OBJ)) 98 $$(OBJ): PRIVATE_CFLAGS := $$(CFLAGS) $$(LOCAL_CFLAGS) -I$$(LOCAL_PATH) -I$$(OBJS_DIR) 99 $$(OBJ): PRIVATE_CC := $$(LOCAL_CC) 100 $$(OBJ): PRIVATE_OBJ := $$(OBJ) 101 $$(OBJ): PRIVATE_MODULE := $$(LOCAL_MODULE) 102 $$(OBJ): PRIVATE_SRC := $$(SRC_PATH)/$$(SRC) 103 $$(OBJ): PRIVATE_SRC0 := $$(SRC) 104 $$(OBJ): $$(SRC_PATH)/$$(SRC) 105 @mkdir -p $$(dir $$(PRIVATE_OBJ)) 106 @echo "Compile: $$(PRIVATE_MODULE) <= $$(PRIVATE_SRC0)" 107 $(hide) $$(PRIVATE_CC) $$(PRIVATE_CFLAGS) -c -o $$(PRIVATE_OBJ) -MMD -MP -MF $$(PRIVATE_OBJ).d.tmp $$(PRIVATE_SRC) 108 $(hide) $$(BUILD_SYSTEM)/mkdeps.sh $$(PRIVATE_OBJ) $$(PRIVATE_OBJ).d.tmp $$(PRIVATE_OBJ).d 109 endef 110 111 # Install a file 112 # 113 define install-target 114 SRC:=$(1) 115 DST:=$(2) 116 $$(DST): PRIVATE_SRC := $$(SRC) 117 $$(DST): PRIVATE_DST := $$(DST) 118 $$(DST): PRIVATE_DST_NAME := $$(notdir $$(DST)) 119 $$(DST): PRIVATE_SRC_NAME := $$(SRC) 120 $$(DST): $$(SRC) 121 @mkdir -p $$(dir $$(PRIVATE_DST)) 122 @echo "Install: $$(PRIVATE_DST_NAME) <= $$(PRIVATE_SRC_NAME)" 123 $(hide) cp -f $$(PRIVATE_SRC) $$(PRIVATE_DST) 124 install: $$(DST) 125 endef 126 127 # for now, we only use prebuilt SDL libraries, so copy them 128 define copy-prebuilt-lib 129 _SRC := $(1) 130 _SRC1 := $$(notdir $$(_SRC)) 131 _DST := $$(OBJS_DIR)/$$(_SRC1) 132 LIBRARIES += $$(_DST) 133 $$(_DST): PRIVATE_DST := $$(_DST) 134 $$(_DST): PRIVATE_SRC := $$(_SRC) 135 $$(_DST): $$(_SRC) 136 @mkdir -p $$(dir $$(PRIVATE_DST)) 137 @echo "Prebuilt: $$(PRIVATE_DST)" 138 $(hide) cp -f $$(PRIVATE_SRC) $$(PRIVATE_DST) 139 endef 140 141 define create-dir 142 $(1): 143 mkdir -p $(1) 144 endef 145 146 define transform-generated-source 147 @echo "Generated: $(PRIVATE_MODULE) <= $<" 148 @mkdir -p $(dir $@) 149 $(hide) $(PRIVATE_CUSTOM_TOOL) 150 endef 151 152