summaryrefslogtreecommitdiffstats
path: root/toolchain/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'toolchain/gcc')
-rw-r--r--toolchain/gcc/Config.in2
-rw-r--r--toolchain/gcc/gcc-uclibc-4.x.mk130
2 files changed, 103 insertions, 29 deletions
diff --git a/toolchain/gcc/Config.in b/toolchain/gcc/Config.in
index cbdc02699..c3c699c11 100644
--- a/toolchain/gcc/Config.in
+++ b/toolchain/gcc/Config.in
@@ -118,7 +118,7 @@ config BR2_GCC_SHARED_LIBGCC
config BR2_GCC_ENABLE_TLS
bool "Enable compiler tls support"
default y
- depends on !BR2_GCC_VERSION_4_4_X
+ depends on BR2_PTHREADS_NATIVE
help
Enable the compiler to generate code for accessing
thread local storage variables
diff --git a/toolchain/gcc/gcc-uclibc-4.x.mk b/toolchain/gcc/gcc-uclibc-4.x.mk
index b87270f8f..d140db167 100644
--- a/toolchain/gcc/gcc-uclibc-4.x.mk
+++ b/toolchain/gcc/gcc-uclibc-4.x.mk
@@ -201,6 +201,8 @@ $(GCC_BUILD_DIR1)/.configured: $(GCC_DIR)/.patched
--with-gnu-ld \
--disable-shared \
--disable-libssp \
+ --without-headers \
+ --with-newlib \
$(GCC_TLS) \
$(GCC_WITH_HOST_GMP) \
$(GCC_WITH_HOST_MPFR) \
@@ -218,7 +220,7 @@ $(GCC_BUILD_DIR1)/.configured: $(GCC_DIR)/.patched
$(GCC_BUILD_DIR1)/.compiled: $(GCC_BUILD_DIR1)/.configured
# gcc >= 4.3.0 have to also build all-target-libgcc
ifeq ($(BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE),y)
- $(GCC_CONF_ENV) $(MAKE) -C $(GCC_BUILD_DIR1) all-gcc all-target-libgcc
+ $(GCC_CONF_ENV) $(MAKE) -C $(GCC_BUILD_DIR1) all-gcc
else
$(MAKE) -C $(GCC_BUILD_DIR1) all-gcc
endif
@@ -228,13 +230,13 @@ gcc_initial=$(GCC_BUILD_DIR1)/.installed
$(gcc_initial) $(STAGING_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-gcc: $(GCC_BUILD_DIR1)/.compiled
# gcc >= 4.3.0 have to also install install-target-libgcc
ifeq ($(BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE),y)
- PATH=$(TARGET_PATH) $(MAKE) -C $(GCC_BUILD_DIR1) install-gcc install-target-libgcc
+ PATH=$(TARGET_PATH) $(MAKE) -C $(GCC_BUILD_DIR1) install-gcc
else
PATH=$(TARGET_PATH) $(MAKE) -C $(GCC_BUILD_DIR1) install-gcc
endif
touch $(gcc_initial)
-gcc_initial: uclibc-configured binutils $(STAGING_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-gcc
+gcc_initial: binutils $(STAGING_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-gcc
gcc_initial-clean:
rm -rf $(GCC_BUILD_DIR1)
@@ -244,7 +246,77 @@ gcc_initial-dirclean:
#############################################################
#
-# second pass compiler build. Build the compiler targeting
+# build the second pass gcc compiler
+#
+#############################################################
+GCC_BUILD_DIR2:=$(TOOLCHAIN_DIR)/gcc-$(GCC_VERSION)-intermediate
+
+
+# The --without-headers option stopped working with gcc 3.0 and has never been
+# fixed, so we need to actually have working C library header files prior to
+# the step or libgcc will not build...
+
+$(GCC_BUILD_DIR2)/.configured: $(GCC_DIR)/.patched
+ mkdir -p $(GCC_BUILD_DIR2)
+ (cd $(GCC_BUILD_DIR2); rm -rf config.cache; \
+ $(HOST_CONFIGURE_OPTS) \
+ $(GCC_DIR)/configure $(QUIET) \
+ --prefix=$(STAGING_DIR)/usr \
+ --build=$(GNU_HOST_NAME) \
+ --host=$(GNU_HOST_NAME) \
+ --target=$(REAL_GNU_TARGET_NAME) \
+ --enable-languages=c \
+ $(BR2_CONFIGURE_DEVEL_SYSROOT) \
+ --disable-__cxa_atexit \
+ --enable-target-optspace \
+ --with-gnu-ld \
+ --enable-shared \
+ --disable-libssp \
+ $(GCC_TLS) \
+ $(GCC_WITH_HOST_GMP) \
+ $(GCC_WITH_HOST_MPFR) \
+ $(DISABLE_NLS) \
+ $(THREADS) \
+ $(MULTILIB) \
+ $(GCC_DECIMAL_FLOAT) \
+ $(SOFT_FLOAT_CONFIG_OPTION) \
+ $(GCC_WITH_ABI) $(GCC_WITH_ARCH) $(GCC_WITH_TUNE) \
+ $(EXTRA_GCC_CONFIG_OPTIONS) \
+ $(EXTRA_GCC2_CONFIG_OPTIONS) \
+ $(QUIET) \
+ )
+ touch $@
+
+$(GCC_BUILD_DIR2)/.compiled: $(GCC_BUILD_DIR2)/.configured
+ # gcc >= 4.3.0 have to also build all-target-libgcc
+ifeq ($(BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE),y)
+ $(GCC_CONF_ENV) $(MAKE) -C $(GCC_BUILD_DIR2) all-gcc all-target-libgcc
+else
+ $(MAKE) -C $(GCC_BUILD_DIR2) all-gcc
+endif
+ touch $@
+
+gcc_intermediate=$(GCC_BUILD_DIR2)/.installed
+$(gcc_intermediate): $(GCC_BUILD_DIR2)/.compiled
+ # gcc >= 4.3.0 have to also install install-target-libgcc
+ifeq ($(BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE),y)
+ PATH=$(TARGET_PATH) $(MAKE) -C $(GCC_BUILD_DIR2) install-gcc install-target-libgcc
+else
+ PATH=$(TARGET_PATH) $(MAKE) -C $(GCC_BUILD_DIR2) install-gcc
+endif
+ touch $(gcc_intermediate)
+
+gcc_intermediate: uclibc-configured $(STAGING_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-gcc
+
+gcc_intermediate-clean:
+ rm -rf $(GCC_BUILD_DIR2)
+
+gcc_intermediate-dirclean:
+ rm -rf $(GCC_BUILD_DIR2) $(GCC_DIR)
+
+#############################################################
+#
+# third pass compiler build. Build the compiler targeting
# the newly built shared uClibc library.
#
#############################################################
@@ -255,9 +327,9 @@ gcc_initial-dirclean:
# affect gcc-target. However, I haven't tested gcc-target yet so no
# guarantees. mjn3
-GCC_BUILD_DIR2:=$(TOOLCHAIN_DIR)/gcc-$(GCC_VERSION)-final
-$(GCC_BUILD_DIR2)/.configured: $(GCC_SRC_DIR)/.patched $(GCC_STAGING_PREREQ)
- mkdir -p $(GCC_BUILD_DIR2)
+GCC_BUILD_DIR3:=$(TOOLCHAIN_DIR)/gcc-$(GCC_VERSION)-final
+$(GCC_BUILD_DIR3)/.configured: $(GCC_SRC_DIR)/.patched $(GCC_STAGING_PREREQ)
+ mkdir -p $(GCC_BUILD_DIR3)
# Important! Required for limits.h to be fixed.
ln -snf ../include/ $(STAGING_DIR)/usr/$(REAL_GNU_TARGET_NAME)/sys-include
-rmdir $(STAGING_DIR)/usr/$(REAL_GNU_TARGET_NAME)/lib
@@ -265,7 +337,9 @@ $(GCC_BUILD_DIR2)/.configured: $(GCC_SRC_DIR)/.patched $(GCC_STAGING_PREREQ)
ln -snf ../../lib $(STAGING_DIR)/usr/$(REAL_GNU_TARGET_NAME)/lib
$(if $(BR2_ARCH_IS_64),mkdir -p $(STAGING_DIR)/lib64)
$(if $(BR2_ARCH_IS_64),ln -snf ../../lib64 $(STAGING_DIR)/usr/$(REAL_GNU_TARGET_NAME)/lib64)
- (cd $(GCC_BUILD_DIR2); rm -rf config.cache; \
+ #-rmdir $(STAGING_DIR)/usr/$(REAL_GNU_TARGET_NAME)/lib
+ #ln -snf ../lib $(STAGING_DIR)/usr/$(REAL_GNU_TARGET_NAME)/lib
+ (cd $(GCC_BUILD_DIR3); rm -rf config.cache; \
$(HOST_CONFIGURE_OPTS) \
$(GCC_SRC_DIR)/configure $(QUIET) \
--prefix=$(STAGING_DIR)/usr \
@@ -294,13 +368,13 @@ $(GCC_BUILD_DIR2)/.configured: $(GCC_SRC_DIR)/.patched $(GCC_STAGING_PREREQ)
)
touch $@
-$(GCC_BUILD_DIR2)/.compiled: $(GCC_BUILD_DIR2)/.configured
- $(GCC_CONF_ENV) $(MAKE) -C $(GCC_BUILD_DIR2) all
+$(GCC_BUILD_DIR3)/.compiled: $(GCC_BUILD_DIR3)/.configured
+ $(GCC_CONF_ENV) $(MAKE) -C $(GCC_BUILD_DIR3) all
touch $@
-$(GCC_BUILD_DIR2)/.installed: $(GCC_BUILD_DIR2)/.compiled
+$(GCC_BUILD_DIR3)/.installed: $(GCC_BUILD_DIR3)/.compiled
PATH=$(TARGET_PATH) $(MAKE) \
- -C $(GCC_BUILD_DIR2) install
+ -C $(GCC_BUILD_DIR3) install
if [ -d "$(STAGING_DIR)/lib64" ]; then \
if [ ! -e "$(STAGING_DIR)/lib" ]; then \
mkdir -p "$(STAGING_DIR)/lib"; \
@@ -335,7 +409,7 @@ endif
mkdir -p $(TARGET_DIR)/usr/lib $(TARGET_DIR)/usr/sbin
touch $@
-$(STAMP_DIR)/gcc_libs_target_installed: $(GCC_BUILD_DIR2)/.installed
+$(STAMP_DIR)/gcc_libs_target_installed: $(GCC_BUILD_DIR3)/.installed
ifeq ($(BR2_GCC_SHARED_LIBGCC),y)
# These are in /lib, so...
rm -rf $(TARGET_DIR)/usr/lib/libgcc_s*.so*
@@ -362,36 +436,36 @@ endif
touch $@
cross_compiler:=$(STAGING_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-gcc
-cross_compiler gcc: uclibc-configured binutils gcc_initial \
- $(LIBFLOAT_TARGET) uclibc $(GCC_BUILD_DIR2)/.installed \
+cross_compiler gcc: gcc_intermediate \
+ $(LIBFLOAT_TARGET) uclibc $(GCC_BUILD_DIR3)/.installed \
$(STAMP_DIR)/gcc_libs_target_installed \
$(GCC_TARGETS)
gcc-source: $(DL_DIR)/$(GCC_SOURCE)
gcc-clean:
- rm -rf $(GCC_BUILD_DIR2)
+ rm -rf $(GCC_BUILD_DIR3)
for prog in cpp gcc gcc-[0-9]* protoize unprotoize gcov gccbug cc; do \
rm -f $(STAGING_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-$$prog; \
rm -f $(STAGING_DIR)/usr/bin/$(GNU_TARGET_NAME)-$$prog; \
done
gcc-dirclean: gcc_initial-dirclean
- rm -rf $(GCC_BUILD_DIR2)
+ rm -rf $(GCC_BUILD_DIR3)
#############################################################
#
# Next build target gcc compiler
#
#############################################################
-GCC_BUILD_DIR3:=$(BUILD_DIR)/gcc-$(GCC_VERSION)-target
+GCC_BUILD_DIR4:=$(BUILD_DIR)/gcc-$(GCC_VERSION)-target
-$(GCC_BUILD_DIR3)/.prepared: $(STAMP_DIR)/gcc_libs_target_installed $(GCC_TARGET_PREREQ)
+$(GCC_BUILD_DIR4)/.prepared: $(STAMP_DIR)/gcc_libs_target_installed $(GCC_TARGET_PREREQ)
mkdir -p $(GCC_BUILD_DIR3)
touch $@
-$(GCC_BUILD_DIR3)/.configured: $(GCC_BUILD_DIR3)/.prepared
- (cd $(GCC_BUILD_DIR3); rm -rf config.cache; \
+$(GCC_BUILD_DIR4)/.configured: $(GCC_BUILD_DIR4)/.prepared
+ (cd $(GCC_BUILD_DIR4); rm -rf config.cache; \
$(TARGET_CONFIGURE_OPTS) \
$(TARGET_CONFIGURE_ARGS) \
CFLAGS_FOR_TARGET="$(TARGET_CFLAGS) $(TARGET_SOFT_FLOAT)" \
@@ -423,13 +497,13 @@ $(GCC_BUILD_DIR3)/.configured: $(GCC_BUILD_DIR3)/.prepared
$(DISABLE_LARGEFILE) \
$(EXTRA_GCC_CONFIG_OPTIONS) \
$(EXTRA_TARGET_GCC_CONFIG_OPTIONS) \
- $(EXTRA_GCC3_CONFIG_OPTIONS) \
+ $(EXTRA_GCC4_CONFIG_OPTIONS) \
)
touch $@
-$(GCC_BUILD_DIR3)/.compiled: $(GCC_BUILD_DIR3)/.configured
+$(GCC_BUILD_DIR4)/.compiled: $(GCC_BUILD_DIR4)/.configured
PATH=$(TARGET_PATH) \
- $(MAKE) -C $(GCC_BUILD_DIR3) all
+ $(MAKE) -C $(GCC_BUILD_DIR4) all
touch $@
GCC_LIB_SUBDIR=lib/gcc/$(REAL_GNU_TARGET_NAME)/$(GCC_VERSION)
@@ -439,9 +513,9 @@ else
GCC_INCLUDE_DIR:=include-fixed
endif
-$(TARGET_DIR)/usr/bin/gcc: $(GCC_BUILD_DIR3)/.compiled
+$(TARGET_DIR)/usr/bin/gcc: $(GCC_BUILD_DIR4)/.compiled
PATH=$(TARGET_PATH) DESTDIR=$(TARGET_DIR) \
- $(MAKE1) -C $(GCC_BUILD_DIR3) install
+ $(MAKE1) -C $(GCC_BUILD_DIR4) install
# Remove broken specs file (cross compile flag is set).
rm -f $(TARGET_DIR)/usr/$(GCC_LIB_SUBDIR)/specs
@@ -467,8 +541,8 @@ $(TARGET_DIR)/usr/bin/gcc: $(GCC_BUILD_DIR3)/.compiled
gcc_target: uclibc_target binutils_target $(TARGET_DIR)/usr/bin/gcc
gcc_target-clean:
- rm -rf $(GCC_BUILD_DIR3)
+ rm -rf $(GCC_BUILD_DIR4)
rm -f $(TARGET_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)*
gcc_target-dirclean:
- rm -rf $(GCC_BUILD_DIR3)
+ rm -rf $(GCC_BUILD_DIR4)