summaryrefslogtreecommitdiff
path: root/stm32/Rules.mk
blob: 4751496961f7cd7f41a0180dd1aefa3615a5d10d (plain)
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
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
137
138
139
140
141
142
143
144
BINARY		:= z180-stamp-stm32
P_BINARY	:= $(OBJPATH)/$(BINARY)

TARGETS		:= $(BINARY).elf #$(BINARY).bin

SRCS := z180-stamp-stm32.c z80-if.c hdrom.c


LIBNAME		= opencm3_stm32f1
DEFS		= -DSTM32F1
OPENCM3_DIR	:= $(TOP)/libopencm3
LDSCRIPT	:= $(d)/stm32vl-discovery.ld

FP_FLAGS	?= -msoft-float
ARCH_FLAGS	= -mthumb -mcpu=cortex-m3 $(FP_FLAGS) -mfix-cortex-m3-ldrd

STLINK_PORT = :3333 

###############################################################################
# Executables

TOOLCHAINDIR	:= /usr/local/gcc-arm-none-eabi-4_8-2014q1/bin
TOOLCHAIN	:= $(TOOLCHAINDIR)/arm-none-eabi

CC		:= $(TOOLCHAIN)-gcc
LD		:= $(TOOLCHAIN)-gcc
AR		:= $(TOOLCHAIN)-ar
AS		:= $(TOOLCHAIN)-as
OBJCOPY	:= $(TOOLCHAIN)-objcopy
OBJDUMP	:= $(TOOLCHAIN)-objdump
GDB		:= $(TOOLCHAIN)-gdb

###############################################################################
# Source files



ifeq ($(VERBOSE),true)
$(info Using $(OPENCM3_DIR) path to library)
endif

INCLUDES_$(d) := $(OPENCM3_DIR)/include
LIBDIRS_$(d)  := $(OPENCM3_DIR)/lib

SCRIPT_DIR	= $(OPENCM3_DIR)/scripts

###############################################################################
# C flags

CFLAGS_$(d)	:= -Os -g
CFLAGS_$(d)	+= -Wextra -Wshadow -Wimplicit-function-declaration
CFLAGS_$(d)	+= -Wredundant-decls #-Wstrict-prototypes
CFLAGS_$(d)	+= -fno-common -ffunction-sections -fdata-sections
CFLAGS_$(d)	+= -std=c99
CFLAGS_$(d)	+= $(ARCH_FLAGS)

###############################################################################
# C & C++ preprocessor common flags

CPPFLAGS_$(d) := $(DEFS)

###############################################################################
# Linker flags

LDFLAGS		+= --static -nostartfiles
LDFLAGS		+= -T$(LDSCRIPT)
LDFLAGS		+= -Wl,-Map=$(*).map
LDFLAGS		+= -Wl,--gc-sections

#ifeq ($(VERBOSE),true)
#LDFLAGS		+= -Wl,--print-gc-sections
#endif

###############################################################################
# Used libraries

LDLIBS		+= -l$(LIBNAME)
LDLIBS		+= -Wl,--start-group -lc -lgcc -lnosys -Wl,--end-group


###############################################################################
###############################################################################


$(BINARY).elf_DEPS = z180-stamp-stm32.o z80-if.o hdrom.o
$(BINARY).elf_CMD = $(call echo_cmd,LINK $@) $(LD) $(LDFLAGS) $(ARCH_FLAGS) $^ $(LDLIBS) -o $@

.SUFFIXES: .elf .bin .hex .srec .list .map .images
.SECONDEXPANSION:

elf: $(P_BINARY).elf
bin: $(P_BINARY).bin
hex: $(P_BINARY).hex
srec: $(P_BINARY).srec
list: $(P_BINARY).list

images: $(P_BINARY).images
flash: $(P_BINARY).flash

%.images: %.bin %.hex %.srec %.list
	$(call echo_cmd,Images generated: $*)

%.bin: %.elf
	$(call echo_cmd,OBJCOPY $@) $(OBJCOPY) -Obinary $< $@

%.hex: %.elf
	$(call echo_cmd,OBJCOPY $@) $(OBJCOPY) -Oihex $< $@

%.srec: %.elf
	$(call echo_cmd,OBJCOPY $@) $(OBJCOPY) -Osrec $< $@

%.list: %.elf
	$(call echo_cmd,OBJDUMP $@) $(OBJDUMP) -S $< > $@

#$(OBJPATH)/%.elf: $(OBJS) $(LDSCRIPT) $(LIB_DIR)/lib$(LIBNAME).a
#	@#printf "  LD      $(*).elf\n"
#	$(LD) $(LDFLAGS) $(ARCH_FLAGS) $(OBJS_$(d)) $(LDLIBS) -o $(*).elf

#%.o: %.c
#	@#printf "  CC      $(*).c\n"
#	$(Q)$(CC) $(CFLAGS) $(CPPFLAGS) $(ARCH_FLAGS) -o $(*).o -c $(*).c
#
#%.o: %.cxx
#	@#printf "  CXX     $(*).cxx\n"
#	$(Q)$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(ARCH_FLAGS) -o $(*).o -c $(*).cxx
#
#%.o: %.cpp
#	@#printf "  CXX     $(*).cpp\n"
#	$(Q)$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(ARCH_FLAGS) -o $(*).o -c $(*).cpp

#clean:
#	@#printf "  CLEAN\n"
#	$(Q)$(RM) *.o *.d *.elf *.bin *.hex *.srec *.list *.map


%.flash: %.elf
	$(call echo_cmd,GDB $< (flash)) $(GDB) --batch \
		   -ex 'target extended-remote $(STLINK_PORT)' \
		   -x $(SCRIPT_DIR)/stlink_flash.scr \
		   $<

.PHONY: images elf bin hex srec list flash