2 # Copyright (C) 2008 OpenWrt.org
4 # This is free software, licensed under the GNU General Public License v2.
5 # See /LICENSE for more information.
8 include $(TOPDIR
)/rules.mk
9 define Package
/gcc
/description
10 Build a native toolchain for compiling on target
19 MAINTAINER
:=Noble Pepper
<gccmaintain@noblepepper.com
>
20 DEPENDS
:= +binutils
+libstdcpp @
!arc
28 PKG_SOURCE_URL
:=@GNU
/gcc
/gcc-
$(PKG_VERSION
)
29 PKG_SOURCE
:=$(PKG_NAME
)-$(PKG_VERSION
).
tar.xz
34 ifeq ($(PKG_VERSION
),7.3.0)
35 PKG_HASH
:=832ca6ae04636adbb430e865a1451adf6979ab44ca1c8374f61fba65645ce15c
37 ifeq ($(PKG_VERSION
),7.4.0)
38 PKG_HASH
:=eddde28d04f334aec1604456e536416549e9b1aa137fc69204e65eb0c009fe51
42 define Package
/gcc
/config
43 source
"$(SOURCE)/Config.in"
46 ifeq ($(CONFIG_INCLUDE_STATIC_LIBC
),y
)
47 COPY_STATIC_LIBC
=cp
-a
$(TOOLCHAIN_DIR
)/lib
/libc.a
$(1)/usr
/lib
/$(PKG_NAME
)/$(REAL_GNU_TARGET_NAME
)/$(PKG_VERSION
)
50 ifeq ($(CONFIG_INCLUDE_STATIC_LIBPTHREAD
),y
)
51 COPY_STATIC_LIBPTHREAD
=cp
-a
$(TOOLCHAIN_DIR
)/lib
/libpthread.a
$(1)/usr
/lib
/$(PKG_NAME
)/$(REAL_GNU_TARGET_NAME
)/$(PKG_VERSION
)
54 ifeq ($(CONFIG_INCLUDE_STATIC_LIBSTDC
),y
)
55 COPY_STATIC_LIBSTDC
=cp
-a
$(TOOLCHAIN_DIR
)/lib
/libstdc
++.a
$(1)/usr
/lib
/$(PKG_NAME
)/$(REAL_GNU_TARGET_NAME
)/$(PKG_VERSION
)
58 ifeq ($(CONFIG_INCLUDE_STATIC_LINK_SPEC
),y
)
59 INSTALL_STATIC_SPEC
=g
++ -dumpspecs |sed s
/--start-group
}\
%G\
%L\
/--start-group
}\
%G\
%L\
-lstdc
++\
-lgcc_pic\
/ >/usr
/lib
/$(PKG_NAME
)/$(REAL_GNU_TARGET_NAME
)/$(PKG_VERSION
)/specs
60 REMOVE_STATIC_SPEC
=rm /usr
/lib
/$(PKG_NAME
)/$(REAL_GNU_TARGET_NAME
)/$(PKG_VERSION
)/specs
63 include $(INCLUDE_DIR
)/package.mk
64 TARGET_LANGUAGES
:="c,c++"
65 BUGURL
=https
://dev.openwrt.org
/
66 PKGVERSION
=OpenWrt GCC
$(PKG_VERSION
)
67 TARGET_CPPFLAGS
+= -D_GLIBCXX_INCLUDE_NEXT_C_HEADERS
69 # not using sstrip here as this fucks up the .so's somehow
70 STRIP
:=$(TOOLCHAIN_DIR
)/bin
/$(TARGET_CROSS
)strip
72 NM
="$(TOOLCHAIN_DIR)/bin/$(TARGET_CROSS)nm" \
74 STRIP_KMOD
="$(STRIP) --strip-debug" \
75 $(SCRIPT_DIR
)/rstrip.sh
77 ifneq ($(CONFIG_SOFT_FLOAT
),y
)
78 ifeq ($(CONFIG_arm
),y
)
79 ARM_FLOAT_OPTION
:= --with-float
=hard
85 URL
:=ftp
://gcc.gnu.org
/pub
/gcc
/infrastructure
/
86 FILE
:=$(GMPSRC
).
tar.bz2
87 HASH
:=498449a994efeba527885c10405993427995d3f86b8768d8cdf8d9dd7c6b73e8
89 $(eval
$(call Download
,gmp
))
94 URL
:=ftp
://gcc.gnu.org
/pub
/gcc
/infrastructure
/
95 FILE
:=$(MPCSRC
).
tar.gz
96 HASH
:=617decc6ea09889fb08ede330917a00b16809b8db88c29c31bfbb49cbf88ecc3
98 $(eval
$(call Download
,mpc
))
103 URL
:=ftp
://gcc.gnu.org
/pub
/gcc
/infrastructure
/
104 FILE
:=$(MPFRSRC
).
tar.bz2
105 HASH
:=d3103a80cdad2407ed581f3618c4bed04e0c92d1cf771a65ead662cc397f7775
107 $(eval
$(call Download
,mpfr
))
111 # we have to download and unpack additional stuff before patching
112 tar -C
$(PKG_BUILD_DIR
) -xvjf
$(DL_DIR
)/$(GMPSRC
).
tar.bz2
113 ln
-sf
$(PKG_BUILD_DIR
)/$(GMPSRC
) $(PKG_BUILD_DIR
)/gmp
114 tar -C
$(PKG_BUILD_DIR
) -xvzf
$(DL_DIR
)/$(MPCSRC
).
tar.gz
115 ln
-sf
$(PKG_BUILD_DIR
)/$(MPCSRC
) $(PKG_BUILD_DIR
)/mpc
116 tar -C
$(PKG_BUILD_DIR
) -xvjf
$(DL_DIR
)/$(MPFRSRC
).
tar.bz2
117 ln
-sf
$(PKG_BUILD_DIR
)/$(MPFRSRC
) $(PKG_BUILD_DIR
)/mpfr
119 # poor man's fix for `none-openwrt-linux' not recognized when building with musl
120 cp
$(PKG_BUILD_DIR
)/config.sub
$(PKG_BUILD_DIR
)/mpfr
/
121 cp
$(PKG_BUILD_DIR
)/config.sub
$(PKG_BUILD_DIR
)/gmp
/
122 chmod u
+w
$(PKG_BUILD_DIR
)/mpc
/config.sub
123 cp
$(PKG_BUILD_DIR
)/config.sub
$(PKG_BUILD_DIR
)/mpc
/
126 CONFIGURE_ARGS
+= CXXFLAGS_FOR_TARGET
="-g -O2 -D_GLIBCXX_INCLUDE_NEXT_C_HEADERS"
128 define Build
/Configure
129 (cd
$(PKG_BUILD_DIR
); rm -f config.cache
; \
131 $(TARGET_CONFIGURE_OPTS
) \
132 $(PKG_BUILD_DIR
)/configure \
134 --build
=$(GNU_HOST_NAME
) \
135 --host
=$(REAL_GNU_TARGET_NAME
) \
136 --target
=$(REAL_GNU_TARGET_NAME
) \
137 --enable-languages
=$(TARGET_LANGUAGES
) \
138 --with-bugurl
=$(BUGURL
) \
139 --with-pkgversion
="$(PKGVERSION)" \
141 $(if
$(CONFIG_LIBC_USE_GLIBC
),--enable
,--disable
)-__cxa_atexit \
142 --with-default-libstdcxx-abi
=gcc4-compatible \
143 --enable-target-optspace \
146 --disable-libsanitizer \
148 --disable-libcilkrts \
149 --disable-libmudflap \
153 --disable-libquadmath \
155 --disable-decimal-float \
156 --disable-libstdcxx-pch \
157 --with-host-libstdcxx
=-lstdc
++ \
159 --libexecdir
=/usr
/lib \
160 --with-local-prefix
=/usr \
161 --with-stage1-ldflags
=-lstdc
++ \
162 $(ARM_FLOAT_OPTION
) \
163 $(SOFT_FLOAT_CONFIG_OPTION
) \
164 $(call qstrip
,$(CONFIG_EXTRA_GCC_CONFIG_OPTIONS
)) \
169 export SHELL
="$(BASH)"; $(MAKE_VARS
) $(MAKE
) -C
$(PKG_BUILD_DIR
) \
170 DESTDIR
="$(PKG_INSTALL_DIR)" $(MAKE_ARGS
) all install
173 ENVCFLAGS
:="$(TARGET_OPTIMIZATION) $(EXTRA_OPTIMIZATION)
174 ifeq ($(CONFIG_SOFT_FLOAT),y)
175 ifeq ($(CONFIG_arm),y)
176 ENVCFLAGS+= -mfloat-abi=soft
178 ENVCFLAGS+= -msoft-float
183 ENVLDFLAGS
:="-Wl,-rpath=/usr/lib -Wl,--dynamic-linker=/usr/lib/$(DYNLINKER) -L/usr/lib, -lstdc++"
185 define Package
/gcc
/install
186 $(INSTALL_DIR
) $(1)/usr
/bin
$(1)/usr
/lib
$(1)/usr
/lib
/$(PKG_NAME
)/$(REAL_GNU_TARGET_NAME
)/$(PKG_VERSION
)
187 cp
-ar $(PKG_INSTALL_DIR
)/usr
/include $(1)/usr
188 cp
-a
$(PKG_INSTALL_DIR
)/usr
/bin
/{$(REAL_GNU_TARGET_NAME
)-{g
++,gcc
},cpp,gcov
} $(1)/usr
/bin
189 ln
-s
$(REAL_GNU_TARGET_NAME
)-g
++ $(1)/usr
/bin
/c
++
190 ln
-s
$(REAL_GNU_TARGET_NAME
)-g
++ $(1)/usr
/bin
/g
++
191 ln
-s
$(REAL_GNU_TARGET_NAME
)-g
++ $(1)/usr
/bin
/$(REAL_GNU_TARGET_NAME
)-c
++
192 ln
-s
$(REAL_GNU_TARGET_NAME
)-gcc
$(1)/usr
/bin
/gcc
193 ln
-s
$(REAL_GNU_TARGET_NAME
)-gcc
$(1)/usr
/bin
/$(REAL_GNU_TARGET_NAME
)-gcc-
$(PKG_VERSION
)
194 cp
-ar $(PKG_INSTALL_DIR
)/usr
/lib
/gcc
$(1)/usr
/lib
195 cp
-ar $(TOOLCHAIN_DIR
)/include $(1)/usr
196 cp
-a
$(TOOLCHAIN_DIR
)/lib
/*.
{o
,so
*} $(1)/usr
/lib
/$(PKG_NAME
)/$(REAL_GNU_TARGET_NAME
)/$(PKG_VERSION
)
197 cp
-a
$(TOOLCHAIN_DIR
)/lib
/*nonshared
*.a
$(1)/usr
/lib
/$(PKG_NAME
)/$(REAL_GNU_TARGET_NAME
)/$(PKG_VERSION
)
198 cp
-a
$(TOOLCHAIN_DIR
)/lib
/libm.a
$(1)/usr
/lib
/$(PKG_NAME
)/$(REAL_GNU_TARGET_NAME
)/$(PKG_VERSION
)
200 $(COPY_STATIC_LIBPTHREAD
)
201 $(COPY_STATIC_LIBSTDC
)
202 rm -f
$(1)/usr
/lib
/$(PKG_NAME
)/$(REAL_GNU_TARGET_NAME
)/$(PKG_VERSION
)/libgo
*
203 rm -f
$(1)/usr
/lib
/$(PKG_NAME
)/$(REAL_GNU_TARGET_NAME
)/$(PKG_VERSION
)/libcc1
*
204 echo
'#!/bin/sh' > $(1)/usr
/bin
/gcc_env.sh
205 echo
'export LDFLAGS=$(ENVLDFLAGS)' >> $(1)/usr
/bin
/gcc_env.sh
206 echo
'export CFLAGS=$(ENVCFLAGS)' >> $(1)/usr
/bin
/gcc_env.sh
207 chmod
+x
$(1)/usr
/bin
/gcc_env.sh
210 define Package
/gcc
/postinst
212 $(INSTALL_STATIC_SPEC
)
215 define Package
/gcc
/postrm
217 $(REMOVE_STATIC_SPEC
)
220 $(eval
$(call BuildPackage
,gcc
))