Skip to content
Snippets Groups Projects
Makefile.include 3.08 KiB
Newer Older
  • Learn to ignore specific revisions
  • ifeq ($(strip $(RIOTCPU)),)
    	export RIOTCPU =$(RIOTBASE)/cpu
    endif
    	
    
    Oleg Hahm's avatar
    Oleg Hahm committed
    ifeq ($(strip $(RIOTBOARD)),)
    	export RIOTBOARD =$(RIOTBASE)/boards
    endif
    
    
    Oleg Hahm's avatar
    Oleg Hahm committed
    ifeq ($(strip $(MCU)),)
    	MCU = $(CPU)
    endif
    
    # if you want to publish the board into the sources as an uppercase #define
    BB = $(shell echo $(BOARD)|tr 'a-z' 'A-Z')
    
    CPUDEF = $(shell echo $(CPU)|tr 'a-z' 'A-Z')
    CFLAGS += -DBOARD=$(BB) -DCPU_$(CPUDEF)
    
    export BINDIR =$(CURDIR)/bin/$(BOARD)/
    
    Oleg Hahm's avatar
    Oleg Hahm committed
    include $(RIOTBASE)/Makefile.modules
    
    include $(RIOTBOARD)/$(BOARD)/Makefile.include
    
    include $(RIOTCPU)/$(CPU)/Makefile.include
    
    
    # your binaries to link
    
    BASELIBS += $(BINDIR)$(BOARD)_base.a
    BASELIBS += $(BINDIR)${PROJECT}.a
    
    # clumsy way to enable building native on osx:
    BUILDOSXNATIVE = 0
    ifeq ($(CPU),native)
    ifeq ($(shell uname -s),Darwin)
    	BUILDOSXNATIVE = 1
    endif
    endif
    
    
    # backward compatability with glibc <= 2.17 for native
    ifeq ($(CPU),native)
    ifeq ($(shell uname -s),Linux)
    ifeq ($(shell ldd --version |  awk '/^ldd/{if ($$NF < 2.17) {print "yes"} else {print "no"} }'),yes)
    	LINKFLAGS += -lrt
    endif
    endif
    endif
    
    
    .PHONY: all clean flash doc term
    
    
    ## make script for your project. Build RIOT-base here!
    
    all: $(BINDIR)$(PROJECT).a
    
    	@echo "Building project $(PROJECT) for $(BOARD) w/ MCU $(MCU)."
    
    	"$(MAKE)" -C $(RIOTBOARD)/$(BOARD)
    
    	"$(MAKE)" -C $(RIOTBASE)
    	@for i in $(EXTERNAL_MODULES) ; do "$(MAKE)" -C $$i ; done ;
    
    ifeq ($(BUILDOSXNATIVE),1)	
    
    	$(LINK) $(UNDEF) -o $(BINDIR)$(PROJECT).elf $(BASELIBS) $(LINKFLAGS) -Wl,-no_pie
    
    	@$(LINK) $(UNDEF) -o $(BINDIR)$(PROJECT).elf -Wl,--start-group $(BASELIBS) -lm -Wl,--end-group  -Wl,-Map=$(BINDIR)$(PROJECT).map $(LINKFLAGS)
    	@$(SIZE) $(BINDIR)$(PROJECT).elf
    	@$(OBJCOPY) $(OFLAGS) $(BINDIR)$(PROJECT).elf $(BINDIR)$(PROJECT).hex
    
    
    ## your make rules
    ## Only basic example - modify it for larger projects!!
    
    #$(BINDIR)/$(PROJECT).a: $(BINDIR)/$(PROJECT).o
    #	$(AR) -rc $(BINDIR)/project.a $(BINDIR)/$(PROJECT).o 
    
    
    # string array of all names of c files in dir
    SRC = $(wildcard *.c)
    
    # string array of all names replaced .c with .o 
    
    OBJ = $(SRC:%.c=${BINDIR}%.o)
    
    $(BINDIR)$(PROJECT).a:  $(OBJ)
    
    	$(AD)$(AR) -rc $(BINDIR)$(PROJECT).a $(OBJ)
    
    
    # pull in dependency info for *existing* .o files
    -include $(OBJ:.o=.d)
    
    
    $(BINDIR)%.o: %.c $(PROJDEPS)
    
    	@echo; echo "Compiling.... $*.c"; echo
    
    	@test -d $(BINDIR) || mkdir -p $(BINDIR)
    
    	$(AD)$(CC) $(CFLAGS) $(INCLUDES) -c $*.c -o $(BINDIR)$*.o
    
    	"$(MAKE)" -C $(RIOTBOARD)/$(BOARD) clean
    
    	"$(MAKE)" -C $(RIOTBASE) clean
    	@for i in $(EXTERNAL_MODULES) ; do "$(MAKE)" -C $$i clean ; done ;
    
    	rm -rf $(BINDIR)
    
    	$(FLASHER) $(FFLAGS)
    
    
    doc:
    	make -BC $(RIOTBASE) doc
    
    
    debug:
    	$(DEBUGGER) $(DEBUGGER_FLAGS)
    
    
    buildtest:
    
    	@for BOARD in $$(find $(RIOTBOARD) -mindepth 1 -maxdepth 1 -type d \! -name \*-common -printf '%f\n' ); do \
    
    		echo -n "Building for $${BOARD} .. "; \
    
    		env -i HOME=$${HOME} PATH=$${PATH} BOARD=$${BOARD} RIOTBASE=$${RIOTBASE} RIOTBOARD=$${RIOTBOARD} RIOTCPU=$${RIOTCPU} $(MAKE) -B clean all >/dev/null 2>&1 && echo -e "\033[1;32msuccess\033[0m" || echo -e "\033[1;31mfailed\033[0m" ; \