Subversion Repositories avr32-toolchain

Rev

Rev 12 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 12 Rev 13
1
# AVR32 Toolchain Makefile
1
# AVR32 Toolchain Makefile
2
#
2
#
3
# Copyright (C) 2011 by James Snyder <jbsnyder@fanplastic.org>
3
# Copyright (C) 2011 by James Snyder <jbsnyder@fanplastic.org>
4
#
4
#
5
# Permission is hereby granted, free of charge, to any person obtaining a copy
5
# Permission is hereby granted, free of charge, to any person obtaining a copy
6
# of this software and associated documentation files (the "Software"), to deal
6
# of this software and associated documentation files (the "Software"), to deal
7
# in the Software without restriction, including without limitation the rights
7
# in the Software without restriction, including without limitation the rights
8
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
# copies of the Software, and to permit persons to whom the Software is
9
# copies of the Software, and to permit persons to whom the Software is
10
# furnished to do so, subject to the following conditions:
10
# furnished to do so, subject to the following conditions:
11
#
11
#
12
# The above copyright notice and this permission notice shall be included in
12
# The above copyright notice and this permission notice shall be included in
13
# all copies or substantial portions of the Software.
13
# all copies or substantial portions of the Software.
14
#
14
#
15
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
# THE SOFTWARE.
21
# THE SOFTWARE.
22
22
23
#### PRIMARY TOOLCHAIN VERSIONS #####
23
#### PRIMARY TOOLCHAIN VERSIONS #####
24
24
25
GCC_VERSION       = 4.4.3
25
GCC_VERSION       = 4.4.3
26
GDB_VERSION_DLOAD = 6.7.1a
26
GDB_VERSION_DLOAD = 6.7.1a
27
GDB_VERSION       = 6.7.1
27
GDB_VERSION       = 6.7.1
28
BINUTILS_VERSION  = 2.20.1
28
BINUTILS_VERSION  = 2.20.1
29
NEWLIB_VERSION    = 1.16.0
29
NEWLIB_VERSION    = 1.16.0
30
DFU_VERSION       = 0.5.4
30
DFU_VERSION       = 0.5.4
31
AVR_PATCH_REV	  = 3.2.3.261
31
AVR_PATCH_REV	  = 3.2.3.261
32
AVR_HEADER_REV    = 3.2.3.258
32
AVR_HEADER_REV    = 3.2.3.258
33
33
34
34
35
#### PATHS AND ENVIRONMENT VARIABLES #####
35
#### PATHS AND ENVIRONMENT VARIABLES #####
36
36
37
SHELL       = /bin/bash
37
SHELL       = /bin/bash
38
TARGET      = avr32
38
TARGET      = avr32
39
39
40
TODAY = $(shell date "+%Y%m%d")
40
TODAY = $(shell date "+%Y%m%d")
41
GIT_REV	    = $(shell git rev-parse --verify HEAD --short 2> /dev/null)
41
GIT_REV	    = $(shell git rev-parse --verify HEAD --short 2> /dev/null)
42
SVN_REV	    = $(shell head -1 ReleaseNotes 2> /dev/null | cut -f 1 -d " ")
42
SVN_REV	    = $(shell head -1 ReleaseNotes 2> /dev/null | cut -f 1 -d " ")
43
43
44
ifeq ($(strip $(GIT_REV)),)
44
ifeq ($(strip $(GIT_REV)),)
45
ifeq ($(strip $(SVN_REV)),)
45
ifeq ($(strip $(SVN_REV)),)
46
PREFIX     ?= $(HOME)/avr32-tools-$(TODAY)
46
PREFIX     ?= $(HOME)/avr32-tools-$(TODAY)
47
TOOL_REV   = $(TODAY)
47
TOOL_REV   = $(TODAY)
48
else
48
else
49
PREFIX     ?= $(HOME)/avr32-tools-$(SVN_REV)
49
PREFIX     ?= $(HOME)/avr32-tools-$(SVN_REV)
50
TOOL_REV   = $(SVN_REV)
50
TOOL_REV   = $(SVN_REV)
51
BUG_URL = jasmin@anw.at
51
BUG_URL = jasmin@anw.at
52
endif
52
endif
53
else
53
else
54
PREFIX     ?= $(HOME)/avr32-tools-$(GIT_REV)
54
PREFIX     ?= $(HOME)/avr32-tools-$(GIT_REV)
55
TOOL_REV   = $(GIT_REV)
55
TOOL_REV   = $(GIT_REV)
56
endif
56
endif
57
57
58
ifeq ($(UNAME), Linux)
58
ifeq ($(UNAME), Linux)
59
PROCS  ?= $(shell grep -c ^processor /proc/cpuinfo)
59
PROCS  ?= $(shell grep -c ^processor /proc/cpuinfo)
60
else ifeq ($(UNAME), Darwin)
60
else ifeq ($(UNAME), Darwin)
61
PROCS  ?= $(shell sysctl hw.ncpu | awk '{print $$2}')
61
PROCS  ?= $(shell sysctl hw.ncpu | awk '{print $$2}')
62
else
62
else
63
PROCS  ?= 2
63
PROCS  ?= 2
64
endif
64
endif
65
65
66
SUPP_PREFIX = $(CURDIR)/supp
66
SUPP_PREFIX = $(CURDIR)/supp
67
PATH       := ${PREFIX}/bin:${SUPP_PREFIX}/bin:${PATH}
67
PATH       := ${PREFIX}/bin:${SUPP_PREFIX}/bin:${PATH}
68
AUTOCONF    = $(SUPP_PREFIX)/bin/autoconf
68
AUTOCONF    = $(SUPP_PREFIX)/bin/autoconf
69
AUTOMAKE    = $(SUPP_PREFIX)/bin/automake
69
AUTOMAKE    = $(SUPP_PREFIX)/bin/automake
70
70
71
STAMP_DIR  := $(CURDIR)/stamps
71
STAMP_DIR  := $(CURDIR)/stamps
72
DOWNLOAD_DIR := $(CURDIR)/downloads
72
DOWNLOAD_DIR := $(CURDIR)/downloads
73
BUILD_DIR := $(CURDIR)/build
73
BUILD_DIR := $(CURDIR)/build
74
74
75
ifeq ($(strip $(BUG_URL)),)
75
ifeq ($(strip $(BUG_URL)),)
76
BUG_URL = https://github.com/jsnyder/avr32-toolchain
76
BUG_URL = https://github.com/jsnyder/avr32-toolchain
77
endif
77
endif
78
PKG_VERSION = "AVR 32 bit GNU Toolchain-$(AVR_PATCH_REV)-$(TOOL_REV)"
78
PKG_VERSION = "AVR 32 bit GNU Toolchain-$(AVR_PATCH_REV)-$(TOOL_REV)"
79
79
80
80
81
#### PRIMARY TOOLCHAIN URLS #####
81
#### PRIMARY TOOLCHAIN URLS #####
82
82
83
GCC_ARCHIVE = gcc-$(GCC_VERSION).tar.bz2
83
GCC_ARCHIVE = gcc-$(GCC_VERSION).tar.bz2
84
GCC_URL = http://mirror.anl.gov/pub/gnu/gcc/gcc-$(GCC_VERSION)/$(GCC_ARCHIVE)
84
GCC_URL = http://mirror.anl.gov/pub/gnu/gcc/gcc-$(GCC_VERSION)/$(GCC_ARCHIVE)
85
GCC_MD5 = fe1ca818fc6d2caeffc9051fe67ff103
85
GCC_MD5 = fe1ca818fc6d2caeffc9051fe67ff103
86
86
87
GDB_ARCHIVE = gdb-$(GDB_VERSION_DLOAD).tar.bz2
87
GDB_ARCHIVE = gdb-$(GDB_VERSION_DLOAD).tar.bz2
88
GDB_URL = http://mirror.anl.gov/pub/gnu/gdb/$(GDB_ARCHIVE)
88
GDB_URL = http://mirror.anl.gov/pub/gnu/gdb/$(GDB_ARCHIVE)
89
GDB_MD5 = 3564f308f3e4d4f2750891bc2ce9b214
89
GDB_MD5 = 3564f308f3e4d4f2750891bc2ce9b214
90
90
91
BINUTILS_ARCHIVE = binutils-$(BINUTILS_VERSION).tar.bz2
91
BINUTILS_ARCHIVE = binutils-$(BINUTILS_VERSION).tar.bz2
92
BINUTILS_URL = http://mirror.anl.gov/pub/gnu/binutils/$(BINUTILS_ARCHIVE)
92
BINUTILS_URL = http://mirror.anl.gov/pub/gnu/binutils/$(BINUTILS_ARCHIVE)
93
BINUTILS_MD5 = 2b9dc8f2b7dbd5ec5992c6e29de0b764
93
BINUTILS_MD5 = 2b9dc8f2b7dbd5ec5992c6e29de0b764
94
94
95
NEWLIB_ARCHIVE = newlib-$(NEWLIB_VERSION).tar.gz
95
NEWLIB_ARCHIVE = newlib-$(NEWLIB_VERSION).tar.gz
96
NEWLIB_URL = ftp://sources.redhat.com/pub/newlib/$(NEWLIB_ARCHIVE)
96
NEWLIB_URL = ftp://sources.redhat.com/pub/newlib/$(NEWLIB_ARCHIVE)
97
NEWLIB_MD5 = bf8f1f9e3ca83d732c00a79a6ef29bc4
97
NEWLIB_MD5 = bf8f1f9e3ca83d732c00a79a6ef29bc4
98
98
99
AVR32PATCHES_ARCHIVE = avr32-gnu-toolchain-$(AVR_PATCH_REV)-source.zip
99
AVR32PATCHES_ARCHIVE = avr32-gnu-toolchain-$(AVR_PATCH_REV)-source.zip
100
AVR32PATCHES_URL=http://www.atmel.com/dyn/resources/prod_documents/$(AVR32PATCHES_ARCHIVE)
100
AVR32PATCHES_URL=http://www.atmel.com/dyn/resources/prod_documents/$(AVR32PATCHES_ARCHIVE)
101
AVR32PATCHES_MD5 = 69a03828a328068f25d457cfd8341857
101
AVR32PATCHES_MD5 = 69a03828a328068f25d457cfd8341857
102
102
103
AVR32HEADERS_ARCHIVE = avr32-headers-$(AVR_HEADER_REV).zip
103
AVR32HEADERS_ARCHIVE = avr32-headers-$(AVR_HEADER_REV).zip
104
AVR32HEADERS_URL=http://www.atmel.com/dyn/resources/prod_documents/$(AVR32HEADERS_ARCHIVE)
104
AVR32HEADERS_URL=http://www.atmel.com/dyn/resources/prod_documents/$(AVR32HEADERS_ARCHIVE)
105
AVR32HEADERS_MD5 = 3293d70a46e460d342e1f939b8e0d228
105
AVR32HEADERS_MD5 = 3293d70a46e460d342e1f939b8e0d228
106
106
107
DFU_ARCHIVE = dfu-programmer-$(DFU_VERSION).tar.gz
107
DFU_ARCHIVE = dfu-programmer-$(DFU_VERSION).tar.gz
108
DFU_URL = http://surfnet.dl.sourceforge.net/project/dfu-programmer/dfu-programmer/$(DFU_VERSION)/$(DFU_ARCHIVE)
108
DFU_URL = http://surfnet.dl.sourceforge.net/project/dfu-programmer/dfu-programmer/$(DFU_VERSION)/$(DFU_ARCHIVE)
109
DFU_MD5 = 707dcd0f957a74e92456ea6919faa772
109
DFU_MD5 = 707dcd0f957a74e92456ea6919faa772
110
110
111
111
112
##### SUPPORT TOOLS VERSIONS / URLS ######
112
##### SUPPORT TOOLS VERSIONS / URLS ######
113
AUTOCONF_VERSION = 2.64
113
AUTOCONF_VERSION = 2.64
114
AUTOMAKE_VERSION = 1.11
114
AUTOMAKE_VERSION = 1.11
115
MPC_VERSION = 0.8.1
115
MPC_VERSION = 0.8.1
116
116
117
AUTOCONF_ARCHIVE = autoconf-$(AUTOCONF_VERSION).tar.bz2
117
AUTOCONF_ARCHIVE = autoconf-$(AUTOCONF_VERSION).tar.bz2
118
AUTOCONF_URL = http://mirror.anl.gov/pub/gnu/autoconf/$(AUTOCONF_ARCHIVE)
118
AUTOCONF_URL = http://mirror.anl.gov/pub/gnu/autoconf/$(AUTOCONF_ARCHIVE)
119
AUTOCONF_MD5 = ef400d672005e0be21e0d20648169074
119
AUTOCONF_MD5 = ef400d672005e0be21e0d20648169074
120
120
121
AUTOMAKE_ARCHIVE = automake-$(AUTOMAKE_VERSION).tar.bz2
121
AUTOMAKE_ARCHIVE = automake-$(AUTOMAKE_VERSION).tar.bz2
122
AUTOMAKE_URL = http://mirror.anl.gov/pub/gnu/automake/$(AUTOMAKE_ARCHIVE)
122
AUTOMAKE_URL = http://mirror.anl.gov/pub/gnu/automake/$(AUTOMAKE_ARCHIVE)
123
AUTOMAKE_MD5 = 4db4efe027e26b33930a7e151de19d0f
123
AUTOMAKE_MD5 = 4db4efe027e26b33930a7e151de19d0f
124
124
125
125
-
 
126
ALL_TOOLS := gcc gdb binutils newlib avr32patches avr32headers dfu autoconf automake
-
 
127
-
 
128
126
129
127
.PHONY: install-tools
130
.PHONY: install-tools
128
install-tools: install-binutils install-final-gcc install-newlib install-headers
131
install-tools: install-binutils install-final-gcc install-newlib install-headers
129
132
130
.PHONY: install-cross
133
.PHONY: install-cross
131
install-cross: install-tools install-note
134
install-cross: install-tools install-note
132
135
133
136
134
.PHONY: sudomode
137
.PHONY: sudomode
135
sudomode:
138
sudomode:
136
ifneq ($(USER),root)
139
ifneq ($(USER),root)
137
	@echo Please run this target with sudo!
140
	@echo Please run this target with sudo!
138
	@echo e.g.: sudo make targetname
141
	@echo e.g.: sudo make targetname
139
	@exit 1
142
	@exit 1
140
endif
143
endif
141
144
142
145
143
.PHONY: tst
146
.PHONY: tst
144
tst:
147
tst:
145
	@echo "PREFIX=$(PREFIX)"
148
	@echo "PREFIX=$(PREFIX)"
146
	@echo "PKG_VERSION=$(PKG_VERSION)"
149
	@echo "PKG_VERSION=$(PKG_VERSION)"
147
	@echo "BUG_URL=$(BUG_URL)"
150
	@echo "BUG_URL=$(BUG_URL)"
148
151
149
152
150
############ MACROS for the lazy people ;-) ############
153
############ MACROS for the lazy people ;-) ############
151
154
-
 
155
## in silent mode (make -s),, print whats ging on
152
ifeq ($(strip $(MAKEFLAGS)),s)
156
ifeq ($(strip $(MAKEFLAGS)),s)
153
define quiet_text
157
define quiet_text
154
	@echo "$1"
158
	@echo "$1"
155
endef
159
endef
156
else
160
else
157
define quiet_text
161
define quiet_text
158
endef
162
endef
159
endif
163
endif
160
164
-
 
165
## the stamp name
-
 
166
define name_stamp
-
 
167
$(STAMP_DIR)/$(1)
-
 
168
endef
-
 
169
161
## remove a stamp
170
## remove a stamp
162
define rm_stamp
171
define rm_stamp
163
	rm -f $(STAMP_DIR)/$(1)
172
	rm -f $(STAMP_DIR)/$(1)
164
endef
173
endef
165
174
166
## remove all stamps
175
## remove all stamps
167
define rm_stamps
176
define rm_stamps
168
	rm -f $(STAMP_DIR)/*-$(1)
177
	rm -f $(STAMP_DIR)/*-$(1)
169
endef
178
endef
170
179
171
## create the stamp directory if not existing and the stamp
180
## create the stamp directory if not existing and the stamp
172
define make_stamp
181
define make_stamp
173
	@[ -d $(STAMP_DIR) ] || mkdir $(STAMP_DIR)
182
	@[ -d $(STAMP_DIR) ] || mkdir $(STAMP_DIR)
174
	date > $(STAMP_DIR)/$(1)
183
	date > $(STAMP_DIR)/$(1)
175
endef
184
endef
176
185
-
 
186
## delete the given directory, if it is empty
-
 
187
define del_all_empty-directories
-
 
188
	@find . -type d -empty | xargs rm -rf
-
 
189
endef
-
 
190
-
 
191
## to make the following macros more simply, we need the variables
-
 
192
## with the tool name in lowercase. I could have changed the original
-
 
193
## definition, but I don't want to break the make convention of upper
-
 
194
## case definitions for such user defined variables.
-
 
195
177
define GET_MY_VARS
196
define LOWER_TOOL_VARS
178
UP_$(1) = $$(shell echo "$(1)" | tr '[a-z]' '[A-Z]')
197
UP_$(1) := $(shell echo "$(1)" | tr '[a-z]' '[A-Z]')
179
MY_VERSION = $$($$(UP_$(1))_VERSION)
198
$(1)_VERSION := $$($$(UP_$(1))_VERSION)
180
MY_ARCHIVE = $$($$(UP_$(1))_ARCHIVE)
199
$(1)_ARCHIVE := $$($$(UP_$(1))_ARCHIVE)
181
MY_URL = $$($$(UP_$(1))_URL)
200
$(1)_URL := $$($$(UP_$(1))_URL)
182
MY_MD5 = $$($$(UP_$(1))_MD5)
201
$(1)_MD5 := $$($$(UP_$(1))_MD5)
183
endef	                         
202
endef
-
 
203
-
 
204
$(foreach tool,$(ALL_TOOLS),$(eval $(call LOWER_TOOL_VARS,$(tool))))
-
 
205
184
206
185
## create the download rule and force download rule
207
## create the download rule and force download rule
186
define DOWNLOAD_template
208
define DOWNLOAD_template
187
$(call GET_MY_VARS,$(1))
-
 
188
$(warning $(1) -> $(MY_URL))
-
 
189
$(warning $(1) -> $(MY_URL))
-
 
190
$(warning $(1) -> $(MY_URL))
-
 
191
$(warning $(1) -> $(MY_URL))
-
 
192
$(warning $(1) -> $(MY_URL))
-
 
193
$(warning $(1) -> $(MY_URL))
-
 
194
$(warning $(1) -> $(MY_URL))
-
 
195
$(warning $(1) -> $(MY_URL))
-
 
196
download-$(1): $(DOWNLOAD_DIR)/$$(MY_ARCHIVE)
209
download-$(1): $(DOWNLOAD_DIR)/$$($(1)_ARCHIVE)
197
download-$(1)-f $(DOWNLOAD_DIR)/$$(MY_ARCHIVE): $(DOWNLOAD_DIR)
210
download-$(1)-f $(DOWNLOAD_DIR)/$$($(1)_ARCHIVE): $(DOWNLOAD_DIR)
198
	cd $(DOWNLOAD_DIR) && curl -LO $$(MY_URL)
211
	cd $(DOWNLOAD_DIR) && curl -LO $$($(1)_URL)
199
212
-
 
213
download-$(1)_TEXT := "Removing $(DOWNLOAD_DIR)/$$($(1)_ARCHIVE)"
200
download-$(1)-remove:
214
download-$(1)-remove:
-
 
215
	$(call quiet_text,$$(download-$(1)_TEXT))
201
	rm -f $(DOWNLOAD_DIR)/$$(MY_ARCHIVE)
216
	rm -f $(DOWNLOAD_DIR)/$$($(1)_ARCHIVE)
202
217
203
PHONY += download-$(1) download-$(1)-f download-$(1)-remove
218
PHONY += download-$(1) download-$(1)-f download-$(1)-remove
204
endef
219
endef
205
220
206
## extract commands
221
## extract commands
207
EXT_BZ2 := tar -jxf
222
EXT_BZ2 := tar -jxf
208
EXT_TGZ := tar -xf
223
EXT_TGZ := tar -xf
209
EXT_ZIP := unzip -o
224
EXT_ZIP := unzip -o
210
225
211
## create the extract rule and force extract rule
226
## create the extract rule and force extract rule
212
define EXTRACT_template
227
define EXTRACT_template
213
$(call GET_MY_VARS,$(1))
228
extract-$(1)_TEXT := "Extracting $$($(1)_ARCHIVE)"
-
 
229
214
extract-$(1): $(STAMP_DIR)/extract-$(1)
230
extract-$(1): $(STAMP_DIR)/extract-$(1)
215
extract-$(1)-f $(STAMP_DIR)/extract-$(1): $(DOWNLOAD_DIR)/$$(MY_ARCHIVE)
231
extract-$(1)-f $(STAMP_DIR)/extract-$(1): $(DOWNLOAD_DIR)/$$($(1)_ARCHIVE)
216
	@(rm -rf $(1)-*; \
232
	@(rm -rf $(1)-*; \
217
	t1=`openssl md5 $$< | cut -f 2 -d " " -` && \
233
	t1=`openssl md5 $$< | cut -f 2 -d " " -` && \
218
	[ "$$$$t1" = "$$(MY_MD5)" ] || \
234
	[ "$$$$t1" = "$$($(1)_MD5)" ] || \
219
	( echo "Bad Checksum! Please remove the following file and retry: $$<" && false ))
235
	( echo "Bad Checksum! Please remove the following file and retry: $$<" && false ))
220
	$(call quiet_text,"Extracting $$(MY_ARCHIVE)")
236
	$(call quiet_text,$$(extract-$(1)_TEXT))
221
	$($(2)) $$<
237
	$($(2)) $$<
222
	$(call make_stamp,extract-$(1))
238
	$(call make_stamp,extract-$(1))
223
239
224
extract-$(1)-remove:
240
extract-$(1)-remove:
225
	rm -rf $(1)-*
241
	rm -rf $(1)-*
226
	$(call rm_stamp,extract-$(1))
242
	$(call rm_stamp,extract-$(1))
227
243
228
PHONY += extract-$(1) extract-$(1)-f extract-$(1)-remove
244
PHONY += extract-$(1) extract-$(1)-f extract-$(1)-remove
229
endef
245
endef
230
246
231
## create the configure rule and force configure rule
247
## create the configure rule and force configure rule
232
define CONF_template
248
define CONF_template
233
$(call GET_MY_VARS,$(1))
249
conf-$(1)_TEXT := "Configuring $(1) $$($(1)_VERSION)"
234
conf-$(1): $(STAMP_DIR)/conf-$(1)
250
conf-$(1): $(STAMP_DIR)/conf-$(1)
235
conf-$(1)-f $(STAMP_DIR)/conf-$(1): $(STAMP_DIR)/$(2)-$(1) $(BUILD_DIR)/$(1)
251
conf-$(1)-f $(STAMP_DIR)/conf-$(1): $(STAMP_DIR)/$(2)-$(1) $(BUILD_DIR)/$(1)
236
	@rm -rf $(BUILD_DIR)/$(1)/*
252
	@rm -rf $(BUILD_DIR)/$(1)/*
-
 
253
	$(call quiet_text,$$(conf-$(1)_TEXT))
237
	cd $(BUILD_DIR)/$(1) && \
254
	cd $(BUILD_DIR)/$(1) && \
238
	../../$(1)-$$(MY_VERSION)/configure $$($(1)_conf_opts)
255
	../../$(1)-$$($(1)_VERSION)/configure $$($(1)_conf_opts)
239
	$(call make_stamp,conf-$(1))
256
	$(call make_stamp,conf-$(1))
240
257
241
conf-$(1)-remove:
258
conf-$(1)-remove:
242
	$(call rm_stamp,conf-$(1))
259
	$(call rm_stamp,conf-$(1))
243
260
244
PHONY += conf-$(1) conf-$(1)-f conf-$(1)-remove
261
PHONY += conf-$(1) conf-$(1)-f conf-$(1)-remove
245
endef
262
endef
246
263
247
## create the build rule and force build rule
264
## create the build rule and force build rule
248
define BUILD_template
265
define BUILD_template
249
$(call GET_MY_VARS,$(1))
266
build-$(1)_TEXT := "Building $(1) $$($(1)_VERSION)"
250
build-$(1): $(STAMP_DIR)/build-$(1)
267
build-$(1): $(STAMP_DIR)/build-$(1)
251
build-$(1)-f $(STAMP_DIR)/build-$(1): $(STAMP_DIR)/conf-$(1)
268
build-$(1)-f $(STAMP_DIR)/build-$(1): $(STAMP_DIR)/conf-$(1)
-
 
269
	$(call quiet_text,$$(build-$(1)_TEXT))
252
	cd $(BUILD_DIR)/$(1) && \
270
	cd $(BUILD_DIR)/$(1) && \
253
	$(MAKE) clean && $(MAKE) -j$(PROCS)
271
	$(MAKE) clean && $(MAKE) -j$(PROCS)
254
	$(call make_stamp,build-$(1))
272
	$(call make_stamp,build-$(1))
255
273
256
build-$(1)-remove:
274
build-$(1)-remove:
257
	rm -rf $(BUILD_DIR)/$(1)
275
	rm -rf $(BUILD_DIR)/$(1)
258
	$(call rm_stamp,build-$(1))
276
	$(call rm_stamp,build-$(1))
259
277
260
PHONY += build-$(1) build-$(1)-f build-$(1)-remove
278
PHONY += build-$(1) build-$(1)-f build-$(1)-remove
261
endef
279
endef
262
280
263
## create the install rule and force install rule
281
## create the install rule and force install rule
264
define INSTALL_template
282
define INSTALL_template
-
 
283
install-$(1)_TEXT := "Installing $(1) $$($(1)_VERSION)"
265
install-$(1): $(STAMP_DIR)/install-$(1)
284
install-$(1): $(STAMP_DIR)/install-$(1)
266
install-$(1)-f $(STAMP_DIR)/install-$(1): $(STAMP_DIR)/build-$(1)
285
install-$(1)-f $(STAMP_DIR)/install-$(1): $(STAMP_DIR)/build-$(1)
-
 
286
	$(call quiet_text,$$(install-$(1)_TEXT))
267
	cd $(BUILD_DIR)/$(1) && \
287
	cd $(BUILD_DIR)/$(1) && \
268
	$(MAKE) install
288
	$(MAKE) install
269
	$(call make_stamp,install-$(1))
289
	$(call make_stamp,install-$(1))
270
290
-
 
291
uninstall-$(1)_TEXT := "Uninstalling $(1) $$($(1)_VERSION)"
271
uninstall-$(1):
292
uninstall-$(1):
-
 
293
	$(call quiet_text,$$(uninstall-$(1)_TEXT))
272
	[ -f $(BUILD_DIR)/$(1)/Makefile ] && \
294
	[ -f $(BUILD_DIR)/$(1)/Makefile ] && \
-
 
295
	[ -f $(call name_stamp,install-$(1)) ] && \
273
	cd $(BUILD_DIR)/$(1) && \
296
	cd $(BUILD_DIR)/$(1) && \
274
	$(MAKE) uninstall || true
297
	$(MAKE) uninstall || true
275
	$(call rm_stamp,install-$(1))
298
	$(call rm_stamp,install-$(1))
276
299
277
PHONY += install-$(1) install-$(1)-f uninstall-$(1)
300
PHONY += install-$(1) install-$(1)-f uninstall-$(1)
278
endef
301
endef
279
302
280
## create the clean rule and realclean rule
303
## create the clean rule and realclean rule
281
define CLEAN_template
304
define CLEAN_template
-
 
305
clean-$(1)_TEXT := "Cleaning $(1) $$($(1)_VERSION)"
-
 
306
clean-$(1)-text:
-
 
307
	$(call quiet_text,$$(clean-$(1)_TEXT))
-
 
308
282
clean-$(1): uninstall-$(1) extract-$(1)-remove build-$(1)-remove conf-$(1)-remove
309
clean-$(1): clean-$(1)-text uninstall-$(1) extract-$(1)-remove build-$(1)-remove conf-$(1)-remove
-
 
310
	$(call del_all_empty-directories)
-
 
311
	$(call del_all_empty-directories)
-
 
312
	$(call del_all_empty-directories)
283
313
284
realclean-$(1): clean-$(1) download-$(1)-remove
314
realclean-$(1): clean-$(1) download-$(1)-remove
-
 
315
	$(call del_all_empty-directories)
-
 
316
	$(call del_all_empty-directories)
-
 
317
	$(call del_all_empty-directories)
285
318
286
PHONY += clean-$(1) realclean-$(1)
319
PHONY += clean-$(1) realclean-$(1) clean-$(1)-text
287
endef
320
endef
288
321
289
322
290
323
291
324
292
$(DOWNLOAD_DIR):
325
$(DOWNLOAD_DIR):
293
	mkdir $(DOWNLOAD_DIR)
326
	mkdir -p $@
294
327
295
$(BUILD_DIR)/%:
328
$(BUILD_DIR)/%:
296
	mkdir -p $@
329
	mkdir -p $@
297
330
-
 
331
298
############# SUPP: AUTOCONF ############
332
############# SUPP: AUTOCONF ############
299
333
300
$(eval $(call DOWNLOAD_template,autoconf))
334
$(eval $(call DOWNLOAD_template,autoconf))
301
$(eval $(call EXTRACT_template,autoconf,EXT_BZ2))
335
$(eval $(call EXTRACT_template,autoconf,EXT_BZ2))
302
autoconf_conf_opts = --prefix="$(SUPP_PREFIX)"
336
autoconf_conf_opts = --prefix="$(SUPP_PREFIX)"
303
$(eval $(call CONF_template,autoconf,extract))
337
$(eval $(call CONF_template,autoconf,extract))
304
$(eval $(call BUILD_template,autoconf))
338
$(eval $(call BUILD_template,autoconf))
305
$(eval $(call INSTALL_template,autoconf))
339
$(eval $(call INSTALL_template,autoconf))
306
$(eval $(call CLEAN_template,autoconf))
340
$(eval $(call CLEAN_template,autoconf))
307
341
308
342
309
############ SUPP: AUTOMAKE ############
343
############ SUPP: AUTOMAKE ############
310
344
311
$(eval $(call DOWNLOAD_template,automake))
345
$(eval $(call DOWNLOAD_template,automake))
312
$(eval $(call EXTRACT_template,automake,EXT_BZ2))
346
$(eval $(call EXTRACT_template,automake,EXT_BZ2))
313
automake_conf_opts = --prefix="$(SUPP_PREFIX)"
347
automake_conf_opts = --prefix="$(SUPP_PREFIX)"
314
$(eval $(call CONF_template,automake,extract))
348
$(eval $(call CONF_template,automake,extract))
315
$(eval $(call BUILD_template,automake))
349
$(eval $(call BUILD_template,automake))
316
$(eval $(call INSTALL_template,automake))
350
$(eval $(call INSTALL_template,automake))
317
$(eval $(call CLEAN_template,automake))
351
$(eval $(call CLEAN_template,automake))
318
352
319
353
320
.PHONY: $(PHONY)
354
.PHONY: $(PHONY)
321
355
322
356
323
.PHONY: tst2 tst3
357
.PHONY: tst2 tst3
324
tst2:
358
tst2:
325
	$(call make_stamp,JES)
359
	$(call make_stamp,JES)
326
tst3:
360
tst3:
327
	$(call rm_stamp,JES)
361
	$(call rm_stamp,JES)
328
362
329
363
330
.PHONY: install-note
364
.PHONY: install-note
331
install-note: install-tools
365
install-note: install-tools
332
	@echo
366
	@echo
333
	@echo ====== INSTALLATION NOTE ======
367
	@echo ====== INSTALLATION NOTE ======
334
	@echo Your tools have now been installed at the following prefix:
368
	@echo Your tools have now been installed at the following prefix:
335
	@echo $(PREFIX)
369
	@echo $(PREFIX)
336
	@echo
370
	@echo
337
	@echo Please be sure to add something similar to the following to your .bash_profile, .zshrc, etc:
371
	@echo Please be sure to add something similar to the following to your .bash_profile, .zshrc, etc:
338
	@echo export PATH=$(PREFIX)/bin:'$$PATH'
372
	@echo export PATH=$(PREFIX)/bin:'$$PATH'
339
373
340
374
341
.PHONY: install-supp-tools install-supp-tools-force
375
.PHONY: install-supp-tools install-supp-tools-force
342
install-supp-tools: stamps/install-supp-tools
376
install-supp-tools: stamps/install-supp-tools
343
install-supp-tools-force stamps/install-supp-tools: stamps/install-autoconf stamps/install-automake
377
install-supp-tools-force stamps/install-supp-tools: stamps/install-autoconf stamps/install-automake
344
	[ -d stamps ] || mkdir stamps ;
378
	[ -d stamps ] || mkdir stamps ;
345
	touch stamps/install-supp-tools;
379
	touch stamps/install-supp-tools;
346
380
347
.PHONY: clean-supp-tools
381
.PHONY: clean-supp-tools
348
clean-supp-tools: clean-autoconf clean-automake
382
clean-supp-tools: clean-autoconf clean-automake
349
	rm stamps/install-supp-tools;
383
	rm stamps/install-supp-tools;
350
384
351
.PHONY: realclean-supp-tools
385
.PHONY: realclean-supp-tools
352
realclean-supp-tools: realclean-autoconf realclean-automake
386
realclean-supp-tools: realclean-autoconf realclean-automake
353
	rm stamps/install-supp-tools;
387
	rm stamps/install-supp-tools;
354
388
355
389
356
390
357
391
358
392
359
############ SUPP: AUTOMAKE ############
393
############ SUPP: AUTOMAKE ############
360
394
361
##.PHONY: download-automake download-automake-force
395
##.PHONY: download-automake download-automake-force
362
##download-automake: downloads/$(AUTOMAKE_ARCHIVE)
396
##download-automake: downloads/$(AUTOMAKE_ARCHIVE)
363
##download-automake-force downloads/$(AUTOMAKE_ARCHIVE):
397
##download-automake-force downloads/$(AUTOMAKE_ARCHIVE):
364
##	[ -d downloads ] || mkdir downloads ;
398
##	[ -d downloads ] || mkdir downloads ;
365
##	cd downloads && curl -LO $(AUTOMAKE_URL)
399
##	cd downloads && curl -LO $(AUTOMAKE_URL)
366
400
367
##.PHONY: extract-automake extract-automake-force
401
##.PHONY: extract-automake extract-automake-force
368
##extract-automake: stamps/extract-automake
402
##extract-automake: stamps/extract-automake
369
##extract-automake-force stamps/extract-automake: downloads/$(AUTOMAKE_ARCHIVE)
403
##extract-automake-force stamps/extract-automake: downloads/$(AUTOMAKE_ARCHIVE)
370
##	@(t1=`openssl md5 $< | cut -f 2 -d " " -` && \
404
##	@(t1=`openssl md5 $< | cut -f 2 -d " " -` && \
371
##	[ "$$t1" = "$(AUTOMAKE_MD5)" ] || \
405
##	[ "$$t1" = "$(AUTOMAKE_MD5)" ] || \
372
##	( echo "Bad Checksum! Please remove the following file and retry: $<" && false ))
406
##	( echo "Bad Checksum! Please remove the following file and retry: $<" && false ))
373
##	tar -jxf $< ;
407
##	tar -jxf $< ;
374
##	[ -d stamps ] || mkdir stamps ;
408
##	[ -d stamps ] || mkdir stamps ;
375
##	touch stamps/extract-automake;
409
##	touch stamps/extract-automake;
376
410
377
##.PHONY: build-automake build-automake-force
411
##.PHONY: build-automake build-automake-force
378
##build-automake: stamps/build-automake
412
##build-automake: stamps/build-automake
379
##build-automake-force stamps/build-automake: stamps/extract-automake stamps/install-autoconf
413
##build-automake-force stamps/build-automake: stamps/extract-automake stamps/install-autoconf
380
##	mkdir -p build/automake && cd build/automake && \
414
##	mkdir -p build/automake && cd build/automake && \
381
##	../../automake-$(AUTOMAKE_VERSION)/configure --prefix="$(SUPP_PREFIX)" && \
415
##	../../automake-$(AUTOMAKE_VERSION)/configure --prefix="$(SUPP_PREFIX)" && \
382
##	$(MAKE) -j$(PROCS)
416
##	$(MAKE) -j$(PROCS)
383
##	[ -d stamps ] || mkdir stamps
417
##	[ -d stamps ] || mkdir stamps
384
##	touch stamps/build-automake;
418
##	touch stamps/build-automake;
385
419
386
##.PHONY: install-automake install-automake-force
420
##.PHONY: install-automake install-automake-force
387
##install-automake: stamps/install-automake
421
##install-automake: stamps/install-automake
388
##install-automake-force stamps/install-automake: stamps/build-automake
422
##install-automake-force stamps/install-automake: stamps/build-automake
389
##	cd build/automake && \
423
##	cd build/automake && \
390
##	$(MAKE) install
424
##	$(MAKE) install
391
##	[ -d stamps ] || mkdir stamps
425
##	[ -d stamps ] || mkdir stamps
392
##	touch stamps/install-automake;
426
##	touch stamps/install-automake;
393
427
394
##.PHONY: clean-automake
428
##.PHONY: clean-automake
395
##clean-automake:
429
##clean-automake:
396
##	rm -rf build/automake stamps/*-automake automake-*
430
##	rm -rf build/automake stamps/*-automake automake-*
397
431
398
##.PHONY: realclean-automake
432
##.PHONY: realclean-automake
399
##realclean-automake: clean-automake
433
##realclean-automake: clean-automake
400
##	rm downloads/$(AUTOMAKE_ARCHIVE)
434
##	rm downloads/$(AUTOMAKE_ARCHIVE)
401
435
402
436
403
############# AVR32 PATCHES ############
437
############# AVR32 PATCHES ############
404
438
405
.PHONY: download-avr32patches download-avr32patches-force
439
.PHONY: download-avr32patches download-avr32patches-force
406
download-avr32patches: downloads/$(AVR32PATCHES_ARCHIVE)
440
download-avr32patches: downloads/$(AVR32PATCHES_ARCHIVE)
407
download-avr32patches-force downloads/$(AVR32PATCHES_ARCHIVE):
441
download-avr32patches-force downloads/$(AVR32PATCHES_ARCHIVE):
408
	cd downloads && curl -LO $(AVR32PATCHES_URL)
442
	cd downloads && curl -LO $(AVR32PATCHES_URL)
409
443
410
.PHONY: extract-avr32patches extract-avr32patches-force
444
.PHONY: extract-avr32patches extract-avr32patches-force
411
extract-avr32patches: stamps/extract-avr32patches
445
extract-avr32patches: stamps/extract-avr32patches
412
extract-avr32patches-force stamps/extract-avr32patches: downloads/$(AVR32PATCHES_ARCHIVE)
446
extract-avr32patches-force stamps/extract-avr32patches: downloads/$(AVR32PATCHES_ARCHIVE)
413
	@(t1=`openssl md5 $< | cut -f 2 -d " " -` && \
447
	@(t1=`openssl md5 $< | cut -f 2 -d " " -` && \
414
	[ "$$t1" = "$(AVR32PATCHES_MD5)" ] || \
448
	[ "$$t1" = "$(AVR32PATCHES_MD5)" ] || \
415
	( echo "Bad Checksum! Please remove the following file and retry: $<" && false ))
449
	( echo "Bad Checksum! Please remove the following file and retry: $<" && false ))
416
	unzip -o $<
450
	unzip -o $<
417
	[ -d stamps ] || mkdir stamps
451
	[ -d stamps ] || mkdir stamps
418
	touch stamps/extract-avr32patches;
452
	touch stamps/extract-avr32patches;
419
453
420
.PHONY: clean-avr32patches
454
.PHONY: clean-avr32patches
421
clean-avr32patches:
455
clean-avr32patches:
422
	rm -rf stamps/*-avr32patches source
456
	rm -rf stamps/*-avr32patches source
423
457
424
.PHONY: realclean-avr32patches
458
.PHONY: realclean-avr32patches
425
realclean-avr32patches: clean-avr32patches
459
realclean-avr32patches: clean-avr32patches
426
	rm downloads/$(AVR32PATCHES_ARCHIVE)
460
	rm downloads/$(AVR32PATCHES_ARCHIVE)
427
461
428
462
429
############# AVR32 HEADERS ############
463
############# AVR32 HEADERS ############
430
464
431
.PHONY: download-avr32headers download-avr32headers-force
465
.PHONY: download-avr32headers download-avr32headers-force
432
download-avr32headers: downloads/$(AVR32HEADERS_ARCHIVE)
466
download-avr32headers: downloads/$(AVR32HEADERS_ARCHIVE)
433
download-avr32headers-force downloads/$(AVR32HEADERS_ARCHIVE):
467
download-avr32headers-force downloads/$(AVR32HEADERS_ARCHIVE):
434
	cd downloads && curl -LO $(AVR32HEADERS_URL)
468
	cd downloads && curl -LO $(AVR32HEADERS_URL)
435
469
436
.PHONY: install-headers install-headers-force
470
.PHONY: install-headers install-headers-force
437
install-headers: stamps/install-headers
471
install-headers: stamps/install-headers
438
install-headers-force stamps/install-headers: downloads/$(AVR32HEADERS_ARCHIVE) stamps/install-final-gcc
472
install-headers-force stamps/install-headers: downloads/$(AVR32HEADERS_ARCHIVE) stamps/install-final-gcc
439
	@(t1=`openssl md5 $< | cut -f 2 -d " " -` && \
473
	@(t1=`openssl md5 $< | cut -f 2 -d " " -` && \
440
	[ "$$t1" = "$(AVR32HEADERS_MD5)" ] || \
474
	[ "$$t1" = "$(AVR32HEADERS_MD5)" ] || \
441
	( echo "Bad Checksum! Please remove the following file and retry: $<" && false ))
475
	( echo "Bad Checksum! Please remove the following file and retry: $<" && false ))
442
	unzip -o $< -d "$(PREFIX)/$(TARGET)/include/" && \
476
	unzip -o $< -d "$(PREFIX)/$(TARGET)/include/" && \
443
	[ -d stamps ] || mkdir stamps
477
	[ -d stamps ] || mkdir stamps
444
	touch stamps/install-headers;
478
	touch stamps/install-headers;
445
479
446
.PHONY: clean-headers
480
.PHONY: clean-headers
447
clean-headers:
481
clean-headers:
448
	rm -rf stamps/*-headers $(PREFIX)/$(TARGET)/include/avr32
482
	rm -rf stamps/*-headers $(PREFIX)/$(TARGET)/include/avr32
449
483
450
.PHONY: realclean-headers
484
.PHONY: realclean-headers
451
realclean-headers: clean-headers
485
realclean-headers: clean-headers
452
	rm downloads/$(AVR32HEADERS_ARCHIVE)
486
	rm downloads/$(AVR32HEADERS_ARCHIVE)
453
487
454
488
455
################ NEWLIB ################
489
################ NEWLIB ################
456
490
457
.PHONY: download-newlib download-newlib-force
491
.PHONY: download-newlib download-newlib-force
458
download-newlib: downloads/$(NEWLIB_ARCHIVE)
492
download-newlib: downloads/$(NEWLIB_ARCHIVE)
459
download-newlib-force downloads/$(NEWLIB_ARCHIVE):
493
download-newlib-force downloads/$(NEWLIB_ARCHIVE):
460
	[ -d downloads ] || mkdir downloads ;
494
	[ -d downloads ] || mkdir downloads ;
461
	cd downloads && curl -LO $(NEWLIB_URL)
495
	cd downloads && curl -LO $(NEWLIB_URL)
462
496
463
.PHONY: extract-newlib extract-newlib-force
497
.PHONY: extract-newlib extract-newlib-force
464
extract-newlib: stamps/extract-newlib
498
extract-newlib: stamps/extract-newlib
465
extract-newlib-force stamps/extract-newlib : downloads/$(NEWLIB_ARCHIVE)
499
extract-newlib-force stamps/extract-newlib : downloads/$(NEWLIB_ARCHIVE)
466
	@(t1=`openssl md5 $< | cut -f 2 -d " " -` && \
500
	@(t1=`openssl md5 $< | cut -f 2 -d " " -` && \
467
	[ "$$t1" = "$(NEWLIB_MD5)" ] || \
501
	[ "$$t1" = "$(NEWLIB_MD5)" ] || \
468
	( echo "Bad Checksum! Please remove the following file and retry: $<" && false ))
502
	( echo "Bad Checksum! Please remove the following file and retry: $<" && false ))
469
	tar -xf $<
503
	tar -xf $<
470
	[ -d stamps ] || mkdir stamps
504
	[ -d stamps ] || mkdir stamps
471
	touch stamps/extract-newlib;
505
	touch stamps/extract-newlib;
472
506
473
507
474
.PHONY: patch-newlib patch-newlib-force
508
.PHONY: patch-newlib patch-newlib-force
475
patch-newlib: stamps/patch-newlib
509
patch-newlib: stamps/patch-newlib
476
patch-newlib-force stamps/patch-newlib: stamps/extract-newlib stamps/extract-avr32patches
510
patch-newlib-force stamps/patch-newlib: stamps/extract-newlib stamps/extract-avr32patches
477
	pushd newlib-$(NEWLIB_VERSION) ; \
511
	pushd newlib-$(NEWLIB_VERSION) ; \
478
	for f in ../source/avr32/newlib/*.patch; do \
512
	for f in ../source/avr32/newlib/*.patch; do \
479
	patch -N -p0 <$${f} ; \
513
	patch -N -p0 <$${f} ; \
480
	done ; \
514
	done ; \
481
	popd ;
515
	popd ;
482
	[ -d stamps ] || mkdir stamps
516
	[ -d stamps ] || mkdir stamps
483
	touch stamps/patch-newlib;
517
	touch stamps/patch-newlib;
484
518
485
.PHONY: regen-newlib regen-newlib-force
519
.PHONY: regen-newlib regen-newlib-force
486
regen-newlib: stamps/regen-newlib
520
regen-newlib: stamps/regen-newlib
487
regen-newlib-force stamps/regen-newlib: stamps/patch-newlib stamps/install-supp-tools
521
regen-newlib-force stamps/regen-newlib: stamps/patch-newlib stamps/install-supp-tools
488
	pushd newlib-$(NEWLIB_VERSION) ; \
522
	pushd newlib-$(NEWLIB_VERSION) ; \
489
	"$(SUPP_PREFIX)/bin/autoconf"; "$(SUPP_PREFIX)/bin/automake" ; \
523
	"$(SUPP_PREFIX)/bin/autoconf"; "$(SUPP_PREFIX)/bin/automake" ; \
490
	for dir in newlib/libc/machine/avr32 newlib/libc/machine newlib/libc/sys/avr32 newlib/libc/sys; do \
524
	for dir in newlib/libc/machine/avr32 newlib/libc/machine newlib/libc/sys/avr32 newlib/libc/sys; do \
491
	  pushd $$dir ; \
525
	  pushd $$dir ; \
492
	  "$(SUPP_PREFIX)/bin/aclocal" -I ../.. -I ../../.. -I ../../../.. ; \
526
	  "$(SUPP_PREFIX)/bin/aclocal" -I ../.. -I ../../.. -I ../../../.. ; \
493
	  "$(SUPP_PREFIX)/bin/autoconf"; "$(SUPP_PREFIX)/bin/automake"; \
527
	  "$(SUPP_PREFIX)/bin/autoconf"; "$(SUPP_PREFIX)/bin/automake"; \
494
	  popd ; \
528
	  popd ; \
495
	done; \
529
	done; \
496
	popd;
530
	popd;
497
	[ -d stamps ] || mkdir stamps
531
	[ -d stamps ] || mkdir stamps
498
	touch stamps/regen-newlib;
532
	touch stamps/regen-newlib;
499
533
500
NEWLIB_FLAGS="-ffunction-sections -fdata-sections	\
534
NEWLIB_FLAGS="-ffunction-sections -fdata-sections	\
501
-DPREFER_SIZE_OVER_SPEED -D__OPTIMIZE_SIZE__ -g -Os	\
535
-DPREFER_SIZE_OVER_SPEED -D__OPTIMIZE_SIZE__ -g -Os	\
502
-fomit-frame-pointer -fno-unroll-loops -D__BUFSIZ__=128	\
536
-fomit-frame-pointer -fno-unroll-loops -D__BUFSIZ__=128	\
503
-DSMALL_MEMORY"
537
-DSMALL_MEMORY"
504
538
505
.PHONY: build-newlib build-newlib-force
539
.PHONY: build-newlib build-newlib-force
506
build-newlib: stamps/build-newlib
540
build-newlib: stamps/build-newlib
507
build-newlib-force stamps/build-newlib: stamps/regen-newlib stamps/install-binutils stamps/install-gcc
541
build-newlib-force stamps/build-newlib: stamps/regen-newlib stamps/install-binutils stamps/install-gcc
508
	mkdir -p build/newlib && cd build/newlib && \
542
	mkdir -p build/newlib && cd build/newlib && \
509
	pushd ../../newlib-$(NEWLIB_VERSION) ; \
543
	pushd ../../newlib-$(NEWLIB_VERSION) ; \
510
	make clean ; \
544
	make clean ; \
511
	popd ; \
545
	popd ; \
512
	../../newlib-$(NEWLIB_VERSION)/configure --prefix=$(PREFIX)	\
546
	../../newlib-$(NEWLIB_VERSION)/configure --prefix=$(PREFIX)	\
513
	--with-build-time-tools=$(PREFIX)				\
547
	--with-build-time-tools=$(PREFIX)				\
514
	--target=$(TARGET) --disable-newlib-supplied-syscalls		\
548
	--target=$(TARGET) --disable-newlib-supplied-syscalls		\
515
	--disable-libgloss --disable-nls --disable-shared		\
549
	--disable-libgloss --disable-nls --disable-shared		\
516
	--enable-newlib-io-long-long --enable-newlib-io-long-double	\
550
	--enable-newlib-io-long-long --enable-newlib-io-long-double	\
517
	--enable-target-optspace --enable-newlib-io-pos-args		\
551
	--enable-target-optspace --enable-newlib-io-pos-args		\
518
	--enable-newlib-reent-small  && \
552
	--enable-newlib-reent-small  && \
519
	$(MAKE) -j$(PROCS) CFLAGS_FOR_TARGET=$(NEWLIB_FLAGS) CCASFLAGS=$(NEWLIB_FLAGS) && \
553
	$(MAKE) -j$(PROCS) CFLAGS_FOR_TARGET=$(NEWLIB_FLAGS) CCASFLAGS=$(NEWLIB_FLAGS) && \
520
	[ -d stamps ] || mkdir stamps
554
	[ -d stamps ] || mkdir stamps
521
	touch stamps/build-newlib;
555
	touch stamps/build-newlib;
522
556
523
.PHONY: install-newlib install-newlib-force
557
.PHONY: install-newlib install-newlib-force
524
install-newlib: stamps/install-newlib
558
install-newlib: stamps/install-newlib
525
install-newlib-force stamps/install-newlib: stamps/build-newlib
559
install-newlib-force stamps/install-newlib: stamps/build-newlib
526
	cd build/newlib && \
560
	cd build/newlib && \
527
	$(MAKE) install
561
	$(MAKE) install
528
	[ -d stamps ] || mkdir stamps
562
	[ -d stamps ] || mkdir stamps
529
	touch stamps/install-newlib;
563
	touch stamps/install-newlib;
530
564
531
.PHONY: clean-newlib
565
.PHONY: clean-newlib
532
clean-newlib:
566
clean-newlib:
533
	rm -rf build/newlib stamps/*-newlib newlib-*
567
	rm -rf build/newlib stamps/*-newlib newlib-*
534
568
535
.PHONY: realclean-newlib
569
.PHONY: realclean-newlib
536
realclean-newlib: clean-newlib
570
realclean-newlib: clean-newlib
537
	rm downloads/$(NEWLIB_ARCHIVE)
571
	rm downloads/$(NEWLIB_ARCHIVE)
538
572
539
573
540
################ BINUTILS ################
574
################ BINUTILS ################
541
575
542
.PHONY: download-binutils download-binutils-force
576
.PHONY: download-binutils download-binutils-force
543
download-binutils: downloads/$(BINUTILS_ARCHIVE)
577
download-binutils: downloads/$(BINUTILS_ARCHIVE)
544
download-binutils-force downloads/$(BINUTILS_ARCHIVE):
578
download-binutils-force downloads/$(BINUTILS_ARCHIVE):
545
	[ -d downloads ] || mkdir downloads ;
579
	[ -d downloads ] || mkdir downloads ;
546
	cd downloads && curl -LO $(BINUTILS_URL)
580
	cd downloads && curl -LO $(BINUTILS_URL)
547
581
548
.PHONY: extract-binutils extract-binutils-force
582
.PHONY: extract-binutils extract-binutils-force
549
extract-binutils: stamps/extract-binutils
583
extract-binutils: stamps/extract-binutils
550
extract-binutils-force stamps/extract-binutils: downloads/$(BINUTILS_ARCHIVE)
584
extract-binutils-force stamps/extract-binutils: downloads/$(BINUTILS_ARCHIVE)
551
	@(t1=`openssl md5 $< | cut -f 2 -d " " -` && \
585
	@(t1=`openssl md5 $< | cut -f 2 -d " " -` && \
552
	[ "$$t1" = "$(BINUTILS_MD5)" ] || \
586
	[ "$$t1" = "$(BINUTILS_MD5)" ] || \
553
	( echo "Bad Checksum! Please remove the following file and retry: $<" && false ))
587
	( echo "Bad Checksum! Please remove the following file and retry: $<" && false ))
554
	tar -jxf $< ;
588
	tar -jxf $< ;
555
	[ -d stamps ] || mkdir stamps ;
589
	[ -d stamps ] || mkdir stamps ;
556
	touch stamps/extract-binutils;
590
	touch stamps/extract-binutils;
557
591
558
.PHONY: patch-binutils patch-binutils-force
592
.PHONY: patch-binutils patch-binutils-force
559
patch-binutils: stamps/patch-binutils
593
patch-binutils: stamps/patch-binutils
560
patch-binutils-force stamps/patch-binutils: stamps/extract-binutils stamps/extract-avr32patches
594
patch-binutils-force stamps/patch-binutils: stamps/extract-binutils stamps/extract-avr32patches
561
	pushd binutils-$(BINUTILS_VERSION) ; \
595
	pushd binutils-$(BINUTILS_VERSION) ; \
562
	for f in ../source/avr32/binutils/*.patch; do \
596
	for f in ../source/avr32/binutils/*.patch; do \
563
	patch -N -p0 <$${f} ; \
597
	patch -N -p0 <$${f} ; \
564
	done ; \
598
	done ; \
565
	popd ; \
599
	popd ; \
566
	[ -d stamps ] || mkdir stamps
600
	[ -d stamps ] || mkdir stamps
567
	touch stamps/patch-binutils;
601
	touch stamps/patch-binutils;
568
602
569
.PHONY: regen-binutils regen-binutils-force
603
.PHONY: regen-binutils regen-binutils-force
570
regen-binutils: stamps/regen-binutils
604
regen-binutils: stamps/regen-binutils
571
regen-binutils-force stamps/regen-binutils: stamps/patch-binutils stamps/install-supp-tools
605
regen-binutils-force stamps/regen-binutils: stamps/patch-binutils stamps/install-supp-tools
572
	pushd binutils-$(BINUTILS_VERSION) ; \
606
	pushd binutils-$(BINUTILS_VERSION) ; \
573
	"$(SUPP_PREFIX)/bin/aclocal" -I config ; \
607
	"$(SUPP_PREFIX)/bin/aclocal" -I config ; \
574
	"$(SUPP_PREFIX)/bin/autoconf" ; \
608
	"$(SUPP_PREFIX)/bin/autoconf" ; \
575
	"$(SUPP_PREFIX)/bin/automake" ; \
609
	"$(SUPP_PREFIX)/bin/automake" ; \
576
	"$(SUPP_PREFIX)/bin/autoheader" ; \
610
	"$(SUPP_PREFIX)/bin/autoheader" ; \
577
	for dir in bfd opcodes binutils gas ld; do \
611
	for dir in bfd opcodes binutils gas ld; do \
578
	  pushd $$dir ; \
612
	  pushd $$dir ; \
579
	  "$(SUPP_PREFIX)/bin/autoconf"; \
613
	  "$(SUPP_PREFIX)/bin/autoconf"; \
580
	  "$(SUPP_PREFIX)/bin/automake"; \
614
	  "$(SUPP_PREFIX)/bin/automake"; \
581
	  "$(SUPP_PREFIX)/bin/autoheader"; \
615
	  "$(SUPP_PREFIX)/bin/autoheader"; \
582
	  popd ; \
616
	  popd ; \
583
	done; \
617
	done; \
584
	popd; \
618
	popd; \
585
	[ -d stamps ] || mkdir stamps ;
619
	[ -d stamps ] || mkdir stamps ;
586
	touch stamps/regen-binutils;
620
	touch stamps/regen-binutils;
587
621
588
.PHONY: build-binutils build-binutils-force
622
.PHONY: build-binutils build-binutils-force
589
build-binutils: stamps/build-binutils
623
build-binutils: stamps/build-binutils
590
build-binutils-force stamps/build-binutils: stamps/regen-binutils stamps/install-supp-tools
624
build-binutils-force stamps/build-binutils: stamps/regen-binutils stamps/install-supp-tools
591
	cd binutils-$(BINUTILS_VERSION) ; \
625
	cd binutils-$(BINUTILS_VERSION) ; \
592
	./configure   --enable-maintainer-mode		\
626
	./configure   --enable-maintainer-mode		\
593
	--prefix="$(PREFIX)" --target=$(TARGET) --disable-nls		\
627
	--prefix="$(PREFIX)" --target=$(TARGET) --disable-nls		\
594
	--disable-shared --disable-werror				\
628
	--disable-shared --disable-werror				\
595
	--with-sysroot="$(PREFIX)/$(TARGET)" --with-bugurl=$(BUG_URL) &&	\
629
	--with-sysroot="$(PREFIX)/$(TARGET)" --with-bugurl=$(BUG_URL) &&	\
596
	$(MAKE) all-bfd TARGET-bfd=headers; \
630
	$(MAKE) all-bfd TARGET-bfd=headers; \
597
	rm bfd/Makefile; \
631
	rm bfd/Makefile; \
598
	make configure-bfd; \
632
	make configure-bfd; \
599
	$(MAKE)
633
	$(MAKE)
600
	[ -d stamps ] || mkdir stamps ;
634
	[ -d stamps ] || mkdir stamps ;
601
	touch stamps/build-binutils;
635
	touch stamps/build-binutils;
602
636
603
.PHONY: install-binutils install-binutils-force
637
.PHONY: install-binutils install-binutils-force
604
install-binutils: stamps/install-binutils
638
install-binutils: stamps/install-binutils
605
install-binutils-force stamps/install-binutils: stamps/build-binutils
639
install-binutils-force stamps/install-binutils: stamps/build-binutils
606
	cd binutils-$(BINUTILS_VERSION) && \
640
	cd binutils-$(BINUTILS_VERSION) && \
607
	$(MAKE) installdirs install-host install-target
641
	$(MAKE) installdirs install-host install-target
608
	[ -d stamps ] || mkdir stamps ;
642
	[ -d stamps ] || mkdir stamps ;
609
	touch stamps/install-binutils;
643
	touch stamps/install-binutils;
610
644
611
645
612
.PHONY: clean-binutils
646
.PHONY: clean-binutils
613
clean-binutils:
647
clean-binutils:
614
	rm -rf build/binutils stamps/*-binutils binutils-*
648
	rm -rf build/binutils stamps/*-binutils binutils-*
615
649
616
.PHONY: realclean-binutils
650
.PHONY: realclean-binutils
617
realclean-binutils: clean-binutils
651
realclean-binutils: clean-binutils
618
	rm downloads/$(BINUTILS_ARCHIVE)
652
	rm downloads/$(BINUTILS_ARCHIVE)
619
653
620
654
621
########## DFU PROGRAMMER ###########
655
########## DFU PROGRAMMER ###########
622
656
623
.PHONY: download-dfu download-dfu-force
657
.PHONY: download-dfu download-dfu-force
624
download-dfu: downloads/$(DFU_ARCHIVE)
658
download-dfu: downloads/$(DFU_ARCHIVE)
625
download-dfu-force downloads/$(DFU_ARCHIVE):
659
download-dfu-force downloads/$(DFU_ARCHIVE):
626
	[ -d downloads ] || mkdir downloads ;
660
	[ -d downloads ] || mkdir downloads ;
627
	cd downloads && curl -LO $(DFU_URL)
661
	cd downloads && curl -LO $(DFU_URL)
628
662
629
.PHONY: extract-dfu extract-dfu-force
663
.PHONY: extract-dfu extract-dfu-force
630
extract-dfu: stamps/extract-dfu
664
extract-dfu: stamps/extract-dfu
631
extract-dfu-force stamps/extract-dfu: downloads/$(DFU_ARCHIVE)
665
extract-dfu-force stamps/extract-dfu: downloads/$(DFU_ARCHIVE)
632
	@(t1=`openssl md5 $< | cut -f 2 -d " " -` && \
666
	@(t1=`openssl md5 $< | cut -f 2 -d " " -` && \
633
	[ "$$t1" = "$(DFU_MD5)" ] || \
667
	[ "$$t1" = "$(DFU_MD5)" ] || \
634
	( echo "Bad Checksum! Please remove the following file and retry: $<" && false ))
668
	( echo "Bad Checksum! Please remove the following file and retry: $<" && false ))
635
	tar -zxf $< ;
669
	tar -zxf $< ;
636
	[ -d stamps ] || mkdir stamps ;
670
	[ -d stamps ] || mkdir stamps ;
637
	touch stamps/extract-dfu;
671
	touch stamps/extract-dfu;
638
672
639
.PHONY: build-dfu build-dfu-force
673
.PHONY: build-dfu build-dfu-force
640
build-dfu: stamps/build-dfu
674
build-dfu: stamps/build-dfu
641
build-dfu-force stamps/build-dfu: stamps/extract-dfu
675
build-dfu-force stamps/build-dfu: stamps/extract-dfu
642
	mkdir -p build/dfu-programmer && cd build/dfu-programmer && \
676
	mkdir -p build/dfu-programmer && cd build/dfu-programmer && \
643
	../../dfu-programmer-$(DFU_VERSION)/configure --prefix="$(PREFIX)" && \
677
	../../dfu-programmer-$(DFU_VERSION)/configure --prefix="$(PREFIX)" && \
644
	$(MAKE) -j$(PROCS)
678
	$(MAKE) -j$(PROCS)
645
	[ -d stamps ] || mkdir stamps
679
	[ -d stamps ] || mkdir stamps
646
	touch stamps/build-dfu;
680
	touch stamps/build-dfu;
647
681
648
.PHONY: install-dfu install-dfu-force
682
.PHONY: install-dfu install-dfu-force
649
install-dfu: stamps/install-dfu
683
install-dfu: stamps/install-dfu
650
install-dfu-force stamps/install-dfu: stamps/build-dfu
684
install-dfu-force stamps/install-dfu: stamps/build-dfu
651
	cd build/dfu-programmer && \
685
	cd build/dfu-programmer && \
652
	$(MAKE) install
686
	$(MAKE) install
653
	[ -d stamps ] || mkdir stamps
687
	[ -d stamps ] || mkdir stamps
654
	touch stamps/install-dfu;
688
	touch stamps/install-dfu;
655
689
656
.PHONY: clean-dfu
690
.PHONY: clean-dfu
657
clean-dfu:
691
clean-dfu:
658
	rm -rf build/dfu stamps/*-dfu dfu-*
692
	rm -rf build/dfu stamps/*-dfu dfu-*
659
693
660
.PHONY: realclean-dfu
694
.PHONY: realclean-dfu
661
realclean-dfu: clean-dfu
695
realclean-dfu: clean-dfu
662
	rm downloads/$(DFU_ARCHIVE)
696
	rm downloads/$(DFU_ARCHIVE)
663
697
664
698
665
################ Bootstrap GCC ################
699
################ Bootstrap GCC ################
666
700
667
.PHONY: download-gcc download-gcc-force
701
.PHONY: download-gcc download-gcc-force
668
download-gcc: downloads/$(GCC_ARCHIVE)
702
download-gcc: downloads/$(GCC_ARCHIVE)
669
download-gcc-force downloads/$(GCC_ARCHIVE):
703
download-gcc-force downloads/$(GCC_ARCHIVE):
670
	[ -d downloads ] || mkdir downloads ;
704
	[ -d downloads ] || mkdir downloads ;
671
	cd downloads && curl -LO $(GCC_URL)
705
	cd downloads && curl -LO $(GCC_URL)
672
706
673
.PHONY: extract-gcc extract-gcc-force
707
.PHONY: extract-gcc extract-gcc-force
674
extract-gcc: stamps/extract-gcc
708
extract-gcc: stamps/extract-gcc
675
extract-gcc-force stamps/extract-gcc: downloads/$(GCC_ARCHIVE)
709
extract-gcc-force stamps/extract-gcc: downloads/$(GCC_ARCHIVE)
676
	@(t1=`openssl md5 $< | cut -f 2 -d " " -` && \
710
	@(t1=`openssl md5 $< | cut -f 2 -d " " -` && \
677
	[ "$$t1" = "$(GCC_MD5)" ] || \
711
	[ "$$t1" = "$(GCC_MD5)" ] || \
678
	( echo "Bad Checksum! Please remove the following file and retry: $<" && false ))
712
	( echo "Bad Checksum! Please remove the following file and retry: $<" && false ))
679
	tar -jxf $< ;
713
	tar -jxf $< ;
680
	[ -d stamps ] || mkdir stamps ;
714
	[ -d stamps ] || mkdir stamps ;
681
	touch stamps/extract-gcc;
715
	touch stamps/extract-gcc;
682
716
683
.PHONY: patch-gcc patch-gcc-force
717
.PHONY: patch-gcc patch-gcc-force
684
patch-gcc: stamps/patch-gcc
718
patch-gcc: stamps/patch-gcc
685
patch-gcc-force stamps/patch-gcc: stamps/extract-gcc stamps/extract-avr32patches
719
patch-gcc-force stamps/patch-gcc: stamps/extract-gcc stamps/extract-avr32patches
686
	pushd gcc-$(GCC_VERSION) ; \
720
	pushd gcc-$(GCC_VERSION) ; \
687
	for f in ../source/avr32/gcc/*.patch; do \
721
	for f in ../source/avr32/gcc/*.patch; do \
688
	patch -N -p0 <$${f} ; \
722
	patch -N -p0 <$${f} ; \
689
	done ; \
723
	done ; \
690
	popd ;
724
	popd ;
691
	[ -d stamps ] || mkdir stamps
725
	[ -d stamps ] || mkdir stamps
692
	touch stamps/patch-gcc;
726
	touch stamps/patch-gcc;
693
727
694
CFLAGS_FOR_TARGET="-ffunction-sections -fdata-sections			\
728
CFLAGS_FOR_TARGET="-ffunction-sections -fdata-sections			\
695
-fomit-frame-pointer -DPREFER_SIZE_OVER_SPEED -D__OPTIMIZE_SIZE__ -g	\
729
-fomit-frame-pointer -DPREFER_SIZE_OVER_SPEED -D__OPTIMIZE_SIZE__ -g	\
696
-Os -fno-unroll-loops"
730
-Os -fno-unroll-loops"
697
731
698
.PHONY: build-gcc build-gcc-force
732
.PHONY: build-gcc build-gcc-force
699
build-gcc: stamps/build-gcc
733
build-gcc: stamps/build-gcc
700
build-gcc-force stamps/build-gcc: stamps/install-binutils stamps/patch-gcc
734
build-gcc-force stamps/build-gcc: stamps/install-binutils stamps/patch-gcc
701
	mkdir -p build/gcc && cd build/gcc && \
735
	mkdir -p build/gcc && cd build/gcc && \
702
	pushd ../../gcc-$(GCC_VERSION) ; \
736
	pushd ../../gcc-$(GCC_VERSION) ; \
703
	make clean ; \
737
	make clean ; \
704
	popd ; \
738
	popd ; \
705
	../../gcc-$(GCC_VERSION)/configure --prefix="$(PREFIX)"		\
739
	../../gcc-$(GCC_VERSION)/configure --prefix="$(PREFIX)"		\
706
	--target=$(TARGET) --enable-languages="c" --with-gnu-ld		\
740
	--target=$(TARGET) --enable-languages="c" --with-gnu-ld		\
707
	--with-gnu-as --with-newlib --disable-nls --disable-libssp	\
741
	--with-gnu-as --with-newlib --disable-nls --disable-libssp	\
708
	--with-dwarf2 --enable-sjlj-exceptions				\
742
	--with-dwarf2 --enable-sjlj-exceptions				\
709
	--enable-version-specific-runtime-libs --disable-libstdcxx-pch	\
743
	--enable-version-specific-runtime-libs --disable-libstdcxx-pch	\
710
	--disable-shared						\
744
	--disable-shared						\
711
	--with-build-time-tools="$(PREFIX)/$(TARGET)/bin"		\
745
	--with-build-time-tools="$(PREFIX)/$(TARGET)/bin"		\
712
	--enable-cxx-flags=$(CFLAGS_FOR_TARGET)				\
746
	--enable-cxx-flags=$(CFLAGS_FOR_TARGET)				\
713
	--with-sysroot="$(PREFIX)/$(TARGET)"				\
747
	--with-sysroot="$(PREFIX)/$(TARGET)"				\
714
	--with-build-sysroot="$(PREFIX)/$(TARGET)"			\
748
	--with-build-sysroot="$(PREFIX)/$(TARGET)"			\
715
	--with-build-time-tools="$(PREFIX)/$(TARGET)/bin"		\
749
	--with-build-time-tools="$(PREFIX)/$(TARGET)/bin"		\
716
	CFLAGS_FOR_TARGET=$(CFLAGS_FOR_TARGET)				\
750
	CFLAGS_FOR_TARGET=$(CFLAGS_FOR_TARGET)				\
717
	LDFLAGS_FOR_TARGET="--sysroot=\"$(PREFIX)/$(TARGET)\""		\
751
	LDFLAGS_FOR_TARGET="--sysroot=\"$(PREFIX)/$(TARGET)\""		\
718
	CPPFLAGS_FOR_TARGET="--sysroot=\"$(PREFIX)/$(TARGET)\""		\
752
	CPPFLAGS_FOR_TARGET="--sysroot=\"$(PREFIX)/$(TARGET)\""		\
719
	--with-bugurl=$(BUG_URL) \
753
	--with-bugurl=$(BUG_URL) \
720
	--with-pkgversion=$(PKG_VERSION) && \
754
	--with-pkgversion=$(PKG_VERSION) && \
721
	$(MAKE) -j$(PROCS)
755
	$(MAKE) -j$(PROCS)
722
	[ -d stamps ] || mkdir stamps
756
	[ -d stamps ] || mkdir stamps
723
	touch stamps/build-gcc;
757
	touch stamps/build-gcc;
724
758
725
.PHONY: install-gcc install-gcc-force
759
.PHONY: install-gcc install-gcc-force
726
install-gcc: stamps/install-gcc
760
install-gcc: stamps/install-gcc
727
install-gcc-force stamps/install-gcc: stamps/build-gcc
761
install-gcc-force stamps/install-gcc: stamps/build-gcc
728
	cd build/gcc && \
762
	cd build/gcc && \
729
	$(MAKE) installdirs install-target && \
763
	$(MAKE) installdirs install-target && \
730
	$(MAKE) -C gcc install-common install-cpp install- install-driver install-headers install-man
764
	$(MAKE) -C gcc install-common install-cpp install- install-driver install-headers install-man
731
	[ -d stamps ] || mkdir stamps
765
	[ -d stamps ] || mkdir stamps
732
	touch stamps/install-gcc;
766
	touch stamps/install-gcc;
733
767
734
.PHONY: clean-gcc
768
.PHONY: clean-gcc
735
clean-gcc:
769
clean-gcc:
736
	rm -rf build/gcc stamps/*-gcc gcc-*
770
	rm -rf build/gcc stamps/*-gcc gcc-*
737
771
738
.PHONY: realclean-gcc
772
.PHONY: realclean-gcc
739
realclean-gcc: clean-gcc
773
realclean-gcc: clean-gcc
740
	rm downloads/$(GCC_ARCHIVE)
774
	rm downloads/$(GCC_ARCHIVE)
741
775
742
776
743
################ Final GCC ################
777
################ Final GCC ################
744
778
745
.PHONY: build-final-gcc build-final-gcc-force
779
.PHONY: build-final-gcc build-final-gcc-force
746
build-final-gcc: stamps/build-final-gcc
780
build-final-gcc: stamps/build-final-gcc
747
build-final-gcc-force stamps/build-final-gcc: stamps/install-binutils stamps/install-gcc stamps/install-newlib stamps/patch-gcc
781
build-final-gcc-force stamps/build-final-gcc: stamps/install-binutils stamps/install-gcc stamps/install-newlib stamps/patch-gcc
748
	mkdir -p build/final-gcc && cd build/final-gcc && \
782
	mkdir -p build/final-gcc && cd build/final-gcc && \
749
	pushd ../../gcc-$(GCC_VERSION) ; \
783
	pushd ../../gcc-$(GCC_VERSION) ; \
750
	make clean ; \
784
	make clean ; \
751
	popd ; \
785
	popd ; \
752
	../../gcc-$(GCC_VERSION)/configure --prefix=$(PREFIX) \
786
	../../gcc-$(GCC_VERSION)/configure --prefix=$(PREFIX) \
753
	--target=$(TARGET) $(DEPENDENCIES) --enable-languages="c,c++" --with-gnu-ld \
787
	--target=$(TARGET) $(DEPENDENCIES) --enable-languages="c,c++" --with-gnu-ld \
754
	--with-gnu-as --with-newlib --disable-nls --disable-libssp \
788
	--with-gnu-as --with-newlib --disable-nls --disable-libssp \
755
	--with-dwarf2 --enable-sjlj-exceptions \
789
	--with-dwarf2 --enable-sjlj-exceptions \
756
	--enable-version-specific-runtime-libs --disable-libstdcxx-pch \
790
	--enable-version-specific-runtime-libs --disable-libstdcxx-pch \
757
	--disable-shared --enable-__cxa_atexit \
791
	--disable-shared --enable-__cxa_atexit \
758
	--with-build-time-tools=$(PREFIX)/$(TARGET)/bin \
792
	--with-build-time-tools=$(PREFIX)/$(TARGET)/bin \
759
	--enable-cxx-flags=$(CFLAGS_FOR_TARGET) \
793
	--enable-cxx-flags=$(CFLAGS_FOR_TARGET) \
760
	--with-sysroot=$(PREFIX)/$(TARGET) \
794
	--with-sysroot=$(PREFIX)/$(TARGET) \
761
	--with-build-sysroot=$(PREFIX)/$(TARGET) \
795
	--with-build-sysroot=$(PREFIX)/$(TARGET) \
762
	--with-build-time-tools=$(PREFIX)/$(TARGET)/bin \
796
	--with-build-time-tools=$(PREFIX)/$(TARGET)/bin \
763
	CFLAGS_FOR_TARGET=$(CFLAGS_FOR_TARGET) \
797
	CFLAGS_FOR_TARGET=$(CFLAGS_FOR_TARGET) \
764
	LDFLAGS_FOR_TARGET="--sysroot=$(PREFIX)/$(TARGET)" \
798
	LDFLAGS_FOR_TARGET="--sysroot=$(PREFIX)/$(TARGET)" \
765
	CPPFLAGS_FOR_TARGET="--sysroot=$(PREFIX)/$(TARGET)" \
799
	CPPFLAGS_FOR_TARGET="--sysroot=$(PREFIX)/$(TARGET)" \
766
	--with-bugurl=$(BUG_URL) \
800
	--with-bugurl=$(BUG_URL) \
767
	--with-pkgversion=$(PKG_VERSION) && \
801
	--with-pkgversion=$(PKG_VERSION) && \
768
	$(MAKE) -j$(PROCS)
802
	$(MAKE) -j$(PROCS)
769
	[ -d stamps ] || mkdir stamps
803
	[ -d stamps ] || mkdir stamps
770
	touch stamps/build-final-gcc;
804
	touch stamps/build-final-gcc;
771
805
772
.PHONY: install-final-gcc install-final-gcc-force
806
.PHONY: install-final-gcc install-final-gcc-force
773
install-final-gcc: stamps/install-final-gcc
807
install-final-gcc: stamps/install-final-gcc
774
install-final-gcc-force stamps/install-final-gcc: stamps/build-final-gcc
808
install-final-gcc-force stamps/install-final-gcc: stamps/build-final-gcc
775
	cd build/final-gcc && \
809
	cd build/final-gcc && \
776
	$(MAKE) installdirs install-target && \
810
	$(MAKE) installdirs install-target && \
777
	$(MAKE) -C gcc install-common install-cpp install- install-driver install-headers install-man
811
	$(MAKE) -C gcc install-common install-cpp install- install-driver install-headers install-man
778
	[ -d stamps ] || mkdir stamps
812
	[ -d stamps ] || mkdir stamps
779
	touch stamps/install-final-gcc;
813
	touch stamps/install-final-gcc;
780
814
781
.PHONY: clean-final-gcc
815
.PHONY: clean-final-gcc
782
clean-final-gcc: clean-gcc
816
clean-final-gcc: clean-gcc
783
	rm -rf build/final-gcc stamps/*-final-gcc
817
	rm -rf build/final-gcc stamps/*-final-gcc
784
818
785
.PHONY: realclean-final-gcc
819
.PHONY: realclean-final-gcc
786
realclean-final-gcc: realclean-gcc
820
realclean-final-gcc: realclean-gcc
787
821
788
822
789
########## GDB ###########
823
########## GDB ###########
790
824
791
.PHONY: download-gdb download-gdb-force
825
.PHONY: download-gdb download-gdb-force
792
download-gdb: downloads/$(GDB_ARCHIVE)
826
download-gdb: downloads/$(GDB_ARCHIVE)
793
download-gdb-force downloads/$(GDB_ARCHIVE):
827
download-gdb-force downloads/$(GDB_ARCHIVE):
794
	[ -d downloads ] || mkdir downloads ;
828
	[ -d downloads ] || mkdir downloads ;
795
	cd downloads && curl -LO $(GDB_URL)
829
	cd downloads && curl -LO $(GDB_URL)
796
830
797
.PHONY: extract-gdb extract-gdb-force
831
.PHONY: extract-gdb extract-gdb-force
798
extract-gdb: stamps/extract-gdb
832
extract-gdb: stamps/extract-gdb
799
extract-gdb-force stamps/extract-gdb: downloads/$(GDB_ARCHIVE)
833
extract-gdb-force stamps/extract-gdb: downloads/$(GDB_ARCHIVE)
800
	@(t1=`openssl md5 $< | cut -f 2 -d " " -` && \
834
	@(t1=`openssl md5 $< | cut -f 2 -d " " -` && \
801
	[ "$$t1" = "$(GDB_MD5)" ] || \
835
	[ "$$t1" = "$(GDB_MD5)" ] || \
802
	( echo "Bad Checksum! Please remove the following file and retry: $<" && false ))
836
	( echo "Bad Checksum! Please remove the following file and retry: $<" && false ))
803
	tar -jxf $< ;
837
	tar -jxf $< ;
804
	[ -d stamps ] || mkdir stamps ;
838
	[ -d stamps ] || mkdir stamps ;
805
	touch stamps/extract-gdb;
839
	touch stamps/extract-gdb;
806
840
807
.PHONY: patch-gdb patch-gdb-force
841
.PHONY: patch-gdb patch-gdb-force
808
patch-gdb: stamps/patch-gdb
842
patch-gdb: stamps/patch-gdb
809
patch-gdb-force stamps/patch-gdb: stamps/extract-gdb stamps/extract-avr32patches
843
patch-gdb-force stamps/patch-gdb: stamps/extract-gdb stamps/extract-avr32patches
810
	pushd gdb-$(GDB_VERSION) ; \
844
	pushd gdb-$(GDB_VERSION) ; \
811
	for f in ../source/avr32/gdb/*.patch; do \
845
	for f in ../source/avr32/gdb/*.patch; do \
812
	patch -N -p0 <$${f} ; \
846
	patch -N -p0 <$${f} ; \
813
	done ; \
847
	done ; \
814
	popd ; \
848
	popd ; \
815
	[ -d stamps ] || mkdir stamps
849
	[ -d stamps ] || mkdir stamps
816
	touch stamps/patch-gdb;
850
	touch stamps/patch-gdb;
817
851
818
.PHONY: regen-gdb regen-gdb-force
852
.PHONY: regen-gdb regen-gdb-force
819
regen-gdb: stamps/regen-gdb
853
regen-gdb: stamps/regen-gdb
820
regen-gdb-force stamps/regen-gdb: stamps/patch-gdb stamps/install-supp-tools
854
regen-gdb-force stamps/regen-gdb: stamps/patch-gdb stamps/install-supp-tools
821
	pushd gdb-$(GDB_VERSION) ; \
855
	pushd gdb-$(GDB_VERSION) ; \
822
	"$(SUPP_PREFIX)/bin/aclocal" -I config ; \
856
	"$(SUPP_PREFIX)/bin/aclocal" -I config ; \
823
	"$(SUPP_PREFIX)/bin/autoconf" ; \
857
	"$(SUPP_PREFIX)/bin/autoconf" ; \
824
	"$(SUPP_PREFIX)/bin/automake" ; \
858
	"$(SUPP_PREFIX)/bin/automake" ; \
825
	"$(SUPP_PREFIX)/bin/autoheader" ; \
859
	"$(SUPP_PREFIX)/bin/autoheader" ; \
826
	for dir in bfd opcodes gdb; do \
860
	for dir in bfd opcodes gdb; do \
827
	  pushd $$dir ; \
861
	  pushd $$dir ; \
828
	  echo "JESS 1: $$dir" >&2 ; \
862
	  echo "JESS 1: $$dir" >&2 ; \
829
	  "$(SUPP_PREFIX)/bin/autoconf"; \
863
	  "$(SUPP_PREFIX)/bin/autoconf"; \
830
	  "$(SUPP_PREFIX)/bin/automake"; \
864
	  "$(SUPP_PREFIX)/bin/automake"; \
831
	  "$(SUPP_PREFIX)/bin/autoheader"; \
865
	  "$(SUPP_PREFIX)/bin/autoheader"; \
832
	  echo "JESS 2: $$dir" >&2 ; \
866
	  echo "JESS 2: $$dir" >&2 ; \
833
	  popd ; \
867
	  popd ; \
834
	done; \
868
	done; \
835
	popd; \
869
	popd; \
836
	[ -d stamps ] || mkdir stamps ;
870
	[ -d stamps ] || mkdir stamps ;
837
	touch stamps/regen-gdb;
871
	touch stamps/regen-gdb;
838
872
839
.PHONY: build-gdb build-gdb-force
873
.PHONY: build-gdb build-gdb-force
840
build-gdb: stamps/build-gdb
874
build-gdb: stamps/build-gdb
841
build-gdb-force stamps/build-gdb: stamps/regen-gdb stamps/install-supp-tools
875
build-gdb-force stamps/build-gdb: stamps/regen-gdb stamps/install-supp-tools
842
	echo "JESS 3" >&2 ; \
876
	echo "JESS 3" >&2 ; \
843
	mkdir -p build/gdb && cd build/gdb && \
877
	mkdir -p build/gdb && cd build/gdb && \
844
	../../gdb-$(GDB_VERSION)/configure --prefix="$(PREFIX)" --target=$(TARGET) --disable-werror && \
878
	../../gdb-$(GDB_VERSION)/configure --prefix="$(PREFIX)" --target=$(TARGET) --disable-werror && \
845
	$(MAKE) -j$(PROCS)
879
	$(MAKE) -j$(PROCS)
846
	$(MAKE) installdirs install-host install-target
880
	$(MAKE) installdirs install-host install-target
847
	[ -d stamps ] || mkdir stamps
881
	[ -d stamps ] || mkdir stamps
848
	touch stamps/build-gdb;
882
	touch stamps/build-gdb;
849
883
850
.PHONY: install-gdb install-gdb-force
884
.PHONY: install-gdb install-gdb-force
851
install-gdb: stamps/install-gdb
885
install-gdb: stamps/install-gdb
852
install-gdb-force stamps/install-gdb: stamps/build-gdb
886
install-gdb-force stamps/install-gdb: stamps/build-gdb
853
	cd build/gdb && \
887
	cd build/gdb && \
854
	$(MAKE) install
888
	$(MAKE) install
855
	[ -d stamps ] || mkdir stamps
889
	[ -d stamps ] || mkdir stamps
856
	touch stamps/install-gdb;
890
	touch stamps/install-gdb;
857
891
858
.PHONY: clean-gdb
892
.PHONY: clean-gdb
859
clean-gdb:
893
clean-gdb:
860
	rm -rf build/gdb stamps/*-gdb gdb-*
894
	rm -rf build/gdb stamps/*-gdb gdb-*
861
895
862
.PHONY: realclean-gdb
896
.PHONY: realclean-gdb
863
realclean-gdb: clean-gdb
897
realclean-gdb: clean-gdb
864
	rm downloads/$(GDB_ARCHIVE)
898
	rm downloads/$(GDB_ARCHIVE)
865
899
866
################ NON-WORKING/NON-ADJUSTED TARGETS ################
900
################ NON-WORKING/NON-ADJUSTED TARGETS ################
867
901
868
902
869
gcc-optsize-patch: gcc-$(GCC_VERSION)-$(CS_BASE)/
903
gcc-optsize-patch: gcc-$(GCC_VERSION)-$(CS_BASE)/
870
	pushd gcc-$(GCC_VERSION)-$(CS_BASE) ; \
904
	pushd gcc-$(GCC_VERSION)-$(CS_BASE) ; \
871
	patch -N -p1 < ../patches/gcc-optsize.patch ; \
905
	patch -N -p1 < ../patches/gcc-optsize.patch ; \
872
	popd ;
906
	popd ;
873
907
874
gmp: gmp-$(CS_BASE)/ sudomode
908
gmp: gmp-$(CS_BASE)/ sudomode
875
	sudo -u $(SUDO_USER) mkdir -p build/gmp && cd build/gmp ; \
909
	sudo -u $(SUDO_USER) mkdir -p build/gmp && cd build/gmp ; \
876
	pushd ../../gmp-$(CS_BASE) ; \
910
	pushd ../../gmp-$(CS_BASE) ; \
877
	make clean ; \
911
	make clean ; \
878
	popd ; \
912
	popd ; \
879
	sudo -u $(SUDO_USER) ../../gmp-$(CS_BASE)/configure --disable-shared && \
913
	sudo -u $(SUDO_USER) ../../gmp-$(CS_BASE)/configure --disable-shared && \
880
	sudo -u $(SUDO_USER) $(MAKE) -j$(PROCS) all && \
914
	sudo -u $(SUDO_USER) $(MAKE) -j$(PROCS) all && \
881
	$(MAKE) install
915
	$(MAKE) install
882
916
883
mpc: mpc-$(MPC_VERSION)/ sudomode
917
mpc: mpc-$(MPC_VERSION)/ sudomode
884
	sudo -u $(SUDO_USER) mkdir -p build/gmp && cd build/gmp ; \
918
	sudo -u $(SUDO_USER) mkdir -p build/gmp && cd build/gmp ; \
885
	pushd ../../mpc-$(MPC_VERSION) ; \
919
	pushd ../../mpc-$(MPC_VERSION) ; \
886
	make clean ; \
920
	make clean ; \
887
	popd ; \
921
	popd ; \
888
	sudo -u $(SUDO_USER) ../../mpc-$(MPC_VERSION)/configure --disable-shared && \
922
	sudo -u $(SUDO_USER) ../../mpc-$(MPC_VERSION)/configure --disable-shared && \
889
	sudo -u $(SUDO_USER) $(MAKE) -j$(PROCS) all && \
923
	sudo -u $(SUDO_USER) $(MAKE) -j$(PROCS) all && \
890
	$(MAKE) install
924
	$(MAKE) install
891
925
892
mpc-$(MPC_VERSION) : $(LOCAL_BASE)/mpc-$(CS_VERSION).tar.bz2
926
mpc-$(MPC_VERSION) : $(LOCAL_BASE)/mpc-$(CS_VERSION).tar.bz2
893
ifeq ($(USER),root)
927
ifeq ($(USER),root)
894
	sudo -u $(SUDO_USER) tar -jxf $<
928
	sudo -u $(SUDO_USER) tar -jxf $<
895
else
929
else
896
	tar -jxf $<
930
	tar -jxf $<
897
endif
931
endif
898
932
899
mpfr: gmp mpfr-$(CS_BASE)/ sudomode
933
mpfr: gmp mpfr-$(CS_BASE)/ sudomode
900
	sudo -u $(SUDO_USER) mkdir -p build/mpfr && cd build/mpfr && \
934
	sudo -u $(SUDO_USER) mkdir -p build/mpfr && cd build/mpfr && \
901
	pushd ../../mpfr-$(CS_BASE) ; \
935
	pushd ../../mpfr-$(CS_BASE) ; \
902
	make clean ; \
936
	make clean ; \
903
	popd ; \
937
	popd ; \
904
	sudo -u $(SUDO_USER) ../../mpfr-$(CS_BASE)/configure LDFLAGS="-Wl,-search_paths_first" --disable-shared && \
938
	sudo -u $(SUDO_USER) ../../mpfr-$(CS_BASE)/configure LDFLAGS="-Wl,-search_paths_first" --disable-shared && \
905
	sudo -u $(SUDO_USER) $(MAKE) -j$(PROCS) all && \
939
	sudo -u $(SUDO_USER) $(MAKE) -j$(PROCS) all && \
906
	$(MAKE) install
940
	$(MAKE) install
907
941
908
cross-gdb: gdb-$(CS_BASE)/
942
cross-gdb: gdb-$(CS_BASE)/
909
	mkdir -p build/gdb && cd build/gdb && \
943
	mkdir -p build/gdb && cd build/gdb && \
910
	pushd ../../gdb-$(CS_BASE) ; \
944
	pushd ../../gdb-$(CS_BASE) ; \
911
	make clean ; \
945
	make clean ; \
912
	popd ; \
946
	popd ; \
913
	../../gdb-$(CS_BASE)/configure --prefix="$(PREFIX)" --target=$(TARGET) --disable-werror && \
947
	../../gdb-$(CS_BASE)/configure --prefix="$(PREFIX)" --target=$(TARGET) --disable-werror && \
914
	$(MAKE) -j$(PROCS) && \
948
	$(MAKE) -j$(PROCS) && \
915
	$(MAKE) installdirs install-host install-target && \
949
	$(MAKE) installdirs install-host install-target && \
916
	mkdir -p "$(PREFIX)/man/man1" && \
950
	mkdir -p "$(PREFIX)/man/man1" && \
917
	cp ../../gdb-$(CS_BASE)/gdb/gdb.1 "$(PREFIX)/man/man1/arm-none-eabi-gdb.1"
951
	cp ../../gdb-$(CS_BASE)/gdb/gdb.1 "$(PREFIX)/man/man1/arm-none-eabi-gdb.1"
918
952
919
.PHONY : clean
953
.PHONY : clean
920
clean:
954
clean:
921
	rm -rf build *-$(CS_BASE) binutils-* gcc-* gdb-* newlib-* mpc-* $(LOCAL_BASE) dfu-programmer-* autoconf-* automake-* stamps/* source supp
955
	rm -rf build *-$(CS_BASE) binutils-* gcc-* gdb-* newlib-* mpc-* $(LOCAL_BASE) dfu-programmer-* autoconf-* automake-* stamps/* source supp