Docker-in-Docker (DinD) capabilities of public runners deactivated. More info

Makefile 6.65 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
# ------------------------------------------------------------------------------
#         ATMEL Microcontroller Software Support 
# ------------------------------------------------------------------------------
# Copyright (c) 2008, Atmel Corporation
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# - Redistributions of source code must retain the above copyright notice,
# this list of conditions and the disclaimer below.
#
# Atmel's name may not be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
# DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
# OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# ------------------------------------------------------------------------------

29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
#	Generic makefile

#-------------------------------------------------------------------------------
#		User set options
#-------------------------------------------------------------------------------

CHIP	= at91sam9g20
BOARD	= at91sam9g20-ek

# Trace level used for compilation
# (can be overriden by adding TRACE_LEVEL=#number to the command-line)
# TRACE_LEVEL_DEBUG      5
# TRACE_LEVEL_INFO       4
# TRACE_LEVEL_WARNING    3
# TRACE_LEVEL_ERROR      2
# TRACE_LEVEL_FATAL      1
# TRACE_LEVEL_NO_TRACE   0
46
TRACE_LEVEL	= 5
47

48 49 50 51 52
# Optimization level, put in comment for debugging
OPTIMIZATION 	= -Os

AT91LIB		= ./at91lib
FREERTOS	= ./freertos
53 54

# Output file basename
55
OUTPUT		= img-$(BOARD)-$(CHIP)
56

57 58
# Compile with chip specific features
include $(AT91LIB)/boards/$(BOARD)/$(CHIP)/chip.mak
59

60 61
# Compile for all memories available on the board (this sets $(MEMORIES))
include $(AT91LIB)/boards/$(BOARD)/board.mak
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80

# Output directories
BIN		= bin
OBJ		= obj

#-------------------------------------------------------------------------------
#		Tools
#-------------------------------------------------------------------------------

# Tools suffix when cross-compiling
CROSS_COMPILE=arm-none-eabi-

# Compilation tools
CC 	= $(CROSS_COMPILE)gcc
SIZE	= $(CROSS_COMPILE)size
STRIP	= $(CROSS_COMPILE)strip
OBJCOPY	= $(CROSS_COMPILE)objcopy

# Flags
81 82

INCLUDES	=  -I$(AT91LIB)/boards/$(BOARD)
83 84 85
INCLUDES	+= -I$(AT91LIB)/peripherals
INCLUDES	+= -I$(AT91LIB)/components
INCLUDES	+= -I$(AT91LIB)
86

87 88 89 90 91 92 93
INCLUDES	+= -I$(FREERTOS)/portable/GCC/ARM9_AT91SAM9G20
INCLUDES	+= -I$(FREERTOS)/portable/MemMang
INCLUDES	+= -I$(FREERTOS)/portable/
INCLUDES	+= -I$(FREERTOS)/include
INCLUDES	+= -I$(FREERTOS)
INCLUDES	+= -Isrc/

94 95 96 97 98
ifeq ($(CHIP_CORE), cortexm3)
TARGET_OPTS = -mcpu=cortex-m3 -mthumb
else
TARGET_OPTS =
endif
99

100 101 102 103 104
CFLAGS	=  $(TARGET_OPTS)
CFLAGS	+= -Wall -mlong-calls -ffunction-sections
CFLAGS	+= -g $(OPTIMIZATION) $(INCLUDES) -D$(CHIP) -DTRACE_LEVE=$(TRACE_LEVEL)
ASFLAGS	= $(TARGET_OPTS) -Wall -g $(OPTIM) $(INCLUDES) -D$(CHIP) -D__ASSEMBLY__
LDFLAGS	= -g $(OPTIMIZATION) -nostartfiles $(TARGET_OPTS) -Wl,--gc-sections
105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136

#-------------------------------------------------------------------------------
#		FILES
#-------------------------------------------------------------------------------

# Directories where source files can be found
UTILITY	= $(AT91LIB)/utility
PERIPH	= $(AT91LIB)/peripherals
BOARDS	= $(AT91LIB)/boards

PORT	= $(FREERTOS)/portable/GCC/ARM9_AT91SAM9G20
MEM_MGT	= $(FREERTOS)/portable/MemMang	

VPATH   = src/
VPATH	+= $(UTILITY)
VPATH	+= $(PERIPH)/dbgu
VPATH	+= $(PERIPH)/irq
VPATH	+= $(PERIPH)/pio
VPATH	+= $(PERIPH)/pit
VPATH	+= $(PERIPH)/tc
VPATH	+= $(PERIPH)/pmc
VPATH	+= $(PERIPH)/cp15
VPATH	+= $(PERIPH)/systicks
VPATH	+= $(BOARDS)/$(BOARD)
VPATH	+= $(BOARDS)/$(BOARD)/$(CHIP)
VPATH	+= $(MEM_MGT)
VPATH	+= $(PORT)
VPATH	+= $(FREERTOS)


# Objects build from C source files
C_OBJECTS	= main.o
137 138

# AT91LIB objects
139 140 141 142 143 144 145 146 147 148 149 150 151
C_OBJECTS	+= led.o
C_OBJECTS	+= stdio.o
C_OBJECTS	+= dbgu.o
C_OBJECTS	+= pio.o
C_OBJECTS	+= pio_it.o
C_OBJECTS	+= tc.o
C_OBJECTS	+= pmc.o
C_OBJECTS	+= board_lowlevel.o
C_OBJECTS	+= trace.o
C_OBJECTS	+= board_memories.o
C_OBJECTS	+= aic.o
C_OBJECTS	+= cp15.o
C_OBJECTS	+= pit.o
152 153

# FreeRTOS objects build from C source files
154
C_OBJECTS	+= port.o
155
C_OBJECTS	+= portISR.o
156 157 158 159 160 161
C_OBJECTS	+= tasks.o
C_OBJECTS	+= queue.o
C_OBJECTS	+= event_groups.o
C_OBJECTS	+= list.o
C_OBJECTS	+= stream_buffer.o
C_OBJECTS	+= timers.o
Colin González's avatar
Colin González committed
162
<<<<<<< HEAD
163
C_OBJECTS	+= heap_1.o
Colin González's avatar
Colin González committed
164 165 166 167
=======
C_OBJECTS	+= standardMemMang.o
C_OBJECTS 	+= hooks.o
>>>>>>> 3627358... Removed old test files
168

169 170
# Objects build from assembly source files
ASM_OBJECTS	= board_fstartup.o
171

172
# AT91LIB objects built from assembly source files 
173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189
ASM_OBJECTS	+= cp15_asm_gcc.o

#Append OBJ and BIN directories to output filename
OUTPUT	:= $(BIN)/$(OUTPUT)

#-------------------------------------------------------------------------------
#		Rules
#-------------------------------------------------------------------------------
all: $(BIN) $(OBJ) $(MEMORIES)

$(BIN) $(OBJ):
	mkdir $@

define RULES
C_OBJECTS_$(1) = $(addprefix $(OBJ)/$(1)_, $(C_OBJECTS))
ASM_OBJECTS_$(1) = $(addprefix $(OBJ)/$(1)_, $(ASM_OBJECTS))

190
$(1): $$(ASM_OBJECTS_$(1)) $$(C_OBJECTS_$(1))
191 192 193 194 195 196
	$(CC) $(LDFLAGS) -T"$(AT91LIB)/boards/$(BOARD)/$(CHIP)/$$@.lds" \
	-o $(OUTPUT)-$$@.elf $$^
	$(OBJCOPY) -O binary $(OUTPUT)-$$@.elf $(OUTPUT)-$$@.bin
	$(SIZE) $$^ $(OUTPUT)-$$@.elf

$$(C_OBJECTS_$(1)): $(OBJ)/$(1)_%.o: %.c Makefile $(OBJ) $(BIN)
197 198
	@echo $(CFLAGS)
	$(CC) $(CFLAGS) -D$(1) -c -o $$@ $$<
199 200 201 202 203

$$(ASM_OBJECTS_$(1)): $(OBJ)/$(1)_%.o: %.S Makefile $(OBJ) $(BIN)
	$(CC) $(ASFLAGS) -D$(1) -c -o $$@ $$<

debug_$(1): $(1)
204 205
	@echo "Starting a remote gdb session."
	./opt/gdb/debug.sh $(OUTPUT)-$(1).elf
206 207 208

endef

209 210 211 212 213 214 215 216 217 218 219 220 221
ifeq (flash, $(firstword $(MAKECMDGOALS)))
	FLASH_ARGS := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
endif

.PHONY: nand ram jlink flash connect clean

jlink: sdram
	@echo "Starting a J-Link connection."
	./opt/jlink/jlink.sh

connect:
	@echo "Connectiong to debug port."
	./opt/tty/connect.sh
222

223 224 225 226 227 228 229 230 231 232 233
flash: sdram
	@echo "Flashing binary to "$(FLASH_ARGS)"."
	./opt/flashing/flash.sh $(FLASH_ARGS)

nand:
	@:

ram :
	@:

$(foreach MEMORY, $(MEMORIES), $(eval $(call RULES,$(MEMORY))))
234 235

clean:
236
	-rm -f $(OBJ)/*.o $(BIN)/*.bin $(BIN)/*.elf flash.log cmd.gdb
237 238