######## Build options ######## verbose = 0 ######## Build setup ######## # SRCROOT should always be the current directory SRCROOT = $(CURDIR) # .o directory ODIR = obj # Source VPATHS VPATH += $(SRCROOT)/Source VPATH += $(SRCROOT)/Source/portable/MemMang VPATH += $(SRCROOT)/Source/portable/GCC/POSIX VPATH += $(SRCROOT)/src/Core VPATH += $(SRCROOT)/src/GPIO VPATH += $(SRCROOT)/src/GPS # FreeRTOS Objects C_FILES += croutine.c C_FILES += event_groups.c C_FILES += list.c C_FILES += queue.c C_FILES += tasks.c C_FILES += timers.c # portable Objects C_FILES += heap_3.c C_FILES += port.c # common Objects COMMON_SOURCE_LIST=$(shell cat ../common/sourcelist.txt) C_FILES+=$(COMMON_SOURCE_LIST:%.c=../common/%.c) # Main Object SRC_SOURCES+=$(shell find -L src/ -name '*.c' -not -name 'vc.c') C_FILES += $(SRC_SOURCES) # Include Paths INCLUDES += -I$(SRCROOT)/Source/include INCLUDES += -I$(SRCROOT)/Source/portable/GCC/POSIX/ INCLUDES += -I$(SRCROOT)/src/Core INCLUDES += -I$(SRCROOT)/../common/includes/ INCLUDES += -I$(SRCROOT) # Generate OBJS names OBJS = $(patsubst %.c,%.o,$(C_FILES)) OBJS += src/Core/vc.o ######## C Flags ######## # Warnings CWARNS += -W CWARNS += -Wall # CWARNS += -Werror CWARNS += -Wextra CWARNS += -Wformat CWARNS += -Wmissing-braces CWARNS += -Wno-cast-align CWARNS += -Wparentheses CWARNS += -Wshadow CWARNS += -Wno-sign-compare CWARNS += -Wswitch CWARNS += -Wuninitialized CWARNS += -Wunknown-pragmas CWARNS += -Wunused-function CWARNS += -Wunused-label CWARNS += -Wunused-parameter CWARNS += -Wunused-value CWARNS += -Wunused-variable CWARNS += -Wmissing-prototypes CWARNS += -Wno-implicit-fallthrough # in nuklear CFLAGS += -DDEBUG=1 CFLAGS += -g -DUSE_STDIO=1 -D__GCC_POSIX__=1 -lX11 -lm -lGL -lm -lGLU -lpulse-simple -lpulse ifneq ($(shell uname), Darwin) CFLAGS += -pthread endif # MAX_NUMBER_OF_TASKS = max pthreads used in the POSIX port. # Default value is 64 (_POSIX_THREAD_THREADS_MAX), the minimum number required by POSIX. CFLAGS += -DMAX_NUMBER_OF_TASKS=300 -DSIMULATOR CFLAGS += $(INCLUDES) $(CWARNS) -O2 ######## Makefile targets ######## # Rules .PHONY : all all: vc.h setup FreeRTOS-Sim .PHONY : setup setup: # Make obj directory @mkdir -p $(ODIR) # Fix to place .o files in ODIR _OBJS = $(patsubst %,$(ODIR)/%,$(OBJS)) dir_guard=@mkdir -p $(@D) $(ODIR)/src/Core/vc.o: src/Core/vc.c vc.h $(dir_guard) @echo "[CC] version information vc.c" ifeq ($(verbose),1) $(CC) $(CFLAGS) src/Core/vc.c -c -o $(ODIR)/src/Core/vc.o else @$(CC) $(CFLAGS) src/Core/vc.c -c -o $(ODIR)/src/Core/vc.o endif $(ODIR)/%.o: %.c $(dir_guard) # If verbose, print gcc execution, else hide ifeq ($(verbose),1) @echo "[CC] $<" $(CC) $(CFLAGS) -c -o $@ $< else @echo "[CC] $(notdir $<)" @$(CC) $(CFLAGS) -c -o $@ $< endif .PHONY: vc.h vc.h: ../../.git/logs/HEAD @echo "// This file is generated by Makefile." > vc.h @echo "// Do not edit this file!" >> vc.h @echo "const char* vc_get_version(void);" >> vc.h @echo >> vc.h @git log -1 --format="format:#define GIT_VERSION \"%h\"" >> vc.h @echo >> vc.h @echo >> vc.h @echo [GEN] vc.h FreeRTOS-Sim: $(_OBJS) @echo "[LK] $@" ifeq ($(verbose),1) $(CC) $(CFLAGS) $^ $(LINKFLAGS) $(LIBS) -o $@ else @$(CC) $(CFLAGS) $^ $(LINKFLAGS) $(LIBS) -o $@ endif @echo "[:)] Happiness :)" .PHONY : clean clean: @-rm -rf $(ODIR) FreeRTOS-Sim common/ @echo "[RM] Cleanuped °o°"