Makefile 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. PROJECT_NAME := ext_micro_ecc_nrf51_library_keil
  2. export OUTPUT_FILENAME
  3. #MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
  4. MAKEFILE_NAME := $(MAKEFILE_LIST)
  5. MAKEFILE_DIR := $(dir $(MAKEFILE_NAME) )
  6. TEMPLATE_PATH = ../../../../components/toolchain/gcc
  7. ifeq ($(OS),Windows_NT)
  8. include $(TEMPLATE_PATH)/Makefile.windows
  9. else
  10. include $(TEMPLATE_PATH)/Makefile.posix
  11. endif
  12. MK := mkdir
  13. RM := rm -rf
  14. #echo suspend
  15. ifeq ("$(VERBOSE)","1")
  16. NO_ECHO :=
  17. else
  18. NO_ECHO := @
  19. endif
  20. # Toolchain commands
  21. CC := '$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-gcc'
  22. AS := '$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-as'
  23. AR := '$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-ar' -r
  24. LD := '$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-ld'
  25. NM := '$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-nm'
  26. OBJDUMP := '$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-objdump'
  27. OBJCOPY := '$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-objcopy'
  28. SIZE := '$(GNU_INSTALL_ROOT)/bin/$(GNU_PREFIX)-size'
  29. #function for removing duplicates in a list
  30. remduplicates = $(strip $(if $1,$(firstword $1) $(call remduplicates,$(filter-out $(firstword $1),$1))))
  31. #source common to all targets
  32. C_SOURCE_FILES += \
  33. $(abspath ../../micro-ecc/uECC.c) \
  34. #includes common to all targets
  35. INC_PATHS = -I$(abspath ../../config)
  36. OBJECT_DIRECTORY = _build
  37. LISTING_DIRECTORY = $(OBJECT_DIRECTORY)
  38. OUTPUT_BINARY_DIRECTORY = $(OBJECT_DIRECTORY)
  39. # Sorting removes duplicates
  40. BUILD_DIRECTORIES := $(sort $(OBJECT_DIRECTORY) $(OUTPUT_BINARY_DIRECTORY) $(LISTING_DIRECTORY) )
  41. #flags common to all targets
  42. CFLAGS = -DuECC_ENABLE_VLI_API
  43. CFLAGS += -DuECC_VLI_NATIVE_LITTLE_ENDIAN=1
  44. CFLAGS += -DuECC_SUPPORTS_secp256r1=1
  45. CFLAGS += -DuECC_SQUARE_FUNC=1
  46. CFLAGS += -DuECC_SUPPORT_COMPRESSED_POINT=0
  47. CFLAGS += -DuECC_OPTIMIZATION_LEVEL=3
  48. CFLAGS += -mcpu=cortex-m0
  49. CFLAGS += -mthumb -mabi=aapcs --std=gnu99
  50. CFLAGS += -Wall -Werror -O2 -g3
  51. CFLAGS += -mfloat-abi=soft
  52. # keep every function in separate section. This will allow linker to dump unused functions
  53. CFLAGS += -ffunction-sections -fdata-sections -fno-strict-aliasing
  54. CFLAGS += -fno-builtin --short-enums -fshort-wchar
  55. # Assembler flags
  56. ASMFLAGS += -x assembler-with-cpp
  57. ASMFLAGS += -DuECC_ENABLE_VLI_API
  58. ASMFLAGS += -DuECC_VLI_NATIVE_LITTLE_ENDIAN=1
  59. ASMFLAGS += -DuECC_SUPPORTS_secp256r1=1
  60. ASMFLAGS += -DuECC_SQUARE_FUNC=1
  61. ASMFLAGS += -DuECC_SUPPORT_COMPRESSED_POINT=0
  62. ASMFLAGS += -DuECC_OPTIMIZATION_LEVEL=3
  63. #default target - first one defined
  64. default: clean micro_ecc_lib
  65. #building all targets
  66. all: clean
  67. $(NO_ECHO)$(MAKE) -f $(MAKEFILE_NAME) -C $(MAKEFILE_DIR) -e cleanobj
  68. $(NO_ECHO)$(MAKE) -f $(MAKEFILE_NAME) -C $(MAKEFILE_DIR) -e micro_ecc_lib
  69. #target for printing all targets
  70. help:
  71. @echo following targets are available:
  72. @echo micro_ecc_lib
  73. C_SOURCE_FILE_NAMES = $(notdir $(C_SOURCE_FILES))
  74. C_PATHS = $(call remduplicates, $(dir $(C_SOURCE_FILES) ) )
  75. C_OBJECTS = $(addprefix $(OBJECT_DIRECTORY)/, $(C_SOURCE_FILE_NAMES:.c=.o) )
  76. ASM_SOURCE_FILE_NAMES = $(notdir $(ASM_SOURCE_FILES))
  77. ASM_PATHS = $(call remduplicates, $(dir $(ASM_SOURCE_FILES) ))
  78. ASM_OBJECTS = $(addprefix $(OBJECT_DIRECTORY)/, $(ASM_SOURCE_FILE_NAMES:.s=.o) )
  79. vpath %.c $(C_PATHS)
  80. vpath %.s $(ASM_PATHS)
  81. OBJECTS = $(C_OBJECTS) $(ASM_OBJECTS)
  82. micro_ecc_lib: OUTPUT_FILENAME := micro_ecc_lib
  83. micro_ecc_lib: $(BUILD_DIRECTORIES) $(OBJECTS)
  84. @echo Starting compilation
  85. $(NO_ECHO)$(MAKE) -f $(MAKEFILE_NAME) -C $(MAKEFILE_DIR) -e finalize
  86. ## Create build directories
  87. $(BUILD_DIRECTORIES):
  88. echo $(MAKEFILE_NAME)
  89. $(MK) $@
  90. # Create objects from C SRC files
  91. $(OBJECT_DIRECTORY)/%.o: %.c
  92. @echo Compiling file: $(notdir $<)
  93. $(NO_ECHO)$(CC) $(CFLAGS) $(INC_PATHS) -c -o $@ $<
  94. # Assemble files
  95. $(OBJECT_DIRECTORY)/%.o: %.s
  96. @echo Assembly file: $(notdir $<)
  97. $(NO_ECHO)$(CC) $(ASMFLAGS) $(INC_PATHS) -c -o $@ $<
  98. finalize:
  99. @echo Creating library $(OUTPUT_FILENAME).a
  100. $(NO_ECHO)$(AR) ..\micro_ecc_lib_nrf51.lib $(C_OBJECTS)
  101. @echo Done
  102. clean:
  103. $(RM) $(BUILD_DIRECTORIES)
  104. cleanobj:
  105. $(RM) $(BUILD_DIRECTORIES)/*.o