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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
|
#
# Copyright (C) 2002-2003 Erik Andersen <andersen@uclibc.org>
# Copyright (C) 2004 Manuel Novoa III <mjn3@uclibc.org>
# Copyright (C) 2005-2006 Felix Fietkau <nbd@openwrt.org>
# Copyright (C) 2006-2012 OpenWrt.org
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
include $(TOPDIR)/rules.mk
PKG_NAME:=gcc
GCC_VERSION:=$(call qstrip,$(CONFIG_GCC_VERSION))
PKG_VERSION:=$(firstword $(subst +, ,$(GCC_VERSION)))
GCC_DIR:=$(PKG_NAME)-$(PKG_VERSION)
ifdef CONFIG_GCC_VERSION_LLVM
PKG_SOURCE_VERSION:=c98c494b72ff875884c0c7286be67f16f9f6d7ab
PKG_REV:=83504
GCC_DIR:=llvm-gcc-4.2-r$(PKG_REV)
PKG_VERSION:=4.2.1
PKG_SOURCE:=$(GCC_DIR).tar.gz
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=git://repo.or.cz/llvm-gcc-4.2.git
PKG_SOURCE_SUBDIR:=$(GCC_DIR)
HOST_BUILD_DIR:=$(BUILD_DIR_TOOLCHAIN)/$(GCC_DIR)
else
ifeq ($(findstring linaro, $(CONFIG_GCC_VERSION)),linaro)
ifeq ($(CONFIG_GCC_VERSION),"4.5-linaro")
PKG_REV:=4.5-2012.03
PKG_VERSION:=4.5.4
PKG_VERSION_MAJOR:=4.5
PKG_MD5SUM:=0c25f93e15e362e352c933e4649a7fc6
endif
ifeq ($(CONFIG_GCC_VERSION),"4.6-linaro")
PKG_REV:=4.6-2012.10
PKG_VERSION:=4.6.4
PKG_VERSION_MAJOR:=4.6
PKG_MD5SUM:=acd304caf055ccaaca4e3ef61da11e7d
endif
ifeq ($(CONFIG_GCC_VERSION),"4.7-linaro")
PKG_REV:=4.7-2012.10
PKG_VERSION:=4.7.3
PKG_VERSION_MAJOR:=4.7
PKG_MD5SUM:=a5ca87667350f1395d4da40c94ef059c
endif
PKG_SOURCE_URL:=http://launchpad.net/gcc-linaro/$(PKG_VERSION_MAJOR)/$(PKG_REV)/+download/
PKG_SOURCE:=$(PKG_NAME)-linaro-$(PKG_REV).tar.bz2
GCC_DIR:=gcc-linaro-$(PKG_REV)
HOST_BUILD_DIR:=$(BUILD_DIR_TOOLCHAIN)/$(GCC_DIR)
else
PKG_SOURCE_URL:=@GNU/gcc/gcc-$(PKG_VERSION)
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
ifeq ($(PKG_VERSION),4.4.7)
PKG_MD5SUM:=295709feb4441b04e87dea3f1bab4281
endif
ifeq ($(PKG_VERSION),4.6.2)
PKG_MD5SUM:=028115c4fbfb6cfd75d6369f4a90d87e
endif
ifeq ($(PKG_VERSION),4.6.3)
PKG_MD5SUM:=773092fe5194353b02bb0110052a972e
endif
ifeq ($(PKG_VERSION),4.7.0)
PKG_MD5SUM:=2a0f1d99fda235c29d40b561f81d9a77
endif
endif
endif
PATCH_DIR=../patches/$(GCC_VERSION)
BUGURL=https://dev.openwrt.org/
HOST_BUILD_PARALLEL:=1
include $(INCLUDE_DIR)/toolchain-build.mk
HOST_SOURCE_DIR:=$(HOST_BUILD_DIR)
ifeq ($(GCC_VARIANT),minimal)
GCC_BUILD_DIR:=$(HOST_BUILD_DIR)-$(GCC_VARIANT)
else
HOST_BUILD_DIR:=$(HOST_BUILD_DIR)-$(GCC_VARIANT)
GCC_BUILD_DIR:=$(HOST_BUILD_DIR)
endif
HOST_STAMP_PREPARED:=$(HOST_BUILD_DIR)/.prepared
HOST_STAMP_BUILT:=$(GCC_BUILD_DIR)/.built
HOST_STAMP_CONFIGURED:=$(GCC_BUILD_DIR)/.configured
HOST_STAMP_INSTALLED:=$(STAGING_DIR_HOST)/stamp/.gcc_$(GCC_VARIANT)_installed
SEP:=,
TARGET_LANGUAGES:="c$(if $(CONFIG_INSTALL_LIBSTDCPP),$(SEP)c++)$(if $(CONFIG_INSTALL_LIBGCJ),$(SEP)java)$(if $(CONFIG_INSTALL_GFORTRAN),$(SEP)fortran)"
export libgcc_cv_fixed_point=no
ifdef CONFIG_USE_UCLIBC
export glibcxx_cv_c99_math_tr1=no
endif
GCC_CONFIGURE:= \
SHELL="$(BASH)" \
$(HOST_SOURCE_DIR)/configure \
--prefix=$(TOOLCHAIN_DIR) \
--build=$(GNU_HOST_NAME) \
--host=$(GNU_HOST_NAME) \
--target=$(REAL_GNU_TARGET_NAME) \
--with-gnu-ld \
--enable-target-optspace \
--disable-libgomp \
--disable-libmudflap \
--disable-multilib \
--disable-nls \
$(GRAPHITE_CONFIGURE) \
--with-host-libstdcxx=-lstdc++ \
$(SOFT_FLOAT_CONFIG_OPTION) \
$(call qstrip,$(CONFIG_EXTRA_GCC_CONFIG_OPTIONS)) \
$(if $(CONFIG_mips64)$(CONFIG_mips64el),--with-arch=mips64 --with-abi=64) \
$(if $(CONFIG_GCC_VERSION_LLVM),--enable-llvm=$(BUILD_DIR_BASE)/host/llvm) \
$(if $(CONFIG_sparc),--with-long-double-128) \
ifeq ($(CONFIG_GCC_LLVM),)
GCC_BUILD_TARGET_LIBGCC:=y
GCC_CONFIGURE+= \
--with-gmp=$(TOPDIR)/staging_dir/host \
--with-mpfr=$(TOPDIR)/staging_dir/host \
--disable-decimal-float
ifneq ($(CONFIG_mips)$(CONFIG_mipsel),)
GCC_CONFIGURE += --with-mips-plt
endif
endif
ifneq ($(CONFIG_GCC_VERSION_4_5)$(CONFIG_GCC_VERSION_4_6),)
GCC_CONFIGURE+= \
--with-mpc=$(TOPDIR)/staging_dir/host
endif
ifneq ($(CONFIG_SSP_SUPPORT),)
GCC_CONFIGURE+= \
--enable-libssp
else
GCC_CONFIGURE+= \
--disable-libssp
endif
ifneq ($(CONFIG_EXTRA_TARGET_ARCH),)
GCC_CONFIGURE+= \
--enable-biarch \
--enable-targets=$(call qstrip,$(CONFIG_EXTRA_TARGET_ARCH_NAME))-linux-$(TARGET_SUFFIX)
endif
ifdef CONFIG_sparc
GCC_CONFIGURE+= --enable-targets=all
endif
ifeq ($(LIBC),uClibc)
GCC_CONFIGURE+= \
--disable-__cxa_atexit
else
GCC_CONFIGURE+= \
--enable-__cxa_atexit
endif
ifneq ($(GCC_ARCH),)
GCC_CONFIGURE+= --with-arch=$(GCC_ARCH)
endif
GCC_MAKE:= \
export SHELL="$(BASH)"; \
$(MAKE) $(TOOLCHAIN_JOBS) \
CFLAGS_FOR_TARGET="$(TARGET_CFLAGS)" \
CXXFLAGS_FOR_TARGET="$(TARGET_CFLAGS)"
define Host/Prepare
mkdir -p $(GCC_BUILD_DIR)
endef
define Host/Configure
(cd $(GCC_BUILD_DIR) && rm -f config.cache; \
$(GCC_CONFIGURE) \
);
endef
define Host/Clean
rm -rf \
$(STAGING_DIR_HOST)/stamp/.gcc_* \
$(STAGING_DIR_HOST)/stamp/.binutils_* \
$(GCC_BUILD_DIR) \
$(BUILD_DIR_TOOLCHAIN)/$(PKG_NAME) \
$(TOOLCHAIN_DIR)/$(REAL_GNU_TARGET_NAME) \
$(TOOLCHAIN_DIR)/bin/$(REAL_GNU_TARGET_NAME)-gc* \
$(TOOLCHAIN_DIR)/bin/$(REAL_GNU_TARGET_NAME)-c*
endef
|