]>
Commit | Line | Data |
---|---|---|
f1717362 | 1 | # Copyright (C) 1992-2016 Free Software Foundation, Inc. |
912f9e81 | 2 | |
3 | # This program is free software; you can redistribute it and/or modify | |
4 | # it under the terms of the GNU General Public License as published by | |
f63ff66b | 5 | # the Free Software Foundation; either version 3 of the License, or |
912f9e81 | 6 | # (at your option) any later version. |
7 | # | |
8 | # This program is distributed in the hope that it will be useful, | |
9 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
10 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
11 | # GNU General Public License for more details. | |
12 | # | |
13 | # You should have received a copy of the GNU General Public License | |
f63ff66b | 14 | # along with GCC; see the file COPYING3. If not see |
15 | # <http://www.gnu.org/licenses/>. | |
912f9e81 | 16 | |
912f9e81 | 17 | # This file was written by Rob Savoye (rob@cygnus.com) |
18 | # Currently maintained by Doug Evans (dje@cygnus.com) | |
19 | ||
20 | # This file is loaded by the tool init file (eg: unix.exp). It provides | |
21 | # default definitions for gcc_start, etc. and other supporting cast members. | |
22 | ||
23 | # These globals are used by gcc_start if no compiler arguments are provided. | |
24 | # They are also used by the various testsuites to define the environment: | |
25 | # where to find stdio.h, libc.a, etc. | |
26 | ||
27 | # we want to use libgloss so we can get find_gcc. | |
28 | load_lib libgloss.exp | |
1b28399f | 29 | load_lib prune.exp |
1f752dbe | 30 | load_lib gcc-defs.exp |
0557b60a | 31 | load_lib timeout.exp |
912f9e81 | 32 | |
33 | # | |
34 | # GCC_UNDER_TEST is the compiler under test. | |
35 | # | |
36 | ||
37 | # | |
38 | # default_gcc_version -- extract and print the version number of the compiler | |
39 | # | |
40 | ||
41 | proc default_gcc_version { } { | |
42 | global GCC_UNDER_TEST | |
43 | ||
d4213587 | 44 | gcc_init |
912f9e81 | 45 | |
46 | # ignore any arguments after the command | |
47 | set compiler [lindex $GCC_UNDER_TEST 0] | |
48 | ||
49 | if ![is_remote host] { | |
d4213587 | 50 | set compiler_name [which $compiler] |
912f9e81 | 51 | } else { |
d4213587 | 52 | set compiler_name $compiler |
912f9e81 | 53 | } |
54 | ||
55 | # verify that the compiler exists | |
56 | if { $compiler_name != 0 } then { | |
57 | set tmp [remote_exec host "$compiler -v"] | |
d4213587 | 58 | set status [lindex $tmp 0] |
59 | set output [lindex $tmp 1] | |
da97e61f | 60 | regexp " version \[^\n\r\]*" $output version |
912f9e81 | 61 | if { $status == 0 && [info exists version] } then { |
62 | clone_output "$compiler_name $version\n" | |
63 | } else { | |
64 | clone_output "Couldn't determine version of $compiler_name: $output\n" | |
65 | } | |
66 | } else { | |
67 | # compiler does not exist (this should have already been detected) | |
68 | warning "$compiler does not exist" | |
69 | } | |
70 | } | |
71 | ||
72 | # | |
1f752dbe | 73 | # gcc_version -- Call default_gcc_version, so we can override it if needed. |
912f9e81 | 74 | # |
1f752dbe | 75 | |
912f9e81 | 76 | proc gcc_version { } { |
d4213587 | 77 | default_gcc_version |
912f9e81 | 78 | } |
79 | ||
80 | # | |
81 | # gcc_init -- called at the start of each .exp script. | |
82 | # | |
83 | # There currently isn't much to do, but always using it allows us to | |
84 | # make some enhancements without having to go back and rewrite the scripts. | |
85 | # | |
86 | ||
87 | set gcc_initialized 0 | |
88 | ||
89 | proc gcc_init { args } { | |
90 | global tmpdir | |
91 | global libdir | |
92 | global gluefile wrap_flags | |
93 | global gcc_initialized | |
94 | global GCC_UNDER_TEST | |
95 | global TOOL_EXECUTABLE | |
024ff6a0 | 96 | global gcc_warning_prefix |
97 | global gcc_error_prefix | |
912f9e81 | 98 | |
99 | if { $gcc_initialized == 1 } { return; } | |
100 | ||
101 | if ![info exists GCC_UNDER_TEST] { | |
102 | if [info exists TOOL_EXECUTABLE] { | |
d4213587 | 103 | set GCC_UNDER_TEST $TOOL_EXECUTABLE |
912f9e81 | 104 | } else { |
105 | set GCC_UNDER_TEST "[find_gcc]" | |
106 | } | |
107 | } | |
108 | ||
109 | if ![info exists tmpdir] then { | |
110 | set tmpdir /tmp | |
111 | } | |
ac8cb22b | 112 | |
024ff6a0 | 113 | set gcc_warning_prefix "warning:" |
8f51a05f | 114 | set gcc_error_prefix "(fatal )?error:" |
024ff6a0 | 115 | |
ac8cb22b | 116 | gcc_maybe_build_wrapper "${tmpdir}/gcc-testglue.o" |
912f9e81 | 117 | } |
118 | ||
1f752dbe | 119 | # |
120 | # gcc_target_compile -- compile a source file | |
121 | # | |
122 | ||
912f9e81 | 123 | proc gcc_target_compile { source dest type options } { |
d4213587 | 124 | global tmpdir |
125 | global gluefile wrap_flags | |
912f9e81 | 126 | global GCC_UNDER_TEST |
127 | global TOOL_OPTIONS | |
224d9f3d | 128 | global TEST_ALWAYS_FLAGS |
47583fc8 | 129 | global flags_to_postpone |
130 | global board_info | |
131 | ||
10c41d75 | 132 | if {[target_info needs_status_wrapper] != "" && \ |
133 | [target_info needs_status_wrapper] != "0" && \ | |
134 | [info exists gluefile] } { | |
912f9e81 | 135 | lappend options "libs=${gluefile}" |
136 | lappend options "ldflags=$wrap_flags" | |
137 | } | |
138 | ||
72ad6023 | 139 | global TEST_EXTRA_LIBS |
140 | if [info exists TEST_EXTRA_LIBS] { | |
141 | lappend options "ldflags=$TEST_EXTRA_LIBS" | |
142 | } | |
143 | ||
912f9e81 | 144 | if [target_info exists gcc,stack_size] { |
145 | lappend options "additional_flags=-DSTACK_SIZE=[target_info gcc,stack_size]" | |
146 | } | |
147 | if [target_info exists gcc,no_trampolines] { | |
148 | lappend options "additional_flags=-DNO_TRAMPOLINES" | |
149 | } | |
150 | if [target_info exists gcc,no_label_values] { | |
151 | lappend options "additional_flags=-DNO_LABEL_VALUES" | |
152 | } | |
2a33a595 | 153 | if [target_info exists gcc,signal_suppress] { |
154 | lappend options "additional_flags=-DSIGNAL_SUPPRESS" | |
155 | } | |
224d9f3d | 156 | |
157 | # TEST_ALWAYS_FLAGS are flags that should be passed to every | |
158 | # compilation. They are passed first to allow individual | |
159 | # tests to override them. | |
160 | if [info exists TEST_ALWAYS_FLAGS] { | |
161 | set options [concat "{additional_flags=$TEST_ALWAYS_FLAGS}" $options] | |
162 | } | |
163 | ||
118a91b1 | 164 | # TOOL_OPTIONS must come first, so that it doesn't override testcase |
165 | # specific options. | |
912f9e81 | 166 | if [info exists TOOL_OPTIONS] { |
d4213587 | 167 | set options [concat "{additional_flags=$TOOL_OPTIONS}" $options] |
912f9e81 | 168 | } |
224d9f3d | 169 | |
47583fc8 | 170 | # bind_pic_locally adds -fpie/-fPIE flags to flags_to_postpone and it is |
171 | # appended here to multilib_flags as it can be overridden by the latter | |
172 | # if it was added earlier. After the target_compile, multilib_flags is | |
173 | # restored to its orignal content. | |
174 | set tboard [target_info name] | |
175 | if {[board_info $tboard exists multilib_flags]} { | |
176 | set orig_multilib_flags "[board_info [target_info name] multilib_flags]" | |
177 | append board_info($tboard,multilib_flags) " $flags_to_postpone" | |
178 | } | |
179 | ||
0557b60a | 180 | lappend options "timeout=[timeout_value]" |
912f9e81 | 181 | lappend options "compiler=$GCC_UNDER_TEST" |
176dca07 | 182 | set options [dg-additional-files-options $options $source] |
47583fc8 | 183 | set return_val [target_compile $source $dest $type $options] |
184 | ||
185 | if {[board_info $tboard exists multilib_flags]} { | |
186 | set board_info($tboard,multilib_flags) $orig_multilib_flags | |
187 | set flags_to_postpone "" | |
188 | } | |
189 | ||
190 | return $return_val | |
912f9e81 | 191 | } |
47583fc8 | 192 |