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
13 PKG_SOURCE_URL
:=@GNU
/gcc
/gcc-
$(PKG_VERSION
)
14 PKG_MD5SUM
:=4c626ac2a83ef30dfb9260e6f59c2b30
15 PKG_SOURCE
:=$(PKG_NAME
)-$(PKG_VERSION
).
tar.bz2
20 include $(INCLUDE_DIR
)/package.mk
22 TARGET_LANGUAGES
:="c,c++"
23 BUGURL
=https
://dev.openwrt.org
/
24 PKGVERSION
=OpenWrt GCC
$(PKG_VERSION
)
26 # not using sstrip here as this fucks up the .so's somehow
27 STRIP
:=$(TOOLCHAIN_DIR
)/bin
/$(TARGET_CROSS
)strip
29 NM
="$(TOOLCHAIN_DIR)/bin/$(TARGET_CROSS)nm" \
31 STRIP_KMOD
="$(STRIP) --strip-debug" \
32 $(SCRIPT_DIR
)/rstrip.sh
34 ifneq ($(CONFIG_SOFT_FLOAT
),y
)
35 ifeq ($(CONFIG_arm
),y
)
36 ARM_FLOAT_OPTION
:= --with-float
=hard
44 MAINTAINER
:=Noble Pepper
<gccmaintain@noblepepper.com
>
45 DEPENDS
:= +binutils
+libstdcpp
48 define Package
/gcc
/description
49 build a native toolchain for compiling on target
55 URL
:=ftp
://gcc.gnu.org
/pub
/gcc
/infrastructure
/
56 FILE
:=$(GMPSRC
).
tar.bz2
57 MD5SUM
:=dd60683d7057917e34630b4a787932e8
59 $(eval
$(call Download
,gmp
))
64 URL
:=ftp
://gcc.gnu.org
/pub
/gcc
/infrastructure
/
65 FILE
:=$(MPCSRC
).
tar.gz
66 MD5SUM
:=5b34aa804d514cc295414a963aedb6bf
68 $(eval
$(call Download
,mpc
))
73 URL
:=ftp
://gcc.gnu.org
/pub
/gcc
/infrastructure
/
74 FILE
:=$(MPFRSRC
).
tar.bz2
75 MD5SUM
:=89e59fe665e2b3ad44a6789f40b059a0
77 $(eval
$(call Download
,mpfr
))
81 # we have to download and unpack additional stuff before patching
82 tar -C
$(PKG_BUILD_DIR
) -xvjf
$(DL_DIR
)/$(GMPSRC
).
tar.bz2
83 ln
-sf
$(PKG_BUILD_DIR
)/$(GMPSRC
) $(PKG_BUILD_DIR
)/gmp
84 tar -C
$(PKG_BUILD_DIR
) -xvzf
$(DL_DIR
)/$(MPCSRC
).
tar.gz
85 ln
-sf
$(PKG_BUILD_DIR
)/$(MPCSRC
) $(PKG_BUILD_DIR
)/mpc
86 tar -C
$(PKG_BUILD_DIR
) -xvjf
$(DL_DIR
)/$(MPFRSRC
).
tar.bz2
87 ln
-sf
$(PKG_BUILD_DIR
)/$(MPFRSRC
) $(PKG_BUILD_DIR
)/mpfr
89 # poor man's fix for `none-openwrt-linux' not recognized when building with musl
90 cp
$(PKG_BUILD_DIR
)/config.sub
$(PKG_BUILD_DIR
)/mpfr
/
91 cp
$(PKG_BUILD_DIR
)/config.sub
$(PKG_BUILD_DIR
)/gmp
/
92 cp
$(PKG_BUILD_DIR
)/config.sub
$(PKG_BUILD_DIR
)/mpc
/
96 define Build
/Configure
97 (cd
$(PKG_BUILD_DIR
); rm -f config.cache
; \
99 $(TARGET_CONFIGURE_OPTS
) \
100 $(PKG_BUILD_DIR
)/configure \
102 --build
=$(GNU_HOST_NAME
) \
103 --host
=$(REAL_GNU_TARGET_NAME
) \
104 --target
=$(REAL_GNU_TARGET_NAME
) \
105 --enable-languages
=$(TARGET_LANGUAGES
) \
106 --with-bugurl
=$(BUGURL
) \
107 --with-pkgversion
="$(PKGVERSION)" \
109 $(if
$(CONFIG_LIBC_USE_GLIBC
),--enable
,--disable
)-__cxa_atexit \
110 --with-default-libstdcxx-abi
=gcc4-compatible \
111 --enable-target-optspace \
114 --disable-libsanitizer \
116 --disable-libcilkrts \
117 --disable-libmudflap \
120 --disable-libquadmath \
122 --disable-decimal-float \
123 --disable-libstdcxx-pch \
124 --with-host-libstdcxx
=-lstdc
++ \
126 --libexecdir
=/usr
/lib \
127 --with-local-prefix
=/usr \
128 $(ARM_FLOAT_OPTION
) \
129 $(SOFT_FLOAT_CONFIG_OPTION
) \
130 $(call qstrip
,$(CONFIG_EXTRA_GCC_CONFIG_OPTIONS
)) \
135 export SHELL
="$(BASH)"; $(MAKE_VARS
) $(MAKE
) -C
$(PKG_BUILD_DIR
) \
136 DESTDIR
="$(PKG_INSTALL_DIR)" $(MAKE_ARGS
) all install
139 ENVCFLAGS
:="$(TARGET_OPTIMIZATION) $(EXTRA_OPTIMIZATION)
140 ifeq ($(CONFIG_SOFT_FLOAT),y)
141 ifeq ($(CONFIG_arm),y)
142 ENVCFLAGS+= -mfloat-abi=soft
144 ENVCFLAGS+= -msoft-float
149 ENVLDFLAGS
:="-Wl,-rpath=/usr/lib -Wl,--dynamic-linker=/usr/lib/$(DYNLINKER) -L/usr/lib"
151 define Package
/gcc
/install
152 $(INSTALL_DIR
) $(1)/usr
/bin
$(1)/usr
/lib
$(1)/usr
/lib
/$(PKG_NAME
)/$(REAL_GNU_TARGET_NAME
)/$(PKG_VERSION
)
153 cp
-ar $(PKG_INSTALL_DIR
)/usr
/include $(1)/usr
154 cp
-a
$(PKG_INSTALL_DIR
)/usr
/bin
/{$(REAL_GNU_TARGET_NAME
)-{g
++,gcc
},cpp,gcov
} $(1)/usr
/bin
155 ln
-s
$(REAL_GNU_TARGET_NAME
)-g
++ $(1)/usr
/bin
/c
++
156 ln
-s
$(REAL_GNU_TARGET_NAME
)-g
++ $(1)/usr
/bin
/g
++
157 ln
-s
$(REAL_GNU_TARGET_NAME
)-g
++ $(1)/usr
/bin
/$(REAL_GNU_TARGET_NAME
)-c
++
158 ln
-s
$(REAL_GNU_TARGET_NAME
)-gcc
$(1)/usr
/bin
/gcc
159 ln
-s
$(REAL_GNU_TARGET_NAME
)-gcc
$(1)/usr
/bin
/$(REAL_GNU_TARGET_NAME
)-gcc-
$(PKG_VERSION
)
160 cp
-ar $(PKG_INSTALL_DIR
)/usr
/lib
/gcc
$(1)/usr
/lib
161 cp
-ar $(TOOLCHAIN_DIR
)/include $(1)/usr
162 cp
-a
$(TOOLCHAIN_DIR
)/lib
/*.
{o
,so
*} $(1)/usr
/lib
/$(PKG_NAME
)/$(REAL_GNU_TARGET_NAME
)/$(PKG_VERSION
)
163 cp
-a
$(TOOLCHAIN_DIR
)/lib
/*nonshared
*.a
$(1)/usr
/lib
/$(PKG_NAME
)/$(REAL_GNU_TARGET_NAME
)/$(PKG_VERSION
)
164 cp
-a
$(TOOLCHAIN_DIR
)/lib
/libm.a
$(1)/usr
/lib
/$(PKG_NAME
)/$(REAL_GNU_TARGET_NAME
)/$(PKG_VERSION
)
165 rm -f
$(1)/usr
/lib
/$(PKG_NAME
)/$(REAL_GNU_TARGET_NAME
)/$(PKG_VERSION
)/libgo
*
166 rm -f
$(1)/usr
/lib
/$(PKG_NAME
)/$(REAL_GNU_TARGET_NAME
)/$(PKG_VERSION
)/libcc1
*
167 echo
'#!/bin/sh' > $(1)/usr
/bin
/gcc_env.sh
168 echo
'export LDFLAGS=$(ENVLDFLAGS)' >> $(1)/usr
/bin
/gcc_env.sh
169 echo
'export CFLAGS=$(ENVCFLAGS)' >> $(1)/usr
/bin
/gcc_env.sh
170 chmod
+x
$(1)/usr
/bin
/gcc_env.sh
173 $(eval
$(call BuildPackage
,gcc
))