mirror of
https://github.com/kelvinlawson/atomthreads.git
synced 2026-01-11 18:33:16 +01:00
150 lines
3.7 KiB
Makefile
150 lines
3.7 KiB
Makefile
##########################################
|
|
# Toplevel makefile for all ARM7a boards #
|
|
##########################################
|
|
|
|
# Build directory
|
|
ifdef O
|
|
build_dir=$(shell readlink -f $(O))
|
|
else
|
|
build_dir=$(CURDIR)/build
|
|
endif
|
|
|
|
# Source directory
|
|
src_dir=$(CURDIR)
|
|
|
|
# Configuration
|
|
ifndef CPU
|
|
CPU=cortex-a8
|
|
endif
|
|
ifndef BOARD
|
|
BOARD=pb-a8
|
|
endif
|
|
CC=$(CROSS_COMPILE)gcc
|
|
OBJCOPY=$(CROSS_COMPILE)objcopy
|
|
# Enable stack-checking. WARNING: the full automated test suite currently
|
|
# requires a little over 1KB RAM with stack-checking enabled. If you are
|
|
# using a device with 1KB internal SRAM and no external SRAM then you
|
|
# must disable stack-checking to run all of the automated tests.
|
|
#STACK_CHECK=true
|
|
|
|
# Location of atomthreads sources
|
|
board_dir=$(src_dir)/$(BOARD)
|
|
kernel_dir=$(src_dir)/../../kernel
|
|
tests_dir=$(src_dir)/../../tests
|
|
|
|
# Check if verbosity is ON for build process
|
|
VERBOSE_DEFAULT := 0
|
|
CMD_PREFIX_DEFAULT := @
|
|
ifdef VERBOSE
|
|
ifeq ("$(origin VERBOSE)", "command line")
|
|
VB := $(VERBOSE)
|
|
else
|
|
VB := $(VERBOSE_DEFAULT)
|
|
endif
|
|
else
|
|
VB := $(VERBOSE_DEFAULT)
|
|
endif
|
|
ifeq ($(VB), 1)
|
|
V :=
|
|
else
|
|
V := $(CMD_PREFIX_DEFAULT)
|
|
endif
|
|
|
|
# object files
|
|
objs = arm_irq.o
|
|
objs += arm_main.o
|
|
objs += atomport.o
|
|
objs += arm_entry.o
|
|
objs += atomport-asm.o
|
|
|
|
# include board makefile for board specific objects
|
|
-include $(board_dir)/Makefile
|
|
|
|
# library object files
|
|
objs += printk.o
|
|
objs += string.o
|
|
objs += vsprintf.o
|
|
|
|
# Kernel object files
|
|
objs += atomkernel.o
|
|
objs += atomsem.o
|
|
objs += atommutex.o
|
|
objs += atomtimer.o
|
|
objs += atomqueue.o
|
|
|
|
# Collection of built objects (excluding test applications)
|
|
build_objs = $(foreach obj,$(objs),$(build_dir)/$(obj))
|
|
|
|
# Target application filenames .elf for each test object
|
|
tobjs = $(notdir $(patsubst %.c,%.o,$(wildcard $(tests_dir)/*.c)))
|
|
telfs = $(patsubst %.o,%.elf,$(tobjs))
|
|
tbins = $(patsubst %.o,%.bin,$(tobjs))
|
|
build_tobjs = $(foreach tobj,$(tobjs),$(build_dir)/$(tobj))
|
|
build_telfs = $(foreach telf,$(telfs),$(build_dir)/$(telf))
|
|
build_tbins = $(foreach tbin,$(tbins),$(build_dir)/$(tbin))
|
|
|
|
# GCC flags
|
|
CFLAGS= -g \
|
|
-Wall \
|
|
-Werror \
|
|
-mcpu=$(CPU) \
|
|
-nostdinc \
|
|
-nostdlib \
|
|
-nodefaultlibs \
|
|
-fno-builtin \
|
|
-I$(src_dir) \
|
|
-I$(board_dir) \
|
|
-I$(kernel_dir) \
|
|
-I$(tests_dir)
|
|
|
|
# Enable stack-checking (disable if not required)
|
|
ifeq ($(STACK_CHECK),true)
|
|
CFLAGS += -DATOM_STACK_CHECKING
|
|
endif
|
|
|
|
# All
|
|
.PHONY: all
|
|
all: $(build_tbins) $(build_telfs) $(build_tobjs) $(build_objs) Makefile
|
|
|
|
$(build_dir)/%.bin: $(build_dir)/%.elf
|
|
$(V)mkdir -p `dirname $@`
|
|
$(if $(V), @echo " (OBJCOPY) $(subst $(build_dir)/,,$@)")
|
|
$(V)$(OBJCOPY) -O binary $< $@
|
|
|
|
$(build_dir)/%.elf: $(build_dir)/%.o $(build_objs) $(board_dir)/linker.ld
|
|
$(V)mkdir -p `dirname $@`
|
|
$(if $(V), @echo " (ELF) $(subst $(build_dir)/,,$@)")
|
|
$(V)$(CC) $(CFLAGS) $(build_objs) $< -static-libgcc -lgcc -Wl -T $(board_dir)/linker.ld -o $@
|
|
|
|
$(build_dir)/%.o: $(src_dir)/%.S
|
|
$(V)mkdir -p `dirname $@`
|
|
$(if $(V), @echo " (AS) $(subst $(build_dir)/,,$@)")
|
|
$(V)$(CC) $(CFLAGS) -D__ASSEMBLY__ -I`dirname $<` -c $< -o $@
|
|
|
|
$(build_dir)/%.o: $(src_dir)/%.c
|
|
$(V)mkdir -p `dirname $@`
|
|
$(if $(V), @echo " (CC) $(subst $(build_dir)/,,$@)")
|
|
$(V)$(CC) $(CFLAGS) $(CFLAGS) -I`dirname $<` -c $< -o $@
|
|
|
|
$(build_dir)/%.o: $(kernel_dir)/%.c
|
|
$(V)mkdir -p `dirname $@`
|
|
$(if $(V), @echo " (CC) $(subst $(build_dir)/,,$@)")
|
|
$(V)$(CC) $(CFLAGS) $(CFLAGS) -I`dirname $<` -c $< -o $@
|
|
|
|
$(build_dir)/%.o: $(tests_dir)/%.c
|
|
$(V)mkdir -p `dirname $@`
|
|
$(if $(V), @echo " (CC) $(subst $(build_dir)/,,$@)")
|
|
$(V)$(CC) $(CFLAGS) $(CFLAGS) -I`dirname $<` -c $< -o $@
|
|
|
|
# Clean
|
|
.PHONY: clean
|
|
clean:
|
|
rm -rf doxygen-kernel
|
|
rm -rf doxygen-armv7a
|
|
rm -rf $(build_dir)
|
|
# Docs
|
|
.PHONY: doxygen
|
|
doxygen:
|
|
doxygen $(kernel_dir)/Doxyfile
|
|
doxygen ./Doxyfile
|