diff --git a/base/mk/spec-arm_v5.mk b/base/mk/spec-arm_v5.mk
index 4ab575d26..e6142429f 100644
--- a/base/mk/spec-arm_v5.mk
+++ b/base/mk/spec-arm_v5.mk
@@ -3,6 +3,6 @@ SPECS += arm
#
# Configure target CPU
#
-CC_OPT += -march=armv5
+CC_MARCH += -march=armv5
include $(call select_from_repositories,mk/spec-arm.mk)
diff --git a/base/mk/spec-arm_v7a.mk b/base/mk/spec-arm_v7a.mk
index 9ffb451ca..0eb6e8be7 100644
--- a/base/mk/spec-arm_v7a.mk
+++ b/base/mk/spec-arm_v7a.mk
@@ -3,6 +3,6 @@ SPECS += arm
#
# Configure target CPU
#
-CC_OPT += -march=armv7-a
+CC_MARCH += -march=armv7-a
include $(call select_from_repositories,mk/spec-arm.mk)
diff --git a/ports/mk/noux.mk b/ports/mk/noux.mk
index 1102b7d9b..06830f60c 100644
--- a/ports/mk/noux.mk
+++ b/ports/mk/noux.mk
@@ -33,7 +33,7 @@ NOUX_PKG ?= $(TARGET)
LIBS += cxx env libc libm libc_noux
-NOUX_PKG_DIR = $(wildcard $(REP_DIR)/contrib/$(NOUX_PKG)-*)
+NOUX_PKG_DIR ?= $(wildcard $(REP_DIR)/contrib/$(NOUX_PKG)-*)
PWD = $(shell pwd)
@@ -68,8 +68,15 @@ NOUX_BUILD_OUTPUT_FILTER = 2>&1 | sed "s/^/ [$(NOUX_PKG)] /"
endif
+ifeq ($(findstring arm, $(SPECS)), arm)
+NOUX_CONFIGURE_ARGS += --host arm-elf-eabi
+else
+ifeq ($(findstring x86, $(SPECS)), x86)
+NOUX_CONFIGURE_ARGS += --host x86_64-elf
+endif
+endif
+
NOUX_CONFIGURE_ARGS += --srcdir=$(NOUX_PKG_DIR)
-NOUX_CONFIGURE_ARGS += --host x86-freebsd
NOUX_CONFIGURE_ARGS += --prefix $(PWD)/install
CONFIG_GUESS_SCRIPT = $(NOUX_PKG_DIR)/config.guess)
@@ -104,9 +111,9 @@ NOUX_LIBS_A = $(filter %.a, $(sort $(LINK_ITEMS)) $(EXT_OBJECTS) $(LIBGCC))
NOUX_LIBS_SO = $(filter %.so,$(sort $(LINK_ITEMS)) $(EXT_OBJECTS) $(LIBGCC))
NOUX_LIBS += $(NOUX_LIBS_A) $(NOUX_LIBS_SO) $(NOUX_LIBS_A)
-NOUX_ENV += CC='$(CC)' LD='$(LD)' AR='$(AR)' STRIP='$(STRIP)' LIBS='$(NOUX_LIBS)' \
+NOUX_ENV += CC='$(CC)' CXX='$(CXX)' LD='$(LD)' AR='$(AR)' STRIP='$(STRIP)' LIBS='$(NOUX_LIBS)' \
LDFLAGS='$(NOUX_LDFLAGS)' CFLAGS='$(NOUX_CFLAGS)' \
- CPPFLAGS='$(NOUX_CPPFLAGS)'
+ CPPFLAGS='$(NOUX_CPPFLAGS)' CXXFLAGS='$(NOUX_CXXFLAGS)'
NOUX_ENV += CC_FOR_BUILD=gcc LD_FOR_BUILD=ld \
CFLAGS_FOR_BUILD='$(NOUX_CFLAGS_FOR_BUILD)' \
@@ -127,6 +134,7 @@ Makefile reconfigure: noux_env.sh
noux_env.sh:
$(VERBOSE)rm -f $@
$(VERBOSE)echo "export CC='$(CC)'" >> $@
+ $(VERBOSE)echo "export CXX='$(CXX)'" >> $@
$(VERBOSE)echo "export AR='$(AR)'" >> $@
$(VERBOSE)echo "export LD='$(LD)'" >> $@
$(VERBOSE)echo "export CPPFLAGS='$(NOUX_CPPFLAGS)'" >> $@
diff --git a/ports/ports/gcc.mk b/ports/ports/gcc.mk
index 7a77f9fd0..bef305523 100644
--- a/ports/ports/gcc.mk
+++ b/ports/ports/gcc.mk
@@ -1,4 +1,4 @@
-GCC_VERSION = 4.4.5
+GCC_VERSION = 4.6.1
GCC = gcc-$(GCC_VERSION)
GCC_URL = ftp://ftp.fu-berlin.de/gnu/gcc
@@ -10,7 +10,7 @@ GCC_CXX_TGZ = gcc-g++-$(GCC_VERSION).tar.gz
#
PORTS += $(GCC)
-prepare:: $(CONTRIB_DIR)/$(GCC)
+prepare:: $(CONTRIB_DIR)/$(GCC)/configure
#
# Port-specific local rules
@@ -22,7 +22,32 @@ $(DOWNLOAD_DIR)/$(GCC_CORE_TGZ):
$(DOWNLOAD_DIR)/$(GCC_CXX_TGZ):
$(VERBOSE)wget -P $(DOWNLOAD_DIR) $(GCC_URL)/$(GCC)/$(GCC_CXX_TGZ) && touch $@
+#
+# Utilities
+#
+AUTOCONF = autoconf2.64
+
+#
+# Check if 'autoconf' is installed
+#
+ifeq ($(shell which $(AUTOCONF)),)
+$(error Need to have '$(AUTOCONF)' installed.)
+endif
+
+#
+# Check if 'autogen' is installed
+#
+ifeq ($(shell which autogen)),)
+$(error Need to have 'autogen' installed.)
+endif
+
$(CONTRIB_DIR)/$(GCC): $(DOWNLOAD_DIR)/$(GCC_CORE_TGZ) $(DOWNLOAD_DIR)/$(GCC_CXX_TGZ)
$(VERBOSE)for i in $^ ; do tar xfz $$i -C $(CONTRIB_DIR) ;done
- $(VERBOSE)patch -N -p0 < src/noux-pkg/gcc/build.patch
+include ../tool/tool_chain_gcc_patches.inc
+
+$(CONTRIB_DIR)/$(GCC)/configure:: $(CONTRIB_DIR)/$(GCC)
+ @#
+ @# Noux-specific changes
+ @#
+ $(VERBOSE)patch -d $(CONTRIB_DIR)/$(GCC) -N -p1 < src/noux-pkg/gcc/build.patch
diff --git a/ports/run/noux_tool_chain.run b/ports/run/noux_tool_chain.run
index 41c127124..db8b7db89 100644
--- a/ports/run/noux_tool_chain.run
+++ b/ports/run/noux_tool_chain.run
@@ -1,7 +1,20 @@
-if {![have_spec x86_32]} {
- puts "\nThe Noux tool chain scenario is supported on the x86_32 architecture only\n"
- exit 0
-}
+#
+# Uncomment the following line when working on the binutils source code. Otherwise,
+# the package may get recompiled, yet it does not get reinstalled into 'bin/'.
+#
+#exec rm -rf noux-pkg/binutils bin/binutils
+
+#
+# Uncomment the following line when working on the GCC source code. Otherwise,
+# the package may get recompiled, yet it does not get reinstalled into 'bin/'.
+#
+#exec rm -rf noux-pkg/gcc bin/gcc
+
+#
+# Uncomment the following line when working on the make source code. Otherwise,
+# the package may get recompiled, yet it does not get reinstalled into 'bin/'.
+#
+#exec rm -rf noux-pkg/make bin/make
set build_components {
core init drivers/timer noux/minimal lib/libc_noux
@@ -10,10 +23,27 @@ set build_components {
test/libports/ncurses
}
+set cc_march ""
+
+if {[have_spec arm]} {
+ set binutils "binutils_arm"
+ set gcc "gcc_arm"
+ set tool_prefix "genode-arm-"
+}
+
+if {[have_spec x86]} {
+ set binutils "binutils_x86"
+ set gcc "gcc_x86"
+ set tool_prefix "genode-x86-"
+ if {[have_spec x86_32]} {
+ set cc_march "-m32"
+ }
+}
+
#
# Build Noux packages only once
#
-set noux_pkgs {bash coreutils vim findutils binutils gcc make}
+set noux_pkgs "bash coreutils vim findutils make $binutils $gcc"
foreach pkg $noux_pkgs {
lappend_if [expr ![file exists bin/$pkg]] build_components noux-pkg/$pkg }
@@ -114,15 +144,22 @@ append config {
int main(int argc, char **argv) { return 0; }
-
+ }
+append config "
SHELL=/bin/bash
all:
- genode-x86-gcc -v -c a.c -o a.o
+ ${tool_prefix}gcc $cc_march -v -c a.c -o a.o
+"
+append config {
- cd /tmp; make; genode-x86-readelf -a a.o
+
+ cd /tmp; make; }
+append config "${tool_prefix}readelf -a a.o"
+append config {
+
@@ -177,7 +214,7 @@ set boot_modules {
core init timer ld.lib.so noux terminal ram_fs
libc.lib.so libm.lib.so libc_noux.lib.so ncurses.lib.so }
-append boot_modules { gmp.lib.so mpfr.lib.so }
+append boot_modules { gmp.lib.so mpfr.lib.so mpc.lib.so }
foreach pkg $noux_pkgs {
lappend boot_modules "$pkg.tar" }
@@ -191,7 +228,11 @@ lappend_if [have_spec pl11x] boot_modules pl11x_drv
build_boot_image $boot_modules
-append qemu_args " -m 300 "
+if {[have_spec x86_64]} {
+ append qemu_args " -m 500 "
+} else {
+ append qemu_args " -m 320 "
+}
run_genode_until forever
diff --git a/ports/src/noux-pkg/binutils/target.mk b/ports/src/noux-pkg/binutils/target.inc
similarity index 75%
rename from ports/src/noux-pkg/binutils/target.mk
rename to ports/src/noux-pkg/binutils/target.inc
index 2e69dee9b..266403830 100644
--- a/ports/src/noux-pkg/binutils/target.mk
+++ b/ports/src/noux-pkg/binutils/target.inc
@@ -1,9 +1,7 @@
-PROGRAM_PREFIX = genode-x86-
-
NOUX_CFLAGS += -std=c99
NOUX_CONFIGURE_ARGS = --disable-werror \
--program-prefix=$(PROGRAM_PREFIX) \
- --target=i686-freebsd
+ --target=$(BINUTILS_TARGET)
#
# Pass CFLAGS and friends to the invokation of 'make' because
@@ -12,4 +10,6 @@ NOUX_CONFIGURE_ARGS = --disable-werror \
#
NOUX_MAKE_ENV = $(NOUX_ENV)
+NOUX_PKG_DIR = $(wildcard $(REP_DIR)/contrib/binutils-*)
+
include $(REP_DIR)/mk/noux.mk
diff --git a/ports/src/noux-pkg/binutils_arm/target.mk b/ports/src/noux-pkg/binutils_arm/target.mk
new file mode 100644
index 000000000..32ea9e2e8
--- /dev/null
+++ b/ports/src/noux-pkg/binutils_arm/target.mk
@@ -0,0 +1,4 @@
+PROGRAM_PREFIX = genode-arm-
+BINUTILS_TARGET = arm-elf-eabi
+
+include $(PRG_DIR)/../binutils/target.inc
diff --git a/ports/src/noux-pkg/binutils_x86/target.mk b/ports/src/noux-pkg/binutils_x86/target.mk
new file mode 100644
index 000000000..eb3c36283
--- /dev/null
+++ b/ports/src/noux-pkg/binutils_x86/target.mk
@@ -0,0 +1,4 @@
+PROGRAM_PREFIX = genode-x86-
+BINUTILS_TARGET = x86_64-elf
+
+include $(PRG_DIR)/../binutils/target.inc
diff --git a/ports/src/noux-pkg/gcc/build.patch b/ports/src/noux-pkg/gcc/build.patch
index 73d8a2f55..350e3afd6 100644
--- a/ports/src/noux-pkg/gcc/build.patch
+++ b/ports/src/noux-pkg/gcc/build.patch
@@ -1,52 +1,76 @@
-diff -ru contrib/gcc-4.4.5/configure contrib/_gcc-4.4.5/configure
---- contrib/gcc-4.4.5/configure 2010-06-07 22:10:41.000000000 +0200
-+++ contrib/gcc-4.4.5/configure 2011-02-10 22:23:18.000000000 +0100
-@@ -272,7 +272,7 @@
- PACKAGE_BUGREPORT=
+diff --git a/Makefile.in b/Makefile.in
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -155,6 +155,8 @@
+ CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
+ CXX="$(CXX_FOR_BUILD)"; export CXX; \
+ CXXFLAGS="$(CXXFLAGS_FOR_BUILD)"; export CXXFLAGS; \
++ CPPFLAGS="$(CPPFLAGS_FOR_BUILD)"; export CPPFLAGS; \
++ LIBS="$(LIBS_FOR_BUILD)"; export LIBS; \
+ GCJ="$(GCJ_FOR_BUILD)"; export GCJ; \
+ GFORTRAN="$(GFORTRAN_FOR_BUILD)"; export GFORTRAN; \
+ GOC="$(GOC_FOR_BUILD)"; export GOC; \
+@@ -193,6 +195,8 @@
+ CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
+ CXX="$(CXX)"; export CXX; \
+ CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
++ CPPFLAGS="$(CPPFLAGS)"; export CPPFLAGS; \
++ LIBS="$(LIBS)"; export LIBS; \
+ GCJ="$(GCJ)"; export GCJ; \
+ GFORTRAN="$(GFORTRAN)"; export GFORTRAN; \
+ GOC="$(GOC)"; export GOC; \
+@@ -274,6 +278,7 @@
+ CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
+ CPPFLAGS="$(CPPFLAGS_FOR_TARGET)"; export CPPFLAGS; \
++ LIBS="$(LIBS_FOR_TARGET)"; export LIBS; \
+ CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ GCJ="$(GCJ_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export GCJ; \
+ GFORTRAN="$(GFORTRAN_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export GFORTRAN; \
+@@ -543,10 +548,11 @@
+ CFLAGS_FOR_TARGET = @CFLAGS_FOR_TARGET@
+ CPPFLAGS_FOR_TARGET = @CPPFLAGS_FOR_TARGET@
+ CXXFLAGS_FOR_TARGET = @CXXFLAGS_FOR_TARGET@
++CPPFLAGS_FOR_TARGET = @CPPFLAGS_FOR_TARGET@
- ac_unique_file="move-if-change"
--ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS TOPLEVEL_CONFIGURE_ARGUMENTS build build_cpu build_vendor build_os build_noncanonical host_noncanonical target_noncanonical host host_cpu host_vendor host_os target target_cpu target_vendor target_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LN LN_S build_libsubdir build_subdir host_subdir target_subdir CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CXX CXXFLAGS ac_ct_CXX GNATBIND ac_ct_GNATBIND GNATMAKE ac_ct_GNATMAKE do_compare gmplibs gmpinc extra_mpfr_configure_flags ppllibs pplinc clooglibs clooginc stage1_languages SYSROOT_CFLAGS_FOR_TARGET DEBUG_PREFIX_CFLAGS_FOR_TARGET CFLAGS_FOR_TARGET CXXFLAGS_FOR_TARGET RPATH_ENVVAR GCC_SHLIB_SUBDIR tooldir build_tooldir CONFIGURE_GDB_TK GDB_TK INSTALL_GDB_TK build_configargs build_configdirs host_configargs configdirs target_configargs AR_FOR_BUILD AS_FOR_BUILD CC_FOR_BUILD CFLAGS_FOR_BUILD CXXFLAGS_FOR_BUILD CXX_FOR_BUILD DLLTOOL_FOR_BUILD GCJ_FOR_BUILD GFORTRAN_FOR_BUILD LDFLAGS_FOR_BUILD LD_FOR_BUILD NM_FOR_BUILD RANLIB_FOR_BUILD WINDMC_FOR_BUILD WINDRES_FOR_BUILD config_shell YACC BISON M4 LEX FLEX MAKEINFO EXPECT RUNTEST AR AS DLLTOOL LD LIPO NM RANLIB STRIP WINDRES WINDMC OBJCOPY OBJDUMP CC_FOR_TARGET CXX_FOR_TARGET GCC_FOR_TARGET GCJ_FOR_TARGET GFORTRAN_FOR_TARGET AR_FOR_TARGET AS_FOR_TARGET DLLTOOL_FOR_TARGET LD_FOR_TARGET LIPO_FOR_TARGET NM_FOR_TARGET OBJDUMP_FOR_TARGET RANLIB_FOR_TARGET STRIP_FOR_TARGET WINDRES_FOR_TARGET WINDMC_FOR_TARGET RAW_CXX_FOR_TARGET FLAGS_FOR_TARGET COMPILER_AS_FOR_TARGET COMPILER_LD_FOR_TARGET COMPILER_NM_FOR_TARGET MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT stage1_cflags stage1_checking stage2_werror_flag datarootdir docdir pdfdir htmldir LIBOBJS LTLIBOBJS'
-+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS TOPLEVEL_CONFIGURE_ARGUMENTS build build_cpu build_vendor build_os build_noncanonical host_noncanonical target_noncanonical host host_cpu host_vendor host_os target target_cpu target_vendor target_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LN LN_S build_libsubdir build_subdir host_subdir target_subdir CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CXX CXXFLAGS ac_ct_CXX GNATBIND ac_ct_GNATBIND GNATMAKE ac_ct_GNATMAKE do_compare gmplibs gmpinc extra_mpfr_configure_flags ppllibs pplinc clooglibs clooginc stage1_languages SYSROOT_CFLAGS_FOR_TARGET DEBUG_PREFIX_CFLAGS_FOR_TARGET CFLAGS_FOR_TARGET CXXFLAGS_FOR_TARGET CPPFLAGS_FOR_TARGET LDFLAGS_FOR_TARGET RPATH_ENVVAR GCC_SHLIB_SUBDIR tooldir build_tooldir CONFIGURE_GDB_TK GDB_TK INSTALL_GDB_TK build_configargs build_configdirs host_configargs configdirs target_configargs AR_FOR_BUILD AS_FOR_BUILD CC_FOR_BUILD CFLAGS_FOR_BUILD CXXFLAGS_FOR_BUILD CXX_FOR_BUILD DLLTOOL_FOR_BUILD GCJ_FOR_BUILD GFORTRAN_FOR_BUILD LDFLAGS_FOR_BUILD LD_FOR_BUILD NM_FOR_BUILD RANLIB_FOR_BUILD WINDMC_FOR_BUILD WINDRES_FOR_BUILD config_shell YACC BISON M4 LEX FLEX MAKEINFO EXPECT RUNTEST AR AS DLLTOOL LD LIPO NM RANLIB STRIP WINDRES WINDMC OBJCOPY OBJDUMP CC_FOR_TARGET CXX_FOR_TARGET GCC_FOR_TARGET GCJ_FOR_TARGET GFORTRAN_FOR_TARGET AR_FOR_TARGET AS_FOR_TARGET DLLTOOL_FOR_TARGET LD_FOR_TARGET LIPO_FOR_TARGET NM_FOR_TARGET OBJDUMP_FOR_TARGET RANLIB_FOR_TARGET STRIP_FOR_TARGET WINDRES_FOR_TARGET WINDMC_FOR_TARGET RAW_CXX_FOR_TARGET FLAGS_FOR_TARGET COMPILER_AS_FOR_TARGET COMPILER_LD_FOR_TARGET COMPILER_NM_FOR_TARGET MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT stage1_cflags stage1_checking stage2_werror_flag datarootdir docdir pdfdir htmldir LIBOBJS LTLIBOBJS'
- ac_subst_files='serialization_dependencies host_makefile_frag target_makefile_frag alphaieee_frag ospace_frag'
- ac_pwd=`pwd`
+ LIBCFLAGS_FOR_TARGET = $(CFLAGS_FOR_TARGET)
+ LIBCXXFLAGS_FOR_TARGET = $(CXXFLAGS_FOR_TARGET) -fno-implicit-templates
+-LDFLAGS_FOR_TARGET =
++LDFLAGS_FOR_TARGET = @LDFLAGS_FOR_TARGET@
+ GOCFLAGS_FOR_TARGET = -O2 -g
-@@ -13262,7 +13262,9 @@
- s,@SYSROOT_CFLAGS_FOR_TARGET@,$SYSROOT_CFLAGS_FOR_TARGET,;t t
- s,@DEBUG_PREFIX_CFLAGS_FOR_TARGET@,$DEBUG_PREFIX_CFLAGS_FOR_TARGET,;t t
- s,@CFLAGS_FOR_TARGET@,$CFLAGS_FOR_TARGET,;t t
-+s,@LDFLAGS_FOR_TARGET@,$LDFLAGS_FOR_TARGET,;t t
- s,@CXXFLAGS_FOR_TARGET@,$CXXFLAGS_FOR_TARGET,;t t
-+s,@CPPFLAGS_FOR_TARGET@,$CPPFLAGS_FOR_TARGET,;t t
- s,@RPATH_ENVVAR@,$RPATH_ENVVAR,;t t
- s,@GCC_SHLIB_SUBDIR@,$GCC_SHLIB_SUBDIR,;t t
- s,@tooldir@,$tooldir,;t t
-diff -ru contrib/gcc-4.4.5/gcc/config.gcc contrib/_gcc-4.4.5/gcc/config.gcc
---- contrib/gcc-4.4.5/gcc/config.gcc 2010-06-14 00:16:50.000000000 +0200
-+++ contrib/gcc-4.4.5/gcc/config.gcc 2011-02-06 22:45:54.000000000 +0100
-@@ -456,7 +456,7 @@
- # pleases around the provided core setting.
- gas=yes
- gnu_ld=yes
-- extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o"
-+ extra_parts=
- fbsd_major=`echo ${target} | sed -e 's/.*freebsd//g' | sed -e 's/\..*//g'`
- tm_defines="${tm_defines} FBSD_MAJOR=${fbsd_major}"
- tmake_file="t-slibgcc-elf-ver t-freebsd"
-diff -ru contrib/gcc-4.4.5/gcc/configure contrib/_gcc-4.4.5/gcc/configure
---- contrib/gcc-4.4.5/gcc/configure 2010-06-20 17:43:53.000000000 +0200
-+++ contrib/gcc-4.4.5/gcc/configure 2011-02-06 00:01:27.000000000 +0100
-@@ -13531,6 +13531,7 @@
- saved_CFLAGS="${CFLAGS}"
- CC="${CC_FOR_BUILD}" CFLAGS="${CFLAGS_FOR_BUILD}" \
- LDFLAGS="${LDFLAGS_FOR_BUILD}" \
-+ LIBS="${LIBS_FOR_BUILD}" CPPFLAGS="${CPPFLAGS_FOR_BUILD}" \
- ${realsrcdir}/configure \
- --enable-languages=${enable_languages-all} \
- --target=$target_alias --host=$build_alias --build=$build_alias
-diff -ru contrib/gcc-4.4.5/gcc/Makefile.in contrib/_gcc-4.4.5/gcc/Makefile.in
---- contrib/gcc-4.4.5/gcc/Makefile.in 2010-09-07 13:07:31.000000000 +0200
-+++ contrib/gcc-4.4.5/gcc/Makefile.in 2011-02-06 00:59:25.000000000 +0100
-@@ -695,7 +695,7 @@
+ FLAGS_FOR_TARGET = @FLAGS_FOR_TARGET@
+@@ -741,6 +747,7 @@
+ "LD_FOR_TARGET=$(LD_FOR_TARGET)" \
+ "LIPO_FOR_TARGET=$(LIPO_FOR_TARGET)" \
+ "LDFLAGS_FOR_TARGET=$(LDFLAGS_FOR_TARGET)" \
++ "LIBS_FOR_TARGET=$(LIBS_FOR_TARGET)" \
+ "LIBCFLAGS_FOR_TARGET=$(LIBCFLAGS_FOR_TARGET)" \
+ "LIBCXXFLAGS_FOR_TARGET=$(LIBCXXFLAGS_FOR_TARGET)" \
+ "NM_FOR_TARGET=$(NM_FOR_TARGET)" \
+@@ -835,6 +842,7 @@
+ 'CFLAGS=$$(CFLAGS_FOR_TARGET)' \
+ 'CXX=$$(CXX_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \
+ 'CXXFLAGS=$$(CXXFLAGS_FOR_TARGET)' \
++ 'CPPFLAGS=$$(CPPFLAGS_FOR_TARGET)' \
+ 'DLLTOOL=$$(DLLTOOL_FOR_TARGET)' \
+ 'GCJ=$$(GCJ_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \
+ 'GFORTRAN=$$(GFORTRAN_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \
+diff --git a/configure b/configure
+--- a/configure
++++ b/configure
+@@ -639,6 +639,7 @@
+ CXXFLAGS_FOR_TARGET
+ CFLAGS_FOR_TARGET
+ CPPFLAGS_FOR_TARGET
++LDFLAGS_FOR_TARGET
+ DEBUG_PREFIX_CFLAGS_FOR_TARGET
+ SYSROOT_CFLAGS_FOR_TARGET
+ stage1_languages
+diff --git a/gcc/Makefile.in b/gcc/Makefile.in
+--- a/gcc/Makefile.in
++++ b/gcc/Makefile.in
+@@ -770,7 +770,7 @@
# Native linker and preprocessor flags. For x-fragment overrides.
BUILD_LDFLAGS=@BUILD_LDFLAGS@
@@ -55,75 +79,25 @@ diff -ru contrib/gcc-4.4.5/gcc/Makefile.in contrib/_gcc-4.4.5/gcc/Makefile.in
# Actual name to use when installing a native compiler.
GCC_INSTALL_NAME := $(shell echo gcc|sed '$(program_transform_name)')
-diff -ru contrib/gcc-4.4.5/libstdc++-v3/Makefile.in contrib/_gcc-4.4.5/libstdc++-v3/Makefile.in
---- contrib/gcc-4.4.5/libstdc++-v3/Makefile.in 2010-04-29 17:03:38.000000000 +0200
-+++ contrib/gcc-4.4.5/libstdc++-v3/Makefile.in 2011-02-10 22:44:08.000000000 +0100
-@@ -309,7 +309,7 @@
+@@ -1035,8 +1035,8 @@
- # -I/-D flags to pass when compiling.
- AM_CPPFLAGS = $(GLIBCXX_INCLUDES)
--@GLIBCXX_HOSTED_TRUE@hosted_source = doc src po testsuite
-+@GLIBCXX_HOSTED_TRUE@hosted_source = doc po testsuite
- SUBDIRS = include libsupc++ $(hosted_source)
- ACLOCAL_AMFLAGS = -I . -I .. -I ../config
-
-diff -ru contrib/gcc-4.4.5/Makefile.in contrib/_gcc-4.4.5/Makefile.in
---- contrib/gcc-4.4.5/Makefile.in 2009-04-25 06:10:29.000000000 +0200
-+++ contrib/gcc-4.4.5/Makefile.in 2011-02-10 22:13:17.000000000 +0100
-@@ -140,6 +140,8 @@
- CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
- CXX="$(CXX_FOR_BUILD)"; export CXX; \
- CXXFLAGS="$(CXXFLAGS_FOR_BUILD)"; export CXXFLAGS; \
-+ CPPFLAGS="$(CPPFLAGS_FOR_BUILD)"; export CPPFLAGS; \
-+ LIBS="$(LIBS_FOR_BUILD)"; export LIBS; \
- GCJ="$(GCJ_FOR_BUILD)"; export GCJ; \
- GFORTRAN="$(GFORTRAN_FOR_BUILD)"; export GFORTRAN; \
- DLLTOOL="$(DLLTOOL_FOR_BUILD)"; export DLLTOOL; \
-@@ -175,6 +177,8 @@
- CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
- CXX="$(CXX)"; export CXX; \
- CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
-+ CPPFLAGS="$(CPPFLAGS)"; export CPPFLAGS; \
-+ LIBS="$(LIBS)"; export LIBS; \
- AR="$(AR)"; export AR; \
- AS="$(AS)"; export AS; \
- CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
-@@ -232,6 +236,7 @@
- CFLAGS="$(CFLAGS_FOR_TARGET) $(SYSROOT_CFLAGS_FOR_TARGET) $(DEBUG_PREFIX_CFLAGS_FOR_TARGET)"; export CFLAGS; \
- CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
- CPPFLAGS="$(CPPFLAGS_FOR_TARGET)"; export CPPFLAGS; \
-+ LIBS="$(LIBS_FOR_TARGET)"; export LIBS; \
- CXXFLAGS="$(CXXFLAGS_FOR_TARGET) $(SYSROOT_CFLAGS_FOR_TARGET) $(DEBUG_PREFIX_CFLAGS_FOR_TARGET)"; export CXXFLAGS; \
- GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
- GFORTRAN="$(GFORTRAN_FOR_TARGET)"; export GFORTRAN; \
-@@ -413,12 +418,13 @@
-
- CFLAGS_FOR_TARGET = @CFLAGS_FOR_TARGET@
- CXXFLAGS_FOR_TARGET = @CXXFLAGS_FOR_TARGET@
-+CPPFLAGS_FOR_TARGET = @CPPFLAGS_FOR_TARGET@
- SYSROOT_CFLAGS_FOR_TARGET = @SYSROOT_CFLAGS_FOR_TARGET@
- DEBUG_PREFIX_CFLAGS_FOR_TARGET = @DEBUG_PREFIX_CFLAGS_FOR_TARGET@
-
- LIBCFLAGS_FOR_TARGET = $(CFLAGS_FOR_TARGET)
- LIBCXXFLAGS_FOR_TARGET = $(CXXFLAGS_FOR_TARGET) -fno-implicit-templates
--LDFLAGS_FOR_TARGET =
-+LDFLAGS_FOR_TARGET = @LDFLAGS_FOR_TARGET@
-
- # ------------------------------------
- # Miscellaneous targets and flag lists
-@@ -575,6 +581,7 @@
- "LD_FOR_TARGET=$(LD_FOR_TARGET)" \
- "LIPO_FOR_TARGET=$(LIPO_FOR_TARGET)" \
- "LDFLAGS_FOR_TARGET=$(LDFLAGS_FOR_TARGET)" \
-+ "LIBS_FOR_TARGET=$(LIBS_FOR_TARGET)" \
- "LIBCFLAGS_FOR_TARGET=$(LIBCFLAGS_FOR_TARGET)" \
- "LIBCXXFLAGS_FOR_TARGET=$(LIBCXXFLAGS_FOR_TARGET)" \
- "NM_FOR_TARGET=$(NM_FOR_TARGET)" \
-@@ -642,6 +649,7 @@
- 'CFLAGS=$$(CFLAGS_FOR_TARGET) $(SYSROOT_CFLAGS_FOR_TARGET) $(DEBUG_PREFIX_CFLAGS_FOR_TARGET)' \
- 'CXX=$$(CXX_FOR_TARGET)' \
- 'CXXFLAGS=$$(CXXFLAGS_FOR_TARGET) $(SYSROOT_CFLAGS_FOR_TARGET) $(DEBUG_PREFIX_CFLAGS_FOR_TARGET)' \
-+ 'CPPFLAGS=$$(CPPFLAGS_FOR_TARGET)' \
- 'DLLTOOL=$$(DLLTOOL_FOR_TARGET)' \
- 'LD=$(COMPILER_LD_FOR_TARGET)' \
- 'LDFLAGS=$$(LDFLAGS_FOR_TARGET)' \
+ # How to link with both our special library facilities
+ # and the system's installed libraries.
+-LIBS = @LIBS@ $(CPPLIB) $(LIBINTL) $(LIBICONV) $(LIBIBERTY) $(LIBDECNUMBER) \
+- $(HOST_LIBS)
++LIBS = $(CPPLIB) $(LIBINTL) $(LIBICONV) $(LIBIBERTY) $(LIBDECNUMBER) \
++ $(HOST_LIBS) @LIBS@
+ BACKENDLIBS = $(CLOOGLIBS) $(PPLLIBS) $(GMPLIBS) $(PLUGINLIBS) $(HOST_LIBS) \
+ $(ZLIB)
+ # Any system libraries needed just for GNAT.
+diff --git a/gcc/configure b/gcc/configure
+--- a/gcc/configure
++++ b/gcc/configure
+@@ -10898,6 +10898,7 @@
+ saved_CFLAGS="${CFLAGS}"
+ CC="${CC_FOR_BUILD}" CFLAGS="${CFLAGS_FOR_BUILD}" \
+ LDFLAGS="${LDFLAGS_FOR_BUILD}" \
++ LIBS="${LIBS_FOR_BUILD}" CPPFLAGS="${CPPFLAGS_FOR_BUILD}" \
+ ${realsrcdir}/configure \
+ --enable-languages=${enable_languages-all} \
+ --target=$target_alias --host=$build_alias --build=$build_alias
diff --git a/ports/src/noux-pkg/gcc/target.inc b/ports/src/noux-pkg/gcc/target.inc
new file mode 100644
index 000000000..96e4d1490
--- /dev/null
+++ b/ports/src/noux-pkg/gcc/target.inc
@@ -0,0 +1,70 @@
+PWD = $(shell pwd)
+
+NOUX_CONFIGURE_ARGS = --program-prefix=$(PROGRAM_PREFIX) \
+ --target=$(GCC_TARGET) \
+ --with-gnu-as --with-gnu-ld --disable-tls --disable-threads --disable-lto \
+ --disable-multilib --disable-shared
+
+#
+# Configure options passed to gcc
+#
+# The 't-linux' tmake file is needed to let the tool chain use 'unwind-dw2-fde-glibc',
+# needed for the exception handling on Genode in the presence of shared libraries.
+#
+HOST_CONFIG_ARGS = host_xm_include_list=$(LINK_SPEC_H_$(PLATFORM)) \
+ tmake_file='t-slibgcc-elf-ver t-slibgcc-nolc-override t-linux'
+
+# passed to target components such as libgcc, libstdc++
+TARGET_CONFIG_ARGS = extra_parts='crtbegin.o crtbeginS.o crtbeginT.o crtend.o crtendS.o'
+
+# compile libsupc++ as position-independent code
+TARGET_CONFIG_ARGS += LIBSUPCXX_PICFLAGS='-prefer-pic'
+
+
+NOUX_ENV += host_configargs="$(HOST_CONFIG_ARGS)" \
+ target_configargs="$(TARGET_CONFIG_ARGS)"
+
+NOUX_ENV += CC_FOR_TARGET=$(CC) CXX_FOR_TARGET=$(CXX) GCC_FOR_TARGET=$(CC) CPP_FOR_TARGET="$(CC) -E" \
+ LD_FOR_TARGET=$(LD) AS_FOR_TARGET=$(AS) AR_FOR_TARGET=$(AR)
+
+#
+# Need to specify LDFLAGS_FOR_TARGET as configure argument, not just as
+# environment variable. Otherwise, the generated Makefile will set 'LDFLAGS_FOR_TARGET'
+# to empty, target libraries will fail to build.
+#
+NOUX_ENV += LDFLAGS_FOR_TARGET='$(NOUX_LDFLAGS)'
+NOUX_ENV += CPPFLAGS_FOR_TARGET='$(NOUX_CPPFLAGS)'
+NOUX_ENV += CXXFLAGS_FOR_TARGET='$(NOUX_CXXFLAGS)'
+
+#
+# We link libraries to the final binaries using the 'LIBS' variable. But
+# unfortunately, the gcc build system has hardcoded some libs such as '-lc'.
+# To satisfy the linker, we provide dummy archives.
+#
+
+LIBS = gmp mpfr mpc
+
+NOUX_LDFLAGS += -L$(PWD)
+
+.SECONDARY: dummy_libs
+dummy_libs: libgmp.a libmpfr.a libmpc.a libc.a
+
+libgmp.a libmpfr.a libmpc.a libc.a:
+ $(VERBOSE)$(AR) -rc $@
+
+Makefile: dummy_libs
+
+LIBS += cxx env libc libm libc_noux
+
+NOUX_PKG_DIR = $(wildcard $(REP_DIR)/contrib/gcc-*)
+
+include $(REP_DIR)/mk/noux.mk
+
+NOUX_CXXFLAGS += -ffunction-sections $(CC_OLEVEL) -nostdlib $(NOUX_CPPFLAGS)
+
+#
+# We have to specify 'LINK_ITEMS' twice to resolve inter-library dependencies.
+# Unfortunately, the use of '--start-group' and '--end-group' does not suffice
+# in all cases because 'libtool' strips those arguments from the 'LIBS' variable.
+#
+NOUX_LIBS += -Wl,--start-group $(sort $(LINK_ITEMS)) $(sort $(LINK_ITEMS)) $(LIBGCC) -Wl,--end-group
diff --git a/ports/src/noux-pkg/gcc/target.mk b/ports/src/noux-pkg/gcc/target.mk
deleted file mode 100644
index ca425998b..000000000
--- a/ports/src/noux-pkg/gcc/target.mk
+++ /dev/null
@@ -1,207 +0,0 @@
-PROGRAM_PREFIX = genode-x86-
-
-REQUIRES = x86_32
-
-PWD = $(shell pwd)
-
-NOUX_CFLAGS += -std=c99 -fgnu89-inline
-NOUX_CONFIGURE_ARGS = --program-prefix=$(PROGRAM_PREFIX) \
- --target=i686-freebsd \
- --with-gnu-as --with-gnu-ld --disable-tls --disable-threads \
- --disable-multilib --disable-shared
-
-# prevent building libgomp (OpenMP) and libmudflap (pointer debugging facility)
-NOUX_CONFIGURE_ARGS += enable_libmudflap=no enable_libgomp=no
-
-# needed by gcc/config/freebsd-spec.h
-NOUX_CFLAGS_FOR_BUILD += -DFBSD_MAJOR=6
-NOUX_CFLAGS += -DFBSD_MAJOR=6
-
-# work-around for the following error while building libgcc
-#
-# libgcc2.h:172: error: unknown machine mode ‘libgcc_cmp_return’
-# libgcc2.h:173: error: unknown machine mode ‘libgcc_shift_count’
-
-NOUX_CFLAGS += -D__libgcc_cmp_return__=word -D__libgcc_shift_count__=word -D__unwind_word__=word
-NOUX_CXXFLAGS += -D__libgcc_cmp_return__=word -D__libgcc_shift_count__=word -D__unwind_word__=word
-
-# define __SIZEOF_* macros as required by unwind-dw2.c:
-#
-# unwind.h:242:4: error: #error "__SIZEOF_LONG__ macro not defined"
-
-NOUX_CFLAGS += -D__SIZEOF_LONG__=4 -D__SIZEOF_POINTER__=4
-NOUX_CXXFLAGS += -D__SIZEOF_LONG__=4 -D__SIZEOF_POINTER__=4
-
-NOUX_ENV += CC_FOR_TARGET=$(CC) CXX_FOR_TARGET=$(CXX) GCC_FOR_TARGET=$(CC) \
- LD_FOR_TARGET=$(LD) AS_FOR_TARGET=$(AS) AR_FOR_TARGET=$(AR)
-NOUX_ENV += CC_FOR_BUILD=gcc LD_FOR_BUILD=ld \
- CFLAGS_FOR_BUILD='$(NOUX_CFLAGS_FOR_BUILD)' \
- CPPFLAGS_FOR_BUILD='' LDFLAGS_FOR_BUILD=''
-
-#
-# Need to specify LDFLAGS_FOR_TARGET as configure argument, not just as
-# environment variable. Otherwise, the generated Makefile will set 'LDFLAGS_FOR_TARGET'
-# to empty, target libraries will fail to build.
-#
-NOUX_ENV += LDFLAGS_FOR_TARGET='$(NOUX_LDFLAGS)'
-NOUX_ENV += CPPFLAGS_FOR_TARGET='$(NOUX_CPPFLAGS)'
-NOUX_ENV += CXXFLAGS_FOR_TARGET='$(NOUX_CXXFLAGS)'
-
-#
-# We link libraries to the final binaries using the 'LIBS' variable. But
-# unfortunately, the gcc build system has hardcoded some libs such as '-lc'.
-# To satisfy the linker, we provide dummy archives.
-#
-
-LIBS = gmp mpfr
-
-NOUX_LDFLAGS += -L$(PWD)
-
-dummy_libs: libgmp.a libmpfr.a libc.a
-
-libgmp.a libmpfr.a libc.a:
- $(VERBOSE)$(AR) -rc $@
-
-Makefile: dummy_libs
-
-#
-# XXX Merge the following with noux.mk
-#
-TARGET ?= $(lastword $(subst /, ,$(PRG_DIR)))
-
-NOUX_PKG ?= $(TARGET)
-
-LIBS += cxx env libc libm libc_noux
-
-NOUX_PKG_DIR = $(wildcard $(REP_DIR)/contrib/$(NOUX_PKG)-*)
-
-#
-# Detect missing preparation of noux package
-#
-ifeq ($(NOUX_PKG_DIR),)
-REQUIRES += prepare_$(NOUX_PKG)
-endif
-
-#
-# Verbose build
-#
-ifeq ($(VERBOSE),)
-NOUX_MAKE_VERBOSE = V=1
-NOUX_CONFIGURE_VERBOSE =
-
-#
-# Non-verbose build
-#
-else
-NOUX_MAKE_VERBOSE = -s
-NOUX_CONFIGURE_VERBOSE = --quiet
-
-# filter for configure output of noux package
-NOUX_CONFIGURE_OUTPUT_FILTER = > stdout.log 2> stderr.log ||\
- (echo "Error: configure script of $(NOUX_PKG) failed" && \
- cat stderr.log && false)
-
-# filter for make output of noux package
-NOUX_BUILD_OUTPUT_FILTER = 2>&1 | sed "s/^/ [$(NOUX_PKG)] /"
-
-endif
-
-NOUX_CONFIGURE_ARGS += --host x86-freebsd --build $(shell $(NOUX_PKG_DIR)/config.guess)
-NOUX_CONFIGURE_ARGS += --prefix $(PWD)/install
-NOUX_CONFIGURE_ARGS += $(NOUX_CONFIGURE_VERBOSE)
-NOUX_CONFIGURE_ARGS += --srcdir=$(NOUX_PKG_DIR)
-
-NOUX_LDFLAGS += -nostdlib $(CXX_LINK_OPT) $(CC_MARCH) -Wl,-T$(LD_SCRIPT_DYN) \
- -Wl,--dynamic-linker=$(DYNAMIC_LINKER).lib.so \
- -Wl,--eh-frame-hdr
-
-LIBGCC = $(shell $(CC) $(CC_MARCH) -print-libgcc-file-name)
-
-NOUX_CPPFLAGS += -nostdinc $(INCLUDES)
-NOUX_CPPFLAGS += -D_GNU_SOURCE=1
-NOUX_CPPFLAGS += $(CC_MARCH)
-NOUX_CFLAGS += -ffunction-sections $(CC_OLEVEL) -nostdlib $(NOUX_CPPFLAGS)
-NOUX_CXXFLAGS += -ffunction-sections $(CC_OLEVEL) -nostdlib $(NOUX_CPPFLAGS)
-
-#
-# We have to specify 'LINK_ITEMS' twice to resolve inter-library dependencies.
-# Unfortunately, the use of '--start-group' and '--end-group' does not suffice
-# in all cases because 'libtool' strips those arguments from the 'LIBS' variable.
-#
-NOUX_LIBS += -Wl,--start-group $(sort $(LINK_ITEMS)) $(sort $(LINK_ITEMS)) $(LIBGCC) -Wl,--end-group
-
-NOUX_ENV += CC='$(CC)' LD='$(LD)' AR='$(AR)' LIBS='$(NOUX_LIBS)' \
- LDFLAGS='$(NOUX_LDFLAGS)' CFLAGS='$(NOUX_CFLAGS)' \
- CPPFLAGS='$(NOUX_CPPFLAGS)' CXXFLAGS='$(NOUX_CXXFLAGS)'
-
-#
-# Re-configure the Makefile if the Genode build environment changes
-#
-Makefile reconfigure: $(MAKEFILE_LIST)
-
-#
-# Invoke configure script with the Genode environment
-#
-Makefile reconfigure: noux_env.sh
- @$(MSG_CONFIG)$(TARGET)
- $(VERBOSE)source noux_env.sh && $(NOUX_PKG_DIR)/configure $(NOUX_ENV) $(NOUX_CONFIGURE_ARGS) $(NOUX_CONFIGURE_OUTPUT_FILTER)
-
-noux_env.sh:
- $(VERBOSE)rm -f $@
- $(VERBOSE)echo "export CC='$(CC)'" >> $@
- $(VERBOSE)echo "export AR='$(AR)'" >> $@
- $(VERBOSE)echo "export LD='$(LD)'" >> $@
- $(VERBOSE)echo "export CPPFLAGS='$(NOUX_CPPFLAGS)'" >> $@
- $(VERBOSE)echo "export CFLAGS='$(NOUX_CFLAGS)'" >> $@
- $(VERBOSE)echo "export CXXFLAGS='$(NOUX_CXXFLAGS)'" >> $@
- $(VERBOSE)echo "export LDFLAGS='$(NOUX_LDFLAGS)'" >> $@
- $(VERBOSE)echo "export LIBS='$(NOUX_LIBS)'" >> $@
- $(VERBOSE)echo "export CC_FOR_TARGET='$(CC)'" >> $@
- $(VERBOSE)echo "export CXX_FOR_TARGET='$(CXX)'" >> $@
- $(VERBOSE)echo "export GCC_FOR_TARGET='$(CC)'" >> $@
- $(VERBOSE)echo "export LD_FOR_TARGET='$(LD)'" >> $@
- $(VERBOSE)echo "export AS_FOR_TARGET='$(AS)'" >> $@
- $(VERBOSE)echo "export AR_FOR_TARGET='$(AR)'" >> $@
- $(VERBOSE)echo "export LDFLAGS_FOR_TARGET='$(NOUX_LDFLAGS)'" >> $@
- $(VERBOSE)echo "export LIBS_FOR_TARGET='$(NOUX_LIBS)'" >> $@
- $(VERBOSE)echo "export CFLAGS_FOR_BUILD='$(NOUX_CFLAGS_FOR_BUILD)'" >> $@
- $(VERBOSE)echo "export CPPFLAGS_FOR_BUILD=''" >> $@
- $(VERBOSE)echo "export LDFLAGS_FOR_BUILD=''" >> $@
- $(VERBOSE)echo "export LIBS_FOR_BUILD=''" >> $@
- $(VERBOSE)echo "export PS1=''" >> $@
-
-#
-# Invoke the 'Makefile' generated by the configure script
-#
-# The 'MAN=' argument prevent manual pages from being created. This would
-# produce an error when the package uses the 'help2man' tool. This tool
-# tries to extract the man page of a program by executing it with the
-# '--help' argument on the host. However, we cannot run Genode binaries
-# this way.
-#
-noux_built.tag: noux_env.sh Makefile
- @$(MSG_BUILD)$(TARGET)
- $(VERBOSE)source noux_env.sh && $(MAKE) $(NOUX_MAKE_ENV) $(NOUX_MAKE_VERBOSE) MAN= $(NOUX_BUILD_OUTPUT_FILTER)
- @touch $@
-
-noux_installed.tag: noux_built.tag
- @$(MSG_INST)$(TARGET)
- $(VERBOSE)$(MAKE) $(NOUX_MAKE_VERBOSE) install MAN= >> stdout.log 2>> stderr.log
- $(VERBOSE)rm -f $(INSTALL_DIR)/$(TARGET)
- $(VERBOSE)ln -sf $(PWD)/install $(INSTALL_DIR)/$(TARGET)
- @touch $@
-
-$(TARGET): noux_installed.tag
-
-#
-# The clean rule is expected to be executed within the 3rd-party build
-# directory. The check should prevent serious damage if this condition
-# is violated (e.g., while working on the build system).
-#
-ifeq ($(notdir $(PWD)),$(notdir $(PRG_DIR)))
-clean_noux_build_dir:
- $(VERBOSE)rm -rf $(PWD)
-
-clean_prg_objects: clean_noux_build_dir
-endif
-
diff --git a/ports/src/noux-pkg/gcc_arm/target.mk b/ports/src/noux-pkg/gcc_arm/target.mk
new file mode 100644
index 000000000..c6b18a837
--- /dev/null
+++ b/ports/src/noux-pkg/gcc_arm/target.mk
@@ -0,0 +1,7 @@
+PROGRAM_PREFIX = genode-arm-
+GCC_TARGET = arm-elf-eabi
+
+# cross-compiling does not work yet
+REQUIRES = arm
+
+include $(PRG_DIR)/../gcc/target.inc
diff --git a/ports/src/noux-pkg/gcc_x86/target.mk b/ports/src/noux-pkg/gcc_x86/target.mk
new file mode 100644
index 000000000..23a45d990
--- /dev/null
+++ b/ports/src/noux-pkg/gcc_x86/target.mk
@@ -0,0 +1,7 @@
+PROGRAM_PREFIX = genode-x86-
+GCC_TARGET = x86_64-elf
+
+# cross-compiling does not work yet
+REQUIRES = x86
+
+include $(PRG_DIR)/../gcc/target.inc
diff --git a/tool/tool_chain b/tool/tool_chain
index bfc5157d6..bf0b7e053 100755
--- a/tool/tool_chain
+++ b/tool/tool_chain
@@ -41,7 +41,7 @@ MAKE_OPT ?= -j4
# 'create_builddir' tool within the Genode source tree
#
-GENODE_DIR ?= $(realpath $(dir $(MAKEFILE_LIST))/..)
+GENODE_DIR ?= $(realpath $(dir $(firstword $(MAKEFILE_LIST)))/..)
#
# Download locations
@@ -337,115 +337,13 @@ $(CONTRIB_DIR)/mpc-$(MPC_VERSION)/configure: $(DOWNLOAD_DIR)/mpc-$(MPC_VERSION).
$(ECHO) "$(BRIGHT_COL)unpacking mpc...$(DEFAULT_COL)"
$(VERBOSE)tar xfz $< -C $(CONTRIB_DIR)
-$(CONTRIB_DIR)/gcc-$(GCC_VERSION)/configure: $(addprefix $(DOWNLOAD_DIR)/,gcc-core-$(GCC_VERSION).tar.bz2 gcc-g++-$(GCC_VERSION).tar.bz2)
+$(CONTRIB_DIR)/gcc-$(GCC_VERSION): $(addprefix $(DOWNLOAD_DIR)/,gcc-core-$(GCC_VERSION).tar.bz2 gcc-g++-$(GCC_VERSION).tar.bz2)
$(ECHO) "$(BRIGHT_COL)unpacking gcc and g++...$(DEFAULT_COL)"
$(VERBOSE)mkdir -p $(CONTRIB_DIR)
$(VERBOSE)for i in $^ ; do tar xfj $$i -C $(CONTRIB_DIR) ;done
$(VERBOSE)touch $@
- $(ECHO) "$(BRIGHT_COL)patching gcc build system...$(DEFAULT_COL)"
- @#
- @# Enable support for passing custom 'tmake_file' and 'extra_parts' to the
- @# GCC configure process uncommenting the default initialization of the
- @# respective variables. The 'extra_parts' variable is used to carry the
- @# the information about which crtN files are to be created.
- @#
- @# The 't-386elf' file must the treated to prevent it from defining the
- @# 'EXTRA_PARTS' variable. If defined, the 'libgcc' Makefile would prepare
- @# it against our custom list of 'extra_parts' and consequently fail.
- @#
- $(VERBOSE)sed -i "/^tmake_file=$$/s/^/#/" $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/gcc/config.gcc
- $(VERBOSE)sed -i "/^extra_parts=$$/s/^/#/" $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/gcc/config.gcc
- $(VERBOSE)sed -i "/^extra_parts=$$/s/^/#/" $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/libgcc/config.host
- $(VERBOSE)sed -i "/^EXTRA_PARTS=/s/^/#/" $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/gcc/config/i386/t-i386elf
- $(VERBOSE)sed -i "/^EXTRA_MULTILIB_PARTS *=/s/^/#/" $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/gcc/config/arm/t-arm-elf
- @#
- @# Let 'config.gcc' expand our already populated 'tmake_file' variable rather
- @# than making a hard assignment. This is needed for the ARM platform because
- @# the target 'arm-elf-eabi' actually matches the pattern 'arm-*-*-eabi' in
- @# the 'config.gcc' file.
- @#
- $(VERBOSE)sed -i "/tmake_file=\"arm/s/=\"/=\"\$${tmake_file} /" $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/gcc/config.gcc
- @#
- @# Enable LINK_SPEC customization via configure arguments
- @#
- @# We add a hook for sneaking our custom LINK_SPEC definition into the GCC
- @# configure process by uncommentig the 'host_xm_include_list'. This enables us
- @# to supply a custom header file to be included into 'gcc/config.h' defining
- @# the 'LINK_SPEC' macro. This macro expresses the policy of how the GCC
- @# frontend invokes 'ld' on multiarch platforms. I.e., on x86, we need to pass
- @# '-melf_i386' to 'ld' when building in '-m32' mode.
- @#
- $(VERBOSE)sed -i "/^host_xm_include_list=$$/s/^/#/" $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/gcc/configure.ac
- @#
- @# Make sure to disable the 'inhibit_libc' flag, which is evaluated when
- @# compiling libgcc. When libc is inhibited, the 'unwind-dw2-fde-glibc.c'
- @# is not using the "new" glibc exception handling mechanism. However,
- @# Genode's dynamic linker relies on this mechanism.
- @#
- $(VERBOSE)sed -i "/inhibit_libc=true/s/true/false # was true/" $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/gcc/configure.ac
- @#
- @# Accept prepopulation of 'host_configargs' and 'target_configargs' as
- @# configure argument (only needed for gcc-4.4.5, fixed with later versions)
- @#
- $(VERBOSE)sed -i "/host_configargs=.--cache-file/s/=./=\"\$$host_configargs /" $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/configure.ac
- $(VERBOSE)sed -i "/target_configargs=..baseargs/s/=.*/=\"\$$target_configargs \$${baseargs}\"/" $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/configure.ac
- @#
- @# Allow customization of CPPFLAGS_FOR_TARGET, not supported by the original
- @# GCC config and build system.
- @#
- $(VERBOSE)sed -i "/^CXXFLAGS_FOR_TARGET =/s/^/CPPFLAGS_FOR_TARGET = @CPPFLAGS_FOR_TARGET@\n/" $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/Makefile.tpl
- $(VERBOSE)sed -i "/AC_SUBST(CFLAGS_FOR_TARGET)/s/^/AC_SUBST(CPPFLAGS_FOR_TARGET)\n/" $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/configure.ac
- @#
- @# Fix the handling of CPP_FOR_TARGET. Without the fix, the configure script
- @# of libgcc tries to use the normal 'cpp' for executing preprocessor tests,
- @# which produces bogus results.
- @#
- $(VERBOSE)sed -i "/CC=.*XGCC.*export CC/s/^/ CPP=\"\$$(CPP_FOR_TARGET) \$$(XGCC_FLAGS_FOR_TARGET) \$$\$$TFLAGS\"; export CPP; \\\\\n/" $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/Makefile.tpl
- $(VERBOSE)sed -i "/^CC_FOR_TARGET=/s/^/CPP_FOR_TARGET=\$$(STAGE_CC_WRAPPER) @CPP_FOR_TARGET@\n/" $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/Makefile.tpl
- $(VERBOSE)sed -i "/CC=.*XGCC.*TFLAGS....$$/s/^/ 'CPP=\$$\$$(CPP_FOR_TARGET) \$$\$$(XGCC_FLAGS_FOR_TARGET) \$$\$$(TFLAGS)' \\\\\n/" $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/Makefile.tpl
- $(VERBOSE)sed -i "/flag= CC_FOR_TARGET/s/^/flags_to_pass = { flag= CPP_FOR_TARGET ; };\n/" $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/Makefile.def
- $(VERBOSE)sed -i "/^GCC_TARGET_TOOL.cc,/s/^/GCC_TARGET_TOOL(cpp, CPP_FOR_TARGET, CPP, \[gcc\/cpp -B\$$\$$r\/\$$(HOST_SUBDIR)\/gcc\/\])\n/" $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/configure.ac
- @#
- @# Ensure -fno-short-enums as default.
- @#
- $(VERBOSE)sed -i "s/return TARGET_AAPCS_BASED && arm_abi != ARM_ABI_AAPCS_LINUX/return false/" $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/gcc/config/arm/arm.c
- @#
- @# Remove sanity check for host/target combination in configure script of
- @# libstdc++. An alternative fix would be the addition of a new host or
- @# the use of an existing one. However, adding a new host would require
- @# us to maintain a larger patch to the GCC build system, and using an
- @# existing host comes with all the (possibly unwanted) policies associated
- @# with the respective host platform. We want to stick with the bare-bone
- @# compiler as much as possible.
- @#
- $(VERBOSE)sed -i "/No support for this host.target combination/d" $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/libstdc++-v3/crossconfig.m4
- $(VERBOSE)cd $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/libstdc++-v3; $(AUTOCONF)
- @#
- @# Allow passing of PICFLAGS to the configure script of libstdc++.
- @# Without this change, libsupc++ would be compiled w/o PICFLAGS, resulting
- @# in text relocations. Because for base tool chains, no 'dynamic_linker'
- @# is defined (see 'libtool.m4'), 'dynamic_linker' is set to 'no', which
- @# results in 'can_build_shared = no', which, in turn , results
- @# in 'enable_shared = no', which, in turn, sets 'LIBSUPCXX_PICFLAGS' to
- @# nothing rather then '-prefer-pic'.
- @#
- $(VERBOSE)sed -i "/LIBSUPCXX_PICFLAGS=$$/s/LIB/__LIB/" $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/libstdc++-v3/configure.ac
- @#
- @# Re-generate configure scripts
- @#
- $(VERBOSE)cd $(CONTRIB_DIR)/gcc-$(GCC_VERSION); autogen Makefile.def
- $(VERBOSE)cd $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/libgcc; $(AUTOCONF)
- $(VERBOSE)cd $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/libstdc++-v3; $(AUTOCONF)
- $(VERBOSE)cd $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/gcc; $(AUTOCONF)
- $(VERBOSE)cd $(CONTRIB_DIR)/gcc-$(GCC_VERSION); $(AUTOCONF)
- @#
- @# Fix a bug in gcc 4.6.1 that causes compile errors when building Qt4 for ARM
- @# More detailed description at and solution from http://gcc.gnu.org/ml/gcc-patches/2010-11/msg02245.html
- @#
-ifeq ($(GCC_VERSION),4.6.1)
- $(ECHO) "$(BRIGHT_COL)patching gcc...$(DEFAULT_COL)"
- $(VERBOSE)sed -i "/|| (volatilep && flag_strict_volatile_bitfields > 0/s/)/ \&\& (bitpos % GET_MODE_ALIGNMENT (mode) != 0))/" $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/gcc/expr.c
-endif
+
+include $(GENODE_DIR)/tool/tool_chain_gcc_patches.inc
$(CONTRIB_DIR)/binutils-$(BINUTILS_VERSION)/configure: $(DOWNLOAD_DIR)/$(BINUTILS_DOWNLOAD_TBZ2)
$(ECHO) "$(BRIGHT_COL)unpacking binutils...$(DEFAULT_COL)"
diff --git a/tool/tool_chain_gcc_patches.inc b/tool/tool_chain_gcc_patches.inc
new file mode 100755
index 000000000..bbbd50530
--- /dev/null
+++ b/tool/tool_chain_gcc_patches.inc
@@ -0,0 +1,105 @@
+$(CONTRIB_DIR)/gcc-$(GCC_VERSION)/configure:: $(CONTRIB_DIR)/gcc-$(GCC_VERSION)
+ $(ECHO) "$(BRIGHT_COL)patching gcc build system...$(DEFAULT_COL)"
+ @#
+ @# Enable support for passing custom 'tmake_file' and 'extra_parts' to the
+ @# GCC configure process uncommenting the default initialization of the
+ @# respective variables. The 'extra_parts' variable is used to carry the
+ @# the information about which crtN files are to be created.
+ @#
+ @# The 't-386elf' file must the treated to prevent it from defining the
+ @# 'EXTRA_PARTS' variable. If defined, the 'libgcc' Makefile would prepare
+ @# it against our custom list of 'extra_parts' and consequently fail.
+ @#
+ $(VERBOSE)sed -i "/^tmake_file=$$/s/^/#/" $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/gcc/config.gcc
+ $(VERBOSE)sed -i "/^extra_parts=$$/s/^/#/" $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/gcc/config.gcc
+ $(VERBOSE)sed -i "/^extra_parts=$$/s/^/#/" $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/libgcc/config.host
+ $(VERBOSE)sed -i "/^EXTRA_PARTS=/s/^/#/" $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/gcc/config/i386/t-i386elf
+ $(VERBOSE)sed -i "/^EXTRA_MULTILIB_PARTS *=/s/^/#/" $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/gcc/config/arm/t-arm-elf
+ @#
+ @# Let 'config.gcc' expand our already populated 'tmake_file' variable rather
+ @# than making a hard assignment. This is needed for the ARM platform because
+ @# the target 'arm-elf-eabi' actually matches the pattern 'arm-*-*-eabi' in
+ @# the 'config.gcc' file.
+ @#
+ $(VERBOSE)sed -i "/tmake_file=\"arm/s/=\"/=\"\$${tmake_file} /" $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/gcc/config.gcc
+ @#
+ @# Enable LINK_SPEC customization via configure arguments
+ @#
+ @# We add a hook for sneaking our custom LINK_SPEC definition into the GCC
+ @# configure process by uncommentig the 'host_xm_include_list'. This enables us
+ @# to supply a custom header file to be included into 'gcc/config.h' defining
+ @# the 'LINK_SPEC' macro. This macro expresses the policy of how the GCC
+ @# frontend invokes 'ld' on multiarch platforms. I.e., on x86, we need to pass
+ @# '-melf_i386' to 'ld' when building in '-m32' mode.
+ @#
+ $(VERBOSE)sed -i "/^host_xm_include_list=$$/s/^/#/" $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/gcc/configure.ac
+ @#
+ @# Make sure to disable the 'inhibit_libc' flag, which is evaluated when
+ @# compiling libgcc. When libc is inhibited, the 'unwind-dw2-fde-glibc.c'
+ @# is not using the "new" glibc exception handling mechanism. However,
+ @# Genode's dynamic linker relies on this mechanism.
+ @#
+ $(VERBOSE)sed -i "/inhibit_libc=true/s/true/false # was true/" $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/gcc/configure.ac
+ @#
+ @# Accept prepopulation of 'host_configargs' and 'target_configargs' as
+ @# configure argument (only needed for gcc-4.4.5, fixed with later versions)
+ @#
+ $(VERBOSE)sed -i "/host_configargs=.--cache-file/s/=./=\"\$$host_configargs /" $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/configure.ac
+ $(VERBOSE)sed -i "/target_configargs=..baseargs/s/=.*/=\"\$$target_configargs \$${baseargs}\"/" $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/configure.ac
+ @#
+ @# Allow customization of CPPFLAGS_FOR_TARGET, not supported by the original
+ @# GCC config and build system.
+ @#
+ $(VERBOSE)sed -i "/^CXXFLAGS_FOR_TARGET =/s/^/CPPFLAGS_FOR_TARGET = @CPPFLAGS_FOR_TARGET@\n/" $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/Makefile.tpl
+ $(VERBOSE)sed -i "/AC_SUBST(CFLAGS_FOR_TARGET)/s/^/AC_SUBST(CPPFLAGS_FOR_TARGET)\n/" $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/configure.ac
+ @#
+ @# Fix the handling of CPP_FOR_TARGET. Without the fix, the configure script
+ @# of libgcc tries to use the normal 'cpp' for executing preprocessor tests,
+ @# which produces bogus results.
+ @#
+ $(VERBOSE)sed -i "/CC=.*XGCC.*export CC/s/^/ CPP=\"\$$(CPP_FOR_TARGET) \$$(XGCC_FLAGS_FOR_TARGET) \$$\$$TFLAGS\"; export CPP; \\\\\n/" $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/Makefile.tpl
+ $(VERBOSE)sed -i "/^CC_FOR_TARGET=/s/^/CPP_FOR_TARGET=\$$(STAGE_CC_WRAPPER) @CPP_FOR_TARGET@\n/" $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/Makefile.tpl
+ $(VERBOSE)sed -i "/CC=.*XGCC.*TFLAGS....$$/s/^/ 'CPP=\$$\$$(CPP_FOR_TARGET) \$$\$$(XGCC_FLAGS_FOR_TARGET) \$$\$$(TFLAGS)' \\\\\n/" $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/Makefile.tpl
+ $(VERBOSE)sed -i "/flag= CC_FOR_TARGET/s/^/flags_to_pass = { flag= CPP_FOR_TARGET ; };\n/" $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/Makefile.def
+ $(VERBOSE)sed -i "/^GCC_TARGET_TOOL.cc,/s/^/GCC_TARGET_TOOL(cpp, CPP_FOR_TARGET, CPP, \[gcc\/cpp -B\$$\$$r\/\$$(HOST_SUBDIR)\/gcc\/\])\n/" $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/configure.ac
+ @#
+ @# Ensure -fno-short-enums as default.
+ @#
+ $(VERBOSE)sed -i "s/return TARGET_AAPCS_BASED && arm_abi != ARM_ABI_AAPCS_LINUX/return false/" $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/gcc/config/arm/arm.c
+ @#
+ @# Remove sanity check for host/target combination in configure script of
+ @# libstdc++. An alternative fix would be the addition of a new host or
+ @# the use of an existing one. However, adding a new host would require
+ @# us to maintain a larger patch to the GCC build system, and using an
+ @# existing host comes with all the (possibly unwanted) policies associated
+ @# with the respective host platform. We want to stick with the bare-bone
+ @# compiler as much as possible.
+ @#
+ $(VERBOSE)sed -i "/No support for this host.target combination/d" $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/libstdc++-v3/crossconfig.m4
+ $(VERBOSE)cd $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/libstdc++-v3; $(AUTOCONF)
+ @#
+ @# Allow passing of PICFLAGS to the configure script of libstdc++.
+ @# Without this change, libsupc++ would be compiled w/o PICFLAGS, resulting
+ @# in text relocations. Because for base tool chains, no 'dynamic_linker'
+ @# is defined (see 'libtool.m4'), 'dynamic_linker' is set to 'no', which
+ @# results in 'can_build_shared = no', which, in turn , results
+ @# in 'enable_shared = no', which, in turn, sets 'LIBSUPCXX_PICFLAGS' to
+ @# nothing rather then '-prefer-pic'.
+ @#
+ $(VERBOSE)sed -i "/LIBSUPCXX_PICFLAGS=$$/s/LIB/__LIB/" $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/libstdc++-v3/configure.ac
+ @#
+ @# Re-generate configure scripts
+ @#
+ $(VERBOSE)cd $(CONTRIB_DIR)/gcc-$(GCC_VERSION); autogen Makefile.def
+ $(VERBOSE)cd $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/libgcc; $(AUTOCONF)
+ $(VERBOSE)cd $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/libstdc++-v3; $(AUTOCONF)
+ $(VERBOSE)cd $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/gcc; $(AUTOCONF)
+ $(VERBOSE)cd $(CONTRIB_DIR)/gcc-$(GCC_VERSION); $(AUTOCONF)
+ @#
+ @# Fix a bug in gcc 4.6.1 that causes compile errors when building Qt4 for ARM
+ @# More detailed description at and solution from http://gcc.gnu.org/ml/gcc-patches/2010-11/msg02245.html
+ @#
+ifeq ($(GCC_VERSION),4.6.1)
+ $(ECHO) "$(BRIGHT_COL)patching gcc...$(DEFAULT_COL)"
+ $(VERBOSE)sed -i "/|| (volatilep && flag_strict_volatile_bitfields > 0/s/)/ \&\& (bitpos % GET_MODE_ALIGNMENT (mode) != 0))/" $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/gcc/expr.c
+endif