From ae4978977d3a2ca1e9493c1152aed35078fd846e Mon Sep 17 00:00:00 2001 From: Aditya Naik Date: Tue, 20 Apr 2021 13:11:16 -0400 Subject: Cleanup and README --- Makefile | 143 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 Makefile (limited to 'Makefile') diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..e8d9225 --- /dev/null +++ b/Makefile @@ -0,0 +1,143 @@ +# Target also determines which file is being compiled +TARGET = main +PORT = posix + +###################################### +# building variables +###################################### +# debug build? +DEBUG = 1 +# optimization +OPT = -Og + + +####################################### +# paths +####################################### +# Build path +BUILD_DIR = build + +###################################### +# source +###################################### +# C sources for all ports +C_SOURCES = \ +lib/FreeRTOS/FreeRTOS/Source/tasks.c \ +lib/FreeRTOS/FreeRTOS/Source/list.c \ +lib/FreeRTOS/FreeRTOS/Source/queue.c \ +lib/FreeRTOS/FreeRTOS/Source/stream_buffer.c \ +lib/FreeRTOS/FreeRTOS/Source/timers.c \ + + +# set the main C source based on whether we're compiling the master or slave +C_SOURCES+=$(addprefix src/, $(TARGET).c) + +####################################### +# binaries +####################################### + +# The gcc compiler bin path can be either defined in make command via GCC_PATH variable (> make GCC_PATH=xxx) +# either it can be added to the PATH environment variable. +ifdef GCC_PATH +CC = $(GCC_PATH)/$(PREFIX)gcc +AS = $(GCC_PATH)/$(PREFIX)gcc -x assembler-with-cpp +CP = $(GCC_PATH)/$(PREFIX)objcopy +SZ = $(GCC_PATH)/$(PREFIX)size +else +CC = $(PREFIX)gcc +AS = $(PREFIX)gcc -x assembler-with-cpp +CP = $(PREFIX)objcopy +SZ = $(PREFIX)size +endif +HEX = $(CP) -O ihex +BIN = $(CP) -O binary -S + +####################################### +# CFLAGS +####################################### +# macros for gcc +# AS defines +AS_DEFS = + +# AS includes +AS_INCLUDES = + +# General C includes for all ports. Since CMSIS is being included, that means this is restricted to ARM ports +C_INCLUDES = \ +-Iinclude \ +-Ilib/cmsis \ +-Ilib/nanopb \ +-Ilib/FreeRTOS/FreeRTOS/Source/include/ \ + +# Define the chip we're building for and include its makefile +# Variables ASM_FILE, LDFLAGS, PREFIX will be defined in the included port makefile +# Port-specific stream functions (ex. stream_i2c, stream_stdio) are included by the port makefile +PORT_DIR = ports/$(PORT) +include $(PORT_DIR)/makefile +ASM_SOURCES=$(PORT_DIR)/$(ASM_FILE) + +# compile gcc flags +ASFLAGS = $(MCU) $(AS_DEFS) $(AS_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections + +CFLAGS = $(MCU) $(C_DEFS) $(C_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections + +ifeq ($(DEBUG), 1) +CFLAGS += -g -gdwarf-2 +endif + +# Generate dependency information +CFLAGS += -MMD -MP -MF"$(@:%.o=%.d)" + +####################################### +# LDFLAGS +####################################### + +# libraries +LIBS = -lc -lm -lpthread -lrt +LIBDIR = + +# default action: build all +all: $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).bin + + +####################################### +# build the application +####################################### +# list of objects +OBJECTS = $(addprefix $(BUILD_DIR)/,$(notdir $(C_SOURCES:.c=.o))) +vpath %.c $(sort $(dir $(C_SOURCES))) +# list of ASM program objects +OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(ASM_SOURCES:.s=.o))) +vpath %.s $(sort $(dir $(ASM_SOURCES))) + +$(BUILD_DIR)/%.o: %.c makefile | $(BUILD_DIR) + $(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@ + +$(BUILD_DIR)/%.o: %.s makefile | $(BUILD_DIR) + $(AS) -c $(CFLAGS) $< -o $@ + +$(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) makefile + $(CC) $(OBJECTS) $(LDFLAGS) -o $@ + $(SZ) $@ + +$(BUILD_DIR)/%.hex: $(BUILD_DIR)/%.elf | $(BUILD_DIR) + $(HEX) $< $@ + +$(BUILD_DIR)/%.bin: $(BUILD_DIR)/%.elf | $(BUILD_DIR) + $(BIN) $< $@ + +$(BUILD_DIR): + mkdir $@ + +####################################### +# clean up +####################################### +clean: + -rm -fR $(BUILD_DIR)/* + +####################################### +# dependencies +####################################### +-include $(wildcard $(BUILD_DIR)/*.d) + +# *** EOF *** -- cgit v1.2.3