From 6d63ea7513c766c1d45e167fe827ac4bd680aac6 Mon Sep 17 00:00:00 2001 From: Laurent GUERBY Date: Mon, 6 Apr 2009 20:18:10 +0000 Subject: [PATCH] gnat.exp: Handle multilib. testsuite/ 2009-04-06 Laurent GUERBY * lib/gnat.exp: Handle multilib. libada/ 2009-04-06 Laurent GUERBY * Makefile.in (ADA_RTS_DIR): Define. * Makefile.in (gnatlib-*): Link adainclude and adalib to it. From-SVN: r145622 --- gcc/testsuite/ChangeLog | 4 +++ gcc/testsuite/lib/gnat.exp | 66 ++++++++++++++++++++++++++++------------------ libada/ChangeLog | 5 ++++ libada/Makefile.in | 5 ++++ 4 files changed, 55 insertions(+), 25 deletions(-) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 489ca5b..40b0d24 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2009-04-06 Laurent GUERBY + + * lib/gnat.exp: Handle multilib. + 2009-04-06 Paul Thomas PR fortran/38863 diff --git a/gcc/testsuite/lib/gnat.exp b/gcc/testsuite/lib/gnat.exp index d37a4aa..c14899f 100644 --- a/gcc/testsuite/lib/gnat.exp +++ b/gcc/testsuite/lib/gnat.exp @@ -83,17 +83,22 @@ proc gnat_init { args } { global gluefile wrap_flags global gnat_initialized global GNAT_UNDER_TEST + global GNAT_UNDER_TEST_ORIG global TOOL_EXECUTABLE global gnat_libgcc_s_path + global gnat_target_current + + set gnat_target_current "" if { $gnat_initialized == 1 } { return } if ![info exists GNAT_UNDER_TEST] then { if [info exists TOOL_EXECUTABLE] { - set GNAT_UNDER_TEST $TOOL_EXECUTABLE + set GNAT_UNDER_TEST "$TOOL_EXECUTABLE" } else { - set GNAT_UNDER_TEST [find_gnatmake] + set GNAT_UNDER_TEST "[local_find_gnatmake]" } + set GNAT_UNDER_TEST_ORIG "$GNAT_UNDER_TEST" } if ![info exists tmpdir] then { @@ -124,14 +129,26 @@ proc gnat_target_compile { source dest type options } { global gluefile wrap_flags global srcdir global GNAT_UNDER_TEST + global GNAT_UNDER_TEST_ORIG global TOOL_OPTIONS global ld_library_path global gnat_libgcc_s_path + global gnat_target_current + + # If we detect a change of target we need to recompute + # the appropriate RTS by calling get_multilibs. + if { $gnat_target_current!="[current_target_name]" } { + set gnat_target_current "[current_target_name]" + if [info exists TOOL_OPTIONS] { + set gnat_rts_opt "--RTS=[get_multilibs ${TOOL_OPTIONS}]/libada" + } else { + set gnat_rts_opt "--RTS=[get_multilibs]/libada" + } + set GNAT_UNDER_TEST "$GNAT_UNDER_TEST_ORIG $gnat_rts_opt" + } - setenv ADA_INCLUDE_PATH "${rootme}/ada/rts" set ld_library_path ".:${gnat_libgcc_s_path}" lappend options "compiler=$GNAT_UNDER_TEST -q -f" - lappend options "incdir=${rootme}/ada/rts" lappend options "timeout=[timeout_value]" if { [target_info needs_status_wrapper]!="" && [info exists gluefile] } { @@ -150,6 +167,7 @@ proc gnat_target_compile { source dest type options } { # set sourcename [string range $source 0 [expr [string length $source] - 5]] # set dest "" + return [target_compile $source $dest $type $options] } @@ -232,29 +250,27 @@ proc prune_gnat_output { text } { return $text } -# If this is an older version of DejaGnu (without find_gnatmake), provide one. -# This can be deleted after next DejaGnu release. - -if { [info procs find_gnatmake] == "" } { - proc find_gnatmake {} { - global tool_root_dir +# find_gnatmake for some version of DejaGnu will hardcode a -I...rts/ada flag +# which prevent multilib from working, so define a new one. - if ![is_remote host] { - set file [lookfor_file $tool_root_dir gnatmake] - if { $file == "" } { - set file [lookfor_file $tool_root_dir gcc/gnatmake] - } - if { $file != "" } { - set root [file dirname $file] - set CC "$file -I$root/ada/rts --GCC=$root/xgcc --GNATBIND=$root/gnatbind --GNATLINK=$root/gnatlink -cargs -B$root -largs --GCC=$root/xgcc -B$root -margs"; - } else { - set CC [transform gnatmake] - } - } else { - set CC [transform gnatmake] - } - return $CC +proc local_find_gnatmake {} { + global tool_root_dir + + if ![is_remote host] { + set file [lookfor_file $tool_root_dir gnatmake] + if { $file == "" } { + set file [lookfor_file $tool_root_dir gcc/gnatmake] + } + if { $file != "" } { + set root [file dirname $file] + set CC "$file --GCC=$root/xgcc --GNATBIND=$root/gnatbind --GNATLINK=$root/gnatlink -cargs -B$root -largs -B$root -margs -B$root"; + } else { + set CC [transform gnatmake] + } + } else { + set CC [transform gnatmake] } + return $CC } # If this is an older version of DejaGnu (without runtest_file_p), diff --git a/libada/ChangeLog b/libada/ChangeLog index 5576673..a58617b 100644 --- a/libada/ChangeLog +++ b/libada/ChangeLog @@ -1,3 +1,8 @@ +2009-04-06 Laurent GUERBY + + * Makefile.in (ADA_RTS_DIR): Define. + * Makefile.in (gnatlib-*): Link adainclude and adalib to it. + 2008-09-21 Laurent Guerby Paolo Bonzini diff --git a/libada/Makefile.in b/libada/Makefile.in index 2c56868..b819dfc 100644 --- a/libada/Makefile.in +++ b/libada/Makefile.in @@ -65,6 +65,7 @@ include $(GCC_DIR)/libgcc.mvars target_noncanonical:=@target_noncanonical@ version := $(shell cat $(srcdir)/../gcc/BASE-VER) libsubdir := $(libdir)/gcc/$(target_noncanonical)/$(version)$(MULTISUBDIR) +ADA_RTS_DIR=$(GCC_DIR)/ada/rts$(subst /,_,$(MULTISUBDIR)) # exeext should not be used because it's the *host* exeext. We're building # a *target* library, aren't we?!? Likewise for CC. Still, provide bogus @@ -97,11 +98,15 @@ gnatlib-plain: oscons $(GCC_DIR)/ada/Makefile test -f stamp-libada || \ $(MAKE) -C $(GCC_DIR)/ada $(LIBADA_FLAGS_TO_PASS) gnatlib \ && touch stamp-libada + $(LN_S) $(ADA_RTS_DIR) adainclude + $(LN_S) $(ADA_RTS_DIR) adalib gnatlib-sjlj gnatlib-zcx gnatlib-shared: oscons $(GCC_DIR)/ada/Makefile test -f stamp-libada || \ $(MAKE) -C $(GCC_DIR)/ada $(LIBADA_FLAGS_TO_PASS) $@ \ && touch stamp-libada + $(LN_S) $(ADA_RTS_DIR) adainclude + $(LN_S) $(ADA_RTS_DIR) adalib oscons: $(MAKE) -C $(GCC_DIR) $(LIBADA_FLAGS_TO_PASS) ada/s-oscons.ads -- 2.7.4