| 
									
										
										
										
											2023-06-24 19:31:33 +07:00
										 |  |  | SRC_S += $(SRC_S_GCC) | 
					
						
							| 
									
										
										
										
											2023-06-24 17:35:37 +07:00
										 |  |  | 
 | 
					
						
							|  |  |  | # Assembly files can be name with upper case .S, convert it to .s
 | 
					
						
							|  |  |  | SRC_S := $(SRC_S:.S=.s) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Due to GCC LTO bug https://bugs.launchpad.net/gcc-arm-embedded/+bug/1747966
 | 
					
						
							|  |  |  | # assembly file should be placed first in linking order
 | 
					
						
							|  |  |  | # '_asm' suffix is added to object of assembly file
 | 
					
						
							|  |  |  | OBJ += $(addprefix $(BUILD)/obj/, $(SRC_S:.s=_asm.o)) | 
					
						
							|  |  |  | OBJ += $(addprefix $(BUILD)/obj/, $(SRC_C:.c=.o)) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-24 19:31:33 +07:00
										 |  |  | CFLAGS += $(CFLAGS_GCC) -MD | 
					
						
							| 
									
										
										
										
											2023-06-24 17:35:37 +07:00
										 |  |  | 
 | 
					
						
							|  |  |  | # LTO makes it difficult to analyze map file for optimizing size purpose
 | 
					
						
							|  |  |  | # We will run this option in ci
 | 
					
						
							|  |  |  | ifeq ($(NO_LTO),1) | 
					
						
							|  |  |  | CFLAGS := $(filter-out -flto,$(CFLAGS)) | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ifneq ($(CFLAGS_SKIP),) | 
					
						
							|  |  |  | CFLAGS := $(filter-out $(CFLAGS_SKIP),$(CFLAGS)) | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-24 21:17:40 +07:00
										 |  |  | LDFLAGS += $(CFLAGS) $(LDFLAGS_GCC) | 
					
						
							| 
									
										
										
										
											2023-06-24 17:35:37 +07:00
										 |  |  | 
 | 
					
						
							|  |  |  | ifdef LD_FILE | 
					
						
							|  |  |  | LDFLAGS += -Wl,-T,$(TOP)/$(LD_FILE) | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-24 19:31:33 +07:00
										 |  |  | ifdef LD_FILE_GCC | 
					
						
							|  |  |  | LDFLAGS += -Wl,-T,$(TOP)/$(LD_FILE_GCC) | 
					
						
							| 
									
										
										
										
											2023-06-24 17:35:37 +07:00
										 |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ifneq ($(SKIP_NANOLIB), 1) | 
					
						
							|  |  |  | LDFLAGS += --specs=nosys.specs --specs=nano.specs | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ASFLAGS += $(CFLAGS) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | LIBS_GCC ?= -lgcc -lm -lnosys | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # libc
 | 
					
						
							|  |  |  | LIBS += $(LIBS_GCC) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ifneq ($(BOARD), spresense) | 
					
						
							|  |  |  | LIBS += -lc | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # ---------------------------------------
 | 
					
						
							|  |  |  | # Rules
 | 
					
						
							|  |  |  | # ---------------------------------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Compile .c file
 | 
					
						
							|  |  |  | $(BUILD)/obj/%.o: %.c | 
					
						
							|  |  |  | 	@echo CC $(notdir $@) | 
					
						
							|  |  |  | 	@$(CC) $(CFLAGS) -c -o $@ $< | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # ASM sources lower case .s
 | 
					
						
							|  |  |  | $(BUILD)/obj/%_asm.o: %.s | 
					
						
							|  |  |  | 	@echo AS $(notdir $@) | 
					
						
							|  |  |  | 	@$(AS) $(ASFLAGS) -c -o $@ $< | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # ASM sources upper case .S
 | 
					
						
							|  |  |  | $(BUILD)/obj/%_asm.o: %.S | 
					
						
							|  |  |  | 	@echo AS $(notdir $@) | 
					
						
							|  |  |  | 	@$(AS) $(ASFLAGS) -c -o $@ $< | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-08-01 13:16:37 +07:00
										 |  |  | OBJCOPY_BIN_OPTION ?= | 
					
						
							| 
									
										
										
										
											2023-06-24 17:35:37 +07:00
										 |  |  | $(BUILD)/$(PROJECT).bin: $(BUILD)/$(PROJECT).elf | 
					
						
							|  |  |  | 	@echo CREATE $@ | 
					
						
							| 
									
										
										
										
											2023-08-01 13:16:37 +07:00
										 |  |  | 	$(OBJCOPY) -O binary $(OBJCOPY_BIN_OPTION) $^ $@ | 
					
						
							| 
									
										
										
										
											2023-06-24 17:35:37 +07:00
										 |  |  | 
 | 
					
						
							|  |  |  | $(BUILD)/$(PROJECT).hex: $(BUILD)/$(PROJECT).elf | 
					
						
							|  |  |  | 	@echo CREATE $@ | 
					
						
							|  |  |  | 	@$(OBJCOPY) -O ihex $^ $@ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $(BUILD)/$(PROJECT).elf: $(OBJ) | 
					
						
							|  |  |  | 	@echo LINK $@ | 
					
						
							|  |  |  | 	@$(LD) -o $@ $(LDFLAGS) $^ -Wl,--start-group $(LIBS) -Wl,--end-group |