lutin/core/module.mk

152 lines
4.7 KiB
Makefile

###############################################################################
## @file module.mk
## @author Edouard DUPIN
## @date 17-08-2012
## @project EWOL
##
## Build a module.
###############################################################################
# Bring back all LOCAL_XXX variables defined by LOCAL_MODULE
$(call module-restore-locals,$(LOCAL_MODULE))
# Do we need to copy build module to staging dir
copy_to_staging := 0
# Full path to build module
LOCAL_BUILD_MODULE := $(call module-get-build-filename,$(LOCAL_MODULE))
# Full path to staging module
LOCAL_STAGING_MODULE := $(call module-get-staging-filename,$(LOCAL_MODULE))
# Assemble the list of targets to create PRIVATE_ variables for.
LOCAL_TARGETS := $(LOCAL_BUILD_MODULE) clean-$(LOCAL_MODULE)
# Add external libraries used by static libraries
LOCAL_EXTERNAL_LIBRARIES += \
$(call module-get-depends,$(LOCAL_STATIC_LIBRARIES),EXTERNAL_LIBRARIES)
LOCAL_EXTERNAL_LIBRARIES += \
$(call module-get-depends,$(LOCAL_WHOLE_STATIC_LIBRARIES),EXTERNAL_LIBRARIES)
# List of external libraries that we need to depend on
all_external_libraries := \
$(foreach lib,$(LOCAL_EXTERNAL_LIBRARIES), \
$(call module-get-build-filename,$(lib)))
###############################################################################
## Rule-specific variable definitions.
###############################################################################
$(LOCAL_TARGETS): PRIVATE_PATH := $(LOCAL_PATH)
$(LOCAL_TARGETS): PRIVATE_MODULE := $(LOCAL_MODULE)
$(LOCAL_TARGETS): PRIVATE_CLEAN_FILES := $(LOCAL_BUILD_MODULE)
$(LOCAL_TARGETS): PRIVATE_CLEAN_DIRS :=
###############################################################################
## General rules.
###############################################################################
# Short hand to build module
.PHONY: $(LOCAL_MODULE)
$(LOCAL_MODULE): $(LOCAL_BUILD_MODULE)
# Clean module (several other rules with commands can be added using ::)
.PHONY: clean-$(LOCAL_MODULE)
clean-$(LOCAL_MODULE)::
@echo "Clean: $(PRIVATE_MODULE)"
$(Q)$(if $(PRIVATE_CLEAN_FILES),rm -f $(PRIVATE_CLEAN_FILES))
$(Q)$(if $(PRIVATE_CLEAN_DIRS),rm -rf $(PRIVATE_CLEAN_DIRS))
###############################################################################
## Static library.
###############################################################################
ifeq ("$(LOCAL_MODULE_CLASS)","STATIC_LIBRARY")
include $(BUILD_RULES)
$(LOCAL_BUILD_MODULE): $(all_objects)
$(transform-o-to-static-lib)
# TODO : the .a file does not arrive in the staging element ==> they micht stay in the obj folder
copy_to_staging := 1
endif
###############################################################################
## Shared library.
###############################################################################
ifeq ("$(LOCAL_MODULE_CLASS)","SHARED_LIBRARY")
include $(BUILD_RULES)
$(LOCAL_BUILD_MODULE): $(all_objects) $(all_libraries)
$(transform-o-to-shared-lib)
copy_to_staging := 1
endif
###############################################################################
## Executable.
###############################################################################
ifeq ("$(LOCAL_MODULE_CLASS)","EXECUTABLE")
include $(BUILD_RULES)
$(LOCAL_BUILD_MODULE): $(all_objects) $(all_libraries)
$(transform-o-to-executable)
copy_to_staging := 1
endif
###############################################################################
## Prebuilt.
###############################################################################
ifeq ("$(LOCAL_MODULE_CLASS)","PREBUILT")
$(LOCAL_BUILD_MODULE):
@mkdir -p $(dir $@)
@touch $@
endif
###############################################################################
## Files to copy.
###############################################################################
ifneq ("$(LOCAL_COPY_FILES)","")
# List of all destination files
all_copy_files :=
# Generate a rule to copy all files
$(foreach __pair,$(LOCAL_COPY_FILES), \
$(eval __pair2 := $(subst :,$(space),$(__pair))) \
$(eval __src := $(addprefix $(LOCAL_PATH)/,$(word 1,$(__pair2)))) \
$(eval __dst := $(addprefix $(TARGET_OUT_STAGING)/,$(word 2,$(__pair2)))) \
$(eval all_copy_files += $(__dst)) \
$(eval $(call copy-one-file,$(__src),$(__dst))) \
)
# Add files to be copied as pre-requisites
$(LOCAL_BUILD_MODULE): $(all_copy_files)
# Add rule to delete copied files during clean
clean-$(LOCAL_MODULE):: PRIVATE_CLEAN_FILES += $(all_copy_files)
endif
###############################################################################
## Copy to staging dir
###############################################################################
ifeq ("$(copy_to_staging)","1")
$(eval $(call copy-one-file,$(LOCAL_BUILD_MODULE),$(LOCAL_STAGING_MODULE)))
endif