# Just check if we have everything defined ifeq ($(CC_SOURCE_FILES_EXTS),) CC_SOURCE_FILES_EXTS := c cc endif ifeq ($(CXX_SOURCE_FILES_EXTS),) CXX_SOURCE_FILES_EXTS := cpp cxx endif # Target configuration CXXFLAGS_debug := -g -O0 CFLAGS_debug := -g -O0 CXXFLAGS_release := -O2 CFLAGS_release := -O2 # Get the build type PREBUILT_DIR_PREFIX = ../lib/$(TARGET)-$(ARCH) OBJECTS_NAMES = $(foreach sourceFilesExt,$(CC_SOURCE_FILES_EXTS), \ $(patsubst %.$(sourceFilesExt),%.$(sourceFilesExt).cc.o,$(filter %.$(sourceFilesExt),$(LOCAL_SRC_FILES))) \ ) $(foreach sourceFilesExt,$(CXX_SOURCE_FILES_EXTS), \ $(patsubst %.$(sourceFilesExt),%.$(sourceFilesExt).cxx.o,$(filter %.$(sourceFilesExt),$(LOCAL_SRC_FILES))) \ ) OBJECTS = $(addprefix obj-$(TARGET)-$(ARCH)/,$(OBJECTS_NAMES)) # Default target .DEFAULT: installr # Declare phony targets .PHONY: release debug clean installr installd # Precious targets .PRECIOUS: build-release/$(LIBNAME).$(LIBTYPE) build-debug/$(LIBNAME).$(LIBTYPE) $(addprefix build-release/,$(OBJECTS)) $(addprefix build-debug/,$(OBJECTS)) # Route build targets properly installr: install-release installd: install-debug release: build-release/$(TARGET)-$(ARCH)/$(LIBNAME).$(LIBTYPE) debug: build-debug/$(TARGET)-$(ARCH)/$(LIBNAME).$(LIBTYPE) # Clean removes all objects clean: $(RM) -r build-release/obj-$(TARGET)-$(ARCH)/ $(RM) -r build-debug/obj-$(TARGET)-$(ARCH)/ $(RM) -r build-release/$(TARGET)-$(ARCH) $(RM) -r build-debug/$(TARGET)-$(ARCH) # This target copies final output file to prebuilt folder install-%: % @mkdir -p $(PREBUILT_DIR_PREFIX)-$* cp build-$*/$(TARGET)-$(ARCH)/$(LIBNAME).$(LIBTYPE) $(PREBUILT_DIR_PREFIX)-$*/$(LIBNAME).$(LIBTYPE) # Builds source files using CC compiler build-release/obj-$(TARGET)-$(ARCH)/%.cc.o : % $(LOCAL_C_INCLUDES) @mkdir -p `dirname $@` $(CC) -o $@ -c $< $(CFLAGS_release) $(CFLAGS) $(addprefix -I, $(LOCAL_C_INCLUDES)) $(LOCAL_CFLAGS) $(GLOBAL_INCLUDES) build-debug/obj-$(TARGET)-$(ARCH)/%.cc.o : % $(LOCAL_C_INCLUDES) @mkdir -p `dirname $@` $(CC) -o $@ -c $< $(CFLAGS_debug) $(CFLAGS) $(addprefix -I, $(LOCAL_C_INCLUDES)) $(LOCAL_CFLAGS) $(GLOBAL_INCLUDES) # Builds source files using CXX compiler build-release/obj-$(TARGET)-$(ARCH)/%.cxx.o : % $(LOCAL_C_INCLUDES) @mkdir -p `dirname $@` $(CXX) -o $@ -c $< $(CXXFLAGS_release) $(CFLAGS) $(addprefix -I, $(LOCAL_C_INCLUDES)) $(LOCAL_CFLAGS) $(GLOBAL_INCLUDES) build-debug/obj-$(TARGET)-$(ARCH)/%.cxx.o : % $(LOCAL_C_INCLUDES) @mkdir -p `dirname $@` $(CXX) -o $@ -c $< $(CXXFLAGS_debug) $(CFLAGS) $(addprefix -I, $(LOCAL_C_INCLUDES)) $(LOCAL_CFLAGS) $(GLOBAL_INCLUDES) # This target assembles static library .SECONDEXPANSION: build-%/$(TARGET)-$(ARCH)/$(LIBNAME).$(STATICLIB_EXT): $$(addprefix build-%/,$(OBJECTS)) @mkdir -p `dirname $@` $(AR) rs $@ $(addprefix build-$*/,$(OBJECTS)) # This target assembles dynamic library .SECONDEXPANSION: # This target assembles dynamic library .SECONDEXPANSION: build-%/$(TARGET)-$(ARCH)/$(LIBNAME).$(DYNAMICLIB_EXT): $$(addprefix build-%/,$(OBJECTS)) @mkdir -p `dirname $@` $(CXX) -o $@ $(addprefix build-$*/,$(OBJECTS)) $(LDFLAGS) -L$(PREBUILT_DIR_PREFIX)-$* $(LDLIBS)