Makefile 3.86 KB
Newer Older
1
2
3
# Configuration section
#
# Use environment variables if found, otherwise fallback to sane defaults
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# If not explicitely selected (with 'make FPU=1'), compile for FPU emulation
ifeq ($(FPU),)
FPU=0
endif

# To be able to properly handle any combination of (FPU, LEON, release) 
# options, create a SUFFIX (see below) to differentiate output folders
ifeq ($(FPU),1)
FPU_SUFFIX=FPU
else
FPU_SUFFIX=NONFPU
endif

# Build up our settings from our inputs and our environment
19
LEON ?= leon3
20
RTEMS ?= /opt/rtems-4.11-2016.04.01.${FPU_SUFFIX}
21
RTEMS_MAKEFILE_PATH = ${RTEMS}/sparc-rtems4.11/${LEON}
22
RTEMS_LIB=${RTEMS_MAKEFILE_PATH}/lib
23
CROSS_PREFIX=sparc-rtems4.11
24

25
26
27
28
# If not selected, compile debug version of binary (no optimizations)
#ifeq ($(CFG),)
#CFG=debug
#endif
29
30

# The directories containing the source files, separated by ':'
31
#
32
# DEAR USER, YOU MUST EDIT THIS AND ADD YOUR SOURCE FOLDERS
33
34
35
36
VPATH=src

# Your source files: regardless of where they reside in the source tree,
# VPATH will locate them...
37
38
39
#
# DEAR USER, YOU MUST EDIT THIS
SRC= \
40
	init.c \
41
	task1.c \
42
	task2.c \
43
44
	common.c \
	memcheck.c
45

46
SUFFIX=$(CFG).$(FPU_SUFFIX).$(LEON)
47
48
49

# Build a Dependency list and an Object list, by replacing the .c
# extension to .d for dependency files, and .o for object files.
50
51
DEP = $(patsubst %.c, deps.$(SUFFIX)/%.d, ${SRC})
OBJ = $(patsubst %.c, objs.$(SUFFIX)/%.o, ${SRC})
52
53

# Your final binary
54
55
#
# DEAR USER, YOU MUST EDIT THIS
56
57
58
59
TARGET=fputest

# What compiler to use for generating dependencies: 
# it will be invoked with -MM -MP
60
CC = ${RTEMS}/bin/${CROSS_PREFIX}-gcc
61
62
63
64
65
66
67
CDEP = ${CC}

# What include flags to pass to the compiler
INCLUDEFLAGS= -I src

# Compilation flags (common)
COMMON += -B${RTEMS_LIB} -specs bsp_specs -qrtems \
68
	  -mcpu=cypress -DBSP_${LEON} \
69
70
71
72
73
74
	  -ffunction-sections -fdata-sections -Wall \
	  -Wmissing-prototypes -Wimplicit-function-declaration \
	  -Wstrict-prototypes -Wnested-externs

# Separate compile options per configuration
ifeq ($(CFG),debug)
75
CFLAGS += ${COMMON} -g -Wall -D_DEBUG ${INCLUDEFLAGS}
76
else
77
CFLAGS += ${COMMON} -g -O2 -Wall ${INCLUDEFLAGS}
78
79
endif

80
81
# Should we generate native FPU instructions for the SRC or not?
ifeq ($(FPU),0)
82
CFLAGS += -msoft-float
83
84
85
86
87
88
LDFLAGS += -msoft-float
endif

# A common link flag for all configurations
LDFLAGS += ${COMMON} -Wl,--gc-sections

89
all:	inform bin.$(SUFFIX)/${TARGET}
90
91
92
93

inform:
ifneq ($(CFG),release)
ifneq ($(CFG),debug)
94
95
96
	@echo " "
	@echo "Invalid or missing configuration (CFG) "$(CFG)" specified."
	@echo " "
97
	@echo "You must specify a configuration when running make, e.g."
98
99
100
101
102
103
104
105
	@echo " "
	@echo "    make CFG=debug LEON=leon3 FPU=1 V=1"
	@echo " "
	@echo "- Possible choices for CFG are 'release' and 'debug'"
	@echo "- Possible choices for LEON are 'leon2' and 'leon3' (default)"
	@echo "- Possible choices for FPU are '1' (native) and '0' (emulated) (default)"
	@echo "- Possible choices for V are '1' (show commands) and '0' (silent) (default)"
	@echo " "
106
107
108
109
110
	@exit 1
endif
endif


111
bin.$(SUFFIX)/${TARGET}: ${OBJ} | inform
112
113
114
115
116
117
118
119
120
121
122
	@mkdir -p $(dir $@)
ifeq ($(V),1)
	$(CC) -g -o $@ $^ ${LDFLAGS}
else
	@echo [LD] $@
	@$(CC) -g -o $@ $^ ${LDFLAGS}
endif
ifeq ($(CFG),release)
	@${CROSS_PREFIX}-objcopy --only-keep-debug $@ ${@}.debug
	@${CROSS_PREFIX}-strip $@
endif
123
	@echo Built with RTEMS at ${RTEMS_LIB} for ${LEON}.
124

125
objs.$(SUFFIX)/%.o: %.c
126
127
128
129
130
131
132
133
	@mkdir -p $(dir $@)
ifeq ($(V),1)
	$(CC) -c $(CFLAGS) -o $@ $<
else
	@echo [CC] $@
	@$(CC) -c $(CFLAGS) -o $@ $<
endif

134
deps.$(SUFFIX)/%.d: %.c
135
136
137
	@mkdir -p $(dir $@)
	@echo Generating dependencies for $<
	@set -e ; $(CDEP) -MM -MP $(INCLUDEFLAGS) $< > $@.$$$$; \
138
	sed 's,\($*\)\.o[ :]*,objs.$(SUFFIX)\/\1.o $@ : ,g' < $@.$$$$ > $@; \
139
140
141
	rm -f $@.$$$$

clean:
142
	@rm -rf deps.* objs.* bin.*
143
144
145
146
147

# Unless "make clean" is called, include the dependency files
# which are auto-generated. Don't fail if they are missing
# (-include), since they will be missing in the first invocation!
ifneq ($(MAKECMDGOALS),clean)
148
ifneq ($(CFG),)
149
-include ${DEP}
150
endif
151
endif