| # Copyright (C) 2008 The Android Open Source Project |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| # |
| |
| # this turns off the suffix rules built into make |
| .SUFFIXES: |
| |
| # this turns off the RCS / SCCS implicit rules of GNU Make |
| % : RCS/%,v |
| % : RCS/% |
| % : %,v |
| % : s.% |
| % : SCCS/s.% |
| |
| # If a rule fails, delete $@. |
| .DELETE_ON_ERROR: |
| |
| # shared definitions |
| ifeq ($(strip $(SHOW)),) |
| define pretty |
| @echo $1 |
| endef |
| hide := @ |
| else |
| define pretty |
| endef |
| hide := |
| endif |
| |
| define my-dir |
| . |
| endef |
| |
| # return the directory containing the intermediate files for a given |
| # kind of executable |
| # $1 = type (EXECUTABLES or STATIC_LIBRARIES) |
| # $2 = module name |
| # $3 = ignored |
| # |
| define intermediates-dir-for |
| $(OBJS_DIR)/intermediates/$(2) |
| endef |
| |
| # Generate the full path of a given static library |
| define library-path |
| $(OBJS_DIR)/libs/$(1).a |
| endef |
| |
| define executable-path |
| $(OBJS_DIR)/$(1)$(EXE) |
| endef |
| |
| # Compile a C source file |
| # |
| define compile-c-source |
| SRC:=$(1) |
| OBJ:=$$(LOCAL_OBJS_DIR)/$$(SRC:%.c=%.o) |
| LOCAL_OBJECTS += $$(OBJ) |
| DEPENDENCY_DIRS += $$(dir $$(OBJ)) |
| $$(OBJ): PRIVATE_CFLAGS := $$(CFLAGS) $$(LOCAL_CFLAGS) -I$$(LOCAL_PATH) -I$$(LOCAL_OBJS_DIR) |
| $$(OBJ): PRIVATE_CC := $$(LOCAL_CC) |
| $$(OBJ): PRIVATE_OBJ := $$(OBJ) |
| $$(OBJ): PRIVATE_MODULE := $$(LOCAL_MODULE) |
| $$(OBJ): PRIVATE_SRC := $$(SRC_PATH)/$$(SRC) |
| $$(OBJ): PRIVATE_SRC0 := $$(SRC) |
| $$(OBJ): $$(SRC_PATH)/$$(SRC) |
| @mkdir -p $$(dir $$(PRIVATE_OBJ)) |
| @echo "Compile: $$(PRIVATE_MODULE) <= $$(PRIVATE_SRC0)" |
| $(hide) $$(PRIVATE_CC) $$(PRIVATE_CFLAGS) -c -o $$(PRIVATE_OBJ) -MMD -MP -MF $$(PRIVATE_OBJ).d.tmp $$(PRIVATE_SRC) |
| $(hide) $$(BUILD_SYSTEM)/mkdeps.sh $$(PRIVATE_OBJ) $$(PRIVATE_OBJ).d.tmp $$(PRIVATE_OBJ).d |
| endef |
| |
| # Compile a C++ source file |
| # |
| define compile-cxx-source |
| SRC:=$(1) |
| OBJ:=$$(LOCAL_OBJS_DIR)/$$(SRC:%$(LOCAL_CPP_EXTENSION)=%.o) |
| LOCAL_OBJECTS += $$(OBJ) |
| DEPENDENCY_DIRS += $$(dir $$(OBJ)) |
| $$(OBJ): PRIVATE_CFLAGS := $$(CFLAGS) $$(LOCAL_CFLAGS) -I$$(LOCAL_PATH) -I$$(LOCAL_OBJS_DIR) |
| $$(OBJ): PRIVATE_CXX := $$(LOCAL_CC) |
| $$(OBJ): PRIVATE_OBJ := $$(OBJ) |
| $$(OBJ): PRIVATE_MODULE := $$(LOCAL_MODULE) |
| $$(OBJ): PRIVATE_SRC := $$(SRC_PATH)/$$(SRC) |
| $$(OBJ): PRIVATE_SRC0 := $$(SRC) |
| $$(OBJ): $$(SRC_PATH)/$$(SRC) |
| @mkdir -p $$(dir $$(PRIVATE_OBJ)) |
| @echo "Compile: $$(PRIVATE_MODULE) <= $$(PRIVATE_SRC0)" |
| $(hide) $$(PRIVATE_CXX) $$(PRIVATE_CFLAGS) -c -o $$(PRIVATE_OBJ) -MMD -MP -MF $$(PRIVATE_OBJ).d.tmp $$(PRIVATE_SRC) |
| $(hide) $$(BUILD_SYSTEM)/mkdeps.sh $$(PRIVATE_OBJ) $$(PRIVATE_OBJ).d.tmp $$(PRIVATE_OBJ).d |
| endef |
| |
| # Compile an Objective-C source file |
| # |
| define compile-objc-source |
| SRC:=$(1) |
| OBJ:=$$(LOCAL_OBJS_DIR)/$$(notdir $$(SRC:%.m=%.o)) |
| LOCAL_OBJECTS += $$(OBJ) |
| DEPENDENCY_DIRS += $$(dir $$(OBJ)) |
| $$(OBJ): PRIVATE_CFLAGS := $$(CFLAGS) $$(LOCAL_CFLAGS) -I$$(LOCAL_PATH) -I$$(LOCAL_OBJS_DIR) |
| $$(OBJ): PRIVATE_CC := $$(LOCAL_CC) |
| $$(OBJ): PRIVATE_OBJ := $$(OBJ) |
| $$(OBJ): PRIVATE_MODULE := $$(LOCAL_MODULE) |
| $$(OBJ): PRIVATE_SRC := $$(SRC_PATH)/$$(SRC) |
| $$(OBJ): PRIVATE_SRC0 := $$(SRC) |
| $$(OBJ): $$(SRC_PATH)/$$(SRC) |
| @mkdir -p $$(dir $$(PRIVATE_OBJ)) |
| @echo "Compile: $$(PRIVATE_MODULE) <= $$(PRIVATE_SRC0)" |
| $(hide) $$(PRIVATE_CC) $$(PRIVATE_CFLAGS) -c -o $$(PRIVATE_OBJ) -MMD -MP -MF $$(PRIVATE_OBJ).d.tmp $$(PRIVATE_SRC) |
| $(hide) $$(BUILD_SYSTEM)/mkdeps.sh $$(PRIVATE_OBJ) $$(PRIVATE_OBJ).d.tmp $$(PRIVATE_OBJ).d |
| endef |
| |
| # Compile a generated C source files# |
| # |
| define compile-generated-c-source |
| SRC:=$(1) |
| OBJ:=$$(LOCAL_OBJS_DIR)/$$(notdir $$(SRC:%.c=%.o)) |
| LOCAL_OBJECTS += $$(OBJ) |
| DEPENDENCY_DIRS += $$(dir $$(OBJ)) |
| $$(OBJ): PRIVATE_CFLAGS := $$(CFLAGS) $$(LOCAL_CFLAGS) -I$$(LOCAL_PATH) -I$$(LOCAL_OBJS_DIR) |
| $$(OBJ): PRIVATE_CC := $$(LOCAL_CC) |
| $$(OBJ): PRIVATE_OBJ := $$(OBJ) |
| $$(OBJ): PRIVATE_MODULE := $$(LOCAL_MODULE) |
| $$(OBJ): PRIVATE_SRC := $$(SRC) |
| $$(OBJ): PRIVATE_SRC0 := $$(SRC) |
| $$(OBJ): $$(SRC) |
| @mkdir -p $$(dir $$(PRIVATE_OBJ)) |
| @echo "Compile: $$(PRIVATE_MODULE) <= $$(PRIVATE_SRC0)" |
| $(hide) $$(PRIVATE_CC) $$(PRIVATE_CFLAGS) -c -o $$(PRIVATE_OBJ) -MMD -MP -MF $$(PRIVATE_OBJ).d.tmp $$(PRIVATE_SRC) |
| $(hide) $$(BUILD_SYSTEM)/mkdeps.sh $$(PRIVATE_OBJ) $$(PRIVATE_OBJ).d.tmp $$(PRIVATE_OBJ).d |
| endef |
| |
| # Install a file |
| # |
| define install-target |
| SRC:=$(1) |
| DST:=$(2) |
| $$(DST): PRIVATE_SRC := $$(SRC) |
| $$(DST): PRIVATE_DST := $$(DST) |
| $$(DST): PRIVATE_DST_NAME := $$(notdir $$(DST)) |
| $$(DST): PRIVATE_SRC_NAME := $$(SRC) |
| $$(DST): $$(SRC) |
| @mkdir -p $$(dir $$(PRIVATE_DST)) |
| @echo "Install: $$(PRIVATE_DST_NAME) <= $$(PRIVATE_SRC_NAME)" |
| $(hide) cp -f $$(PRIVATE_SRC) $$(PRIVATE_DST) |
| install: $$(DST) |
| endef |
| |
| # for now, we only use prebuilt SDL libraries, so copy them |
| define copy-prebuilt-lib |
| _SRC := $(1) |
| _SRC1 := $$(notdir $$(_SRC)) |
| _DST := $$(LIBS_DIR)/$$(_SRC1) |
| LIBRARIES += $$(_DST) |
| $$(_DST): PRIVATE_DST := $$(_DST) |
| $$(_DST): PRIVATE_SRC := $$(_SRC) |
| $$(_DST): $$(_SRC) |
| @mkdir -p $$(dir $$(PRIVATE_DST)) |
| @echo "Prebuilt: $$(PRIVATE_DST)" |
| $(hide) cp -f $$(PRIVATE_SRC) $$(PRIVATE_DST) |
| endef |
| |
| define create-dir |
| $(1): |
| mkdir -p $(1) |
| endef |
| |
| define transform-generated-source |
| @echo "Generated: $(PRIVATE_MODULE) <= $<" |
| @mkdir -p $(dir $@) |
| $(hide) $(PRIVATE_CUSTOM_TOOL) |
| endef |
| |