PROJECT_NAME := ext_micro_ecc_nrf52_library_armgcc export OUTPUT_FILENAME #MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) MAKEFILE_NAME := $(MAKEFILE_LIST) MAKEFILE_DIR := $(dir $(MAKEFILE_NAME) ) TEMPLATE_PATH = ../../../../components/toolchain/gcc ifeq ($(OS),Windows_NT) include $(TEMPLATE_PATH)/Makefile.windows else include $(TEMPLATE_PATH)/Makefile.posix endif MK := mkdir RM := rm -rf #echo suspend ifeq ("$(VERBOSE)","1") NO_ECHO := else NO_ECHO := @ endif # Toolchain commands CC := '$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-gcc' AS := '$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-as' AR := '$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-ar' -r LD := '$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-ld' NM := '$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-nm' OBJDUMP := '$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-objdump' OBJCOPY := '$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-objcopy' SIZE := '$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-size' #function for removing duplicates in a list remduplicates = $(strip $(if $1,$(firstword $1) $(call remduplicates,$(filter-out $(firstword $1),$1)))) #source common to all targets C_SOURCE_FILES += \ $(abspath ../../micro-ecc/uECC.c) \ #includes common to all targets INC_PATHS = -I$(abspath ../../config) OBJECT_DIRECTORY = _build LISTING_DIRECTORY = $(OBJECT_DIRECTORY) OUTPUT_BINARY_DIRECTORY = $(OBJECT_DIRECTORY) # Sorting removes duplicates BUILD_DIRECTORIES := $(sort $(OBJECT_DIRECTORY) $(OUTPUT_BINARY_DIRECTORY) $(LISTING_DIRECTORY) ) #flags common to all targets CFLAGS = -DuECC_ENABLE_VLI_API CFLAGS += -DuECC_VLI_NATIVE_LITTLE_ENDIAN=1 CFLAGS += -DuECC_SUPPORTS_secp256r1=1 CFLAGS += -DuECC_SQUARE_FUNC=1 CFLAGS += -DuECC_SUPPORT_COMPRESSED_POINT=0 CFLAGS += -DuECC_OPTIMIZATION_LEVEL=3 CFLAGS += -mcpu=cortex-m4 CFLAGS += -mthumb -mabi=aapcs --std=gnu99 CFLAGS += -Wall -Werror -O2 -g3 CFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16 # keep every function in separate section. This will allow linker to dump unused functions CFLAGS += -ffunction-sections -fdata-sections -fno-strict-aliasing CFLAGS += -fno-builtin --short-enums # Assembler flags ASMFLAGS += -x assembler-with-cpp ASMFLAGS += -DuECC_ENABLE_VLI_API ASMFLAGS += -DuECC_VLI_NATIVE_LITTLE_ENDIAN=1 ASMFLAGS += -DuECC_SUPPORTS_secp256r1=1 ASMFLAGS += -DuECC_SQUARE_FUNC=1 ASMFLAGS += -DuECC_SUPPORT_COMPRESSED_POINT=0 ASMFLAGS += -DuECC_OPTIMIZATION_LEVEL=3 #default target - first one defined default: clean micro_ecc_lib #building all targets all: clean $(NO_ECHO)$(MAKE) -f $(MAKEFILE_NAME) -C $(MAKEFILE_DIR) -e cleanobj $(NO_ECHO)$(MAKE) -f $(MAKEFILE_NAME) -C $(MAKEFILE_DIR) -e micro_ecc_lib #target for printing all targets help: @echo following targets are available: @echo micro_ecc_lib C_SOURCE_FILE_NAMES = $(notdir $(C_SOURCE_FILES)) C_PATHS = $(call remduplicates, $(dir $(C_SOURCE_FILES) ) ) C_OBJECTS = $(addprefix $(OBJECT_DIRECTORY)/, $(C_SOURCE_FILE_NAMES:.c=.o) ) ASM_SOURCE_FILE_NAMES = $(notdir $(ASM_SOURCE_FILES)) ASM_PATHS = $(call remduplicates, $(dir $(ASM_SOURCE_FILES) )) ASM_OBJECTS = $(addprefix $(OBJECT_DIRECTORY)/, $(ASM_SOURCE_FILE_NAMES:.s=.o) ) vpath %.c $(C_PATHS) vpath %.s $(ASM_PATHS) OBJECTS = $(C_OBJECTS) $(ASM_OBJECTS) micro_ecc_lib: OUTPUT_FILENAME := micro_ecc_lib micro_ecc_lib: $(BUILD_DIRECTORIES) $(OBJECTS) @echo Starting compilation $(NO_ECHO)$(MAKE) -f $(MAKEFILE_NAME) -C $(MAKEFILE_DIR) -e finalize ## Create build directories $(BUILD_DIRECTORIES): echo $(MAKEFILE_NAME) $(MK) $@ # Create objects from C SRC files $(OBJECT_DIRECTORY)/%.o: %.c @echo Compiling file: $(notdir $<) $(NO_ECHO)$(CC) $(CFLAGS) $(INC_PATHS) -c -o $@ $< # Assemble files $(OBJECT_DIRECTORY)/%.o: %.s @echo Assembly file: $(notdir $<) $(NO_ECHO)$(CC) $(ASMFLAGS) $(INC_PATHS) -c -o $@ $< finalize: @echo Creating library $(OUTPUT_FILENAME).a $(NO_ECHO)$(AR) ..\micro_ecc_lib_nrf52.a $(C_OBJECTS) @echo Done clean: $(RM) $(BUILD_DIRECTORIES) cleanobj: $(RM) $(BUILD_DIRECTORIES)/*.o