diff --git a/Makefile.in b/Makefile.in index e51ab8e..5b4781b 100644 --- a/Makefile.in +++ b/Makefile.in @@ -63,6 +63,7 @@ SED := @GSED@ PATH := $(INSTALL_DIR)/bin:$(PATH) DEBUG_INFO := @debug_info@ DEBUG_INFO_GLIBC := @debug_info_glibc@ +COMPAT_TESTS := @compat_tests@ # Check to see if we need wrapper scripts for awk/sed (which point to # gawk/gsed on platforms where these aren't the default), otherwise @@ -155,6 +156,81 @@ endif SIM_PATH:=$(srcdir)/scripts/wrapper/$(SIM) SIM_PREPARE:=PATH="$(SIM_PATH):$(INSTALL_DIR)/bin:$(PATH)" ARC_SYSROOT="$(SYSROOT)" DEJAGNU="$(srcdir)/dejagnu/site.exp" QEMU_CPU="$(QEMU_CPU)" +ifeq ($(COMPAT_TESTS),--enable-compat-tests) +ifeq (@default_target@, linux) + $(error Default target cannot be set to Linux when running compatibility tests) +endif + +# Default compatibility test flags +# ALT is by default ccac +GCC_COMMON_OPTS:=-O0 -g -Wl,-zmuldefs -Wl,--no-warn-mismatch -lgcc -lnsim -lg -lm +CCAC_COMMON_OPTS:=-O0 -g -Xbasecase -Hnocopyr -Hnosdata -fstrict-abi +# ArcV2 +ifeq (@target_alias@,arc) + ifeq ($(WITH_CPU),--with-cpu=archs) + GCC_METAWARE_LIB:=arc/lib/av2hs/le + GCC_COMPAT_GCC_OPTIONS_DEFAULT:=-mcpu=archs -mno-sdata + GCC_COMPAT_CCAC_OPTIONS_DEFAULT:=-av2hs + else + GCC_METAWARE_LIB:=arc/lib/av2em/le + GCC_COMPAT_GCC_OPTIONS_DEFAULT:=-mcpu=em4_dmips -mno-sdata -fshort-enums + GCC_COMPAT_CCAC_OPTIONS_DEFAULT:=-av2em + endif +else +# hs5x +ifeq (@target_alias@,arc32) + GCC_METAWARE_LIB:=arc/lib/av3hs/le + GCC_COMPAT_GCC_OPTIONS_DEFAULT:=-mcpu=hs5x + GCC_COMPAT_CCAC_OPTIONS_DEFAULT:=-arcv3hs + +# hs6x +else + GCC_METAWARE_LIB:=arc/lib/arc64/le + GCC_COMPAT_GCC_OPTIONS_DEFAULT:= -mcpu=hs6x + GCC_COMPAT_CCAC_OPTIONS_DEFAULT:=-arc64 +endif +endif + +GCC_COMPAT_GCC_OPTIONS_DEFAULT:=$(GCC_COMMON_OPTS) $(GCC_COMPAT_GCC_OPTIONS_DEFAULT) +GCC_COMPAT_CCAC_OPTIONS_DEFAULT:=$(CCAC_COMMON_OPTS) $(GCC_COMPAT_CCAC_OPTIONS_DEFAULT) + +# Check for GCC compat flags +ifndef GCC_COMPAT_GCC_OPTIONS + GCC_COMPAT_GCC_OPTIONS:=$(GCC_COMPAT_GCC_OPTIONS_DEFAULT) +endif + +# Check for added GCC compat flags (so we can add to the defaults) +ifdef GCC_COMPAT_EXTRA_GCC_OPTIONS + GCC_COMPAT_GCC_OPTIONS:=$(GCC_COMPAT_GCC_OPTIONS) $(GCC_COMPAT_EXTRA_GCC_OPTIONS) +endif + +# Use alternate if available +ifdef GCC_COMPAT_ALT_PATH + + # We can use some defaults for MetaWares' CCAC + ifeq ($(shell echo $(GCC_COMPAT_ALT_PATH) | grep -q ccac && echo 1 || echo 0), 1) + ifndef GCC_COMPAT_ALT_OPTIONS + GCC_COMPAT_ALT_OPTIONS:=$(GCC_COMPAT_CCAC_OPTIONS_DEFAULT) + endif + + # Default to use metaware libraries if available + ifdef GCC_METAWARE_ROOT + GCC_COMPAT_GCC_OPTIONS:=$(GCC_COMPAT_GCC_OPTIONS) -L$(GCC_METAWARE_ROOT)/$(GCC_METAWARE_LIB) -lmw + endif + endif + ALT_CC_UNDER_TEST:=$(GCC_COMPAT_ALT_PATH) + + SIM_PREPARE := ALT_CC_UNDER_TEST="$(ALT_CC_UNDER_TEST)" GCC_COMPAT_ALT_OPTIONS="$(GCC_COMPAT_ALT_OPTIONS)" GCC_COMPAT_GCC_OPTIONS="$(GCC_COMPAT_GCC_OPTIONS)" $(SIM_PREPARE) + +# No alternate compiler provided, do self sanity checks +else + + ALT_CC_UNDER_TEST:="same" + SIM_PREPARE := ALT_CC_UNDER_TEST="$(ALT_CC_UNDER_TEST)" GCC_COMPAT_GCC_OPTIONS="$(GCC_COMPAT_GCC_OPTIONS)" $(SIM_PREPARE) + +endif +endif + all: @default_target@ @qemu_build@ echo "$(INSTALL_DIR)" > stamps/install_dir baremetal: stamps/build-gcc-newlib-stage2 @@ -177,6 +253,7 @@ check-baremetal: $(patsubst %,check-%-baremetal,$(REGRESSION_TEST_LIST)) check-gcc: check-gcc-@default_target@ check-gcc-baremetal: stamps/check-gcc-baremetal +check-gcc-compat: stamps/check-gcc-compat check-gcc-linux: stamps/check-gcc-linux check-binutils: check-binutils-@default_target@ diff --git a/configure.ac b/configure.ac index 692453b..11d5d23 100644 --- a/configure.ac +++ b/configure.ac @@ -153,6 +153,16 @@ AS_IF([test "x$enable_gcc_checking" != xno], [AC_SUBST(gcc_checking, --enable-checking=yes)], [AC_SUBST(gcc_checking, --enable-checking=release)]) +AC_ARG_ENABLE(compat-tests, + [AS_HELP_STRING([--enable-compat-tests], + [Enable gcc compatibility tests, Linux toolchain is not supported @<:@--disable-compact-tests@:>@])], + [], + [enable_compat_tests=no] + ) +AS_IF([test "x$enable_compat_tests" != xno], + [AC_SUBST(compat_tests, --enable-compat-tests)], + [AC_SUBST(compat_tests, --disable-compat-tests)]) + AC_ARG_WITH(cmodel, [AS_HELP_STRING([--with-cmodel], [Select the code model to use when building libc and libgcc @<:@--with-cmodel=medlow@:>@])], diff --git a/dejagnu/site.exp b/dejagnu/site.exp index 71c3539..e955f35 100644 --- a/dejagnu/site.exp +++ b/dejagnu/site.exp @@ -34,4 +34,24 @@ if ![ info exists HOSTCFLAGS ] { set HOSTCFLAGS "-g -O2" } +if { [info exists env(GCC_COMPAT_GCC_OPTIONS)] } { + set is_gcc_compat_suite "1" + set GCC_COMPAT_GCC_OPTIONS $env(GCC_COMPAT_GCC_OPTIONS) + + set ALT_CC_UNDER_TEST "$env(ALT_CC_UNDER_TEST)" + set ALT_CXX_UNDER_TEST "$ALT_CC_UNDER_TEST" + + # MetaWare specs are defined + if { [info exists env(GCC_COMPAT_ALT_OPTIONS)] } { + set GCC_COMPAT_ALT_OPTIONS $env(GCC_COMPAT_ALT_OPTIONS) + + set COMPAT_OPTIONS [list [list $GCC_COMPAT_GCC_OPTIONS $GCC_COMPAT_ALT_OPTIONS]] + + # No MetaWare specs, perform sanity (self) compatibility checks + } else { + set COMPAT_OPTIONS [list [list $GCC_COMPAT_GCC_OPTIONS $GCC_COMPAT_GCC_OPTIONS]] + + } +} + # vim: noexpandtab sts=4 ts=8: