Commit 99b1b1fa by Martin Liska Committed by Martin Liska

Extend locations where to seach for Fortran pre-include.

2019-01-16  Martin Liska  <mliska@suse.cz>

	* Makefile.in: Set TOOL_INCLUDE_DIR and NATIVE_SYSTEM_HEADER_DIR
	for GCC driver.
	* config/gnu-user.h (TARGET_F951_OPTIONS): Add 'finclude%s/' as
	a new argument.
	* gcc.c (add_sysrooted_hdrs_prefix): New function.
	(path_prefix_reset): Move up in the source file.
	(find_fortran_preinclude_file): Make complex search for the
	fortran header files.

From-SVN: r267967
parent 0684a816
2019-01-16 Martin Liska <mliska@suse.cz>
* Makefile.in: Set TOOL_INCLUDE_DIR and NATIVE_SYSTEM_HEADER_DIR
for GCC driver.
* config/gnu-user.h (TARGET_F951_OPTIONS): Add 'finclude%s/' as
a new argument.
* gcc.c (add_sysrooted_hdrs_prefix): New function.
(path_prefix_reset): Move up in the source file.
(find_fortran_preinclude_file): Make complex search for the
fortran header files.
2019-01-15 Nikhil Benesch <nikhil.benesch@gmail.com> 2019-01-15 Nikhil Benesch <nikhil.benesch@gmail.com>
* godump.c (go_output_typedef): When outputting a typedef, refer * godump.c (go_output_typedef): When outputting a typedef, refer
......
...@@ -2172,7 +2172,9 @@ DRIVER_DEFINES = \ ...@@ -2172,7 +2172,9 @@ DRIVER_DEFINES = \
@TARGET_SYSTEM_ROOT_DEFINE@ \ @TARGET_SYSTEM_ROOT_DEFINE@ \
$(VALGRIND_DRIVER_DEFINES) \ $(VALGRIND_DRIVER_DEFINES) \
$(if $(SHLIB),$(if $(filter yes,@enable_shared@),-DENABLE_SHARED_LIBGCC)) \ $(if $(SHLIB),$(if $(filter yes,@enable_shared@),-DENABLE_SHARED_LIBGCC)) \
-DCONFIGURE_SPECS="\"@CONFIGURE_SPECS@\"" -DCONFIGURE_SPECS="\"@CONFIGURE_SPECS@\"" \
-DTOOL_INCLUDE_DIR=\"$(gcc_tooldir)/include\" \
-DNATIVE_SYSTEM_HEADER_DIR=\"$(NATIVE_SYSTEM_HEADER_DIR)\"
CFLAGS-gcc.o += $(DRIVER_DEFINES) -DBASEVER=$(BASEVER_s) CFLAGS-gcc.o += $(DRIVER_DEFINES) -DBASEVER=$(BASEVER_s)
gcc.o: $(BASEVER) gcc.o: $(BASEVER)
......
...@@ -151,4 +151,4 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see ...@@ -151,4 +151,4 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#undef TARGET_F951_OPTIONS #undef TARGET_F951_OPTIONS
#define TARGET_F951_OPTIONS "%{!nostdinc:\ #define TARGET_F951_OPTIONS "%{!nostdinc:\
%:fortran-preinclude-file(-fpre-include= math-vector-fortran.h)}" %:fortran-preinclude-file(-fpre-include= math-vector-fortran.h finclude%s/)}"
...@@ -2977,6 +2977,44 @@ add_sysrooted_prefix (struct path_prefix *pprefix, const char *prefix, ...@@ -2977,6 +2977,44 @@ add_sysrooted_prefix (struct path_prefix *pprefix, const char *prefix,
require_machine_suffix, os_multilib); require_machine_suffix, os_multilib);
} }
/* Same as add_prefix, but prepending target_sysroot_hdrs_suffix to prefix. */
static void
add_sysrooted_hdrs_prefix (struct path_prefix *pprefix, const char *prefix,
const char *component,
/* enum prefix_priority */ int priority,
int require_machine_suffix, int os_multilib)
{
if (!IS_ABSOLUTE_PATH (prefix))
fatal_error (input_location, "system path %qs is not absolute", prefix);
if (target_system_root)
{
char *sysroot_no_trailing_dir_separator = xstrdup (target_system_root);
size_t sysroot_len = strlen (target_system_root);
if (sysroot_len > 0
&& target_system_root[sysroot_len - 1] == DIR_SEPARATOR)
sysroot_no_trailing_dir_separator[sysroot_len - 1] = '\0';
if (target_sysroot_hdrs_suffix)
prefix = concat (sysroot_no_trailing_dir_separator,
target_sysroot_hdrs_suffix, prefix, NULL);
else
prefix = concat (sysroot_no_trailing_dir_separator, prefix, NULL);
free (sysroot_no_trailing_dir_separator);
/* We have to override this because GCC's notion of sysroot
moves along with GCC. */
component = "GCC";
}
add_prefix (pprefix, prefix, component, priority,
require_machine_suffix, os_multilib);
}
/* Execute the command specified by the arguments on the current line of spec. /* Execute the command specified by the arguments on the current line of spec.
When using pipes, this includes several piped-together commands When using pipes, this includes several piped-together commands
with `|' between them. with `|' between them.
...@@ -9896,20 +9934,61 @@ debug_level_greater_than_spec_func (int argc, const char **argv) ...@@ -9896,20 +9934,61 @@ debug_level_greater_than_spec_func (int argc, const char **argv)
return NULL; return NULL;
} }
/* The function takes 2 arguments: OPTION name and file name. static void
path_prefix_reset (path_prefix *prefix)
{
struct prefix_list *iter, *next;
iter = prefix->plist;
while (iter)
{
next = iter->next;
free (const_cast <char *> (iter->prefix));
XDELETE (iter);
iter = next;
}
prefix->plist = 0;
prefix->max_len = 0;
}
/* The function takes 3 arguments: OPTION name, file name and location
where we search for Fortran modules.
When the FILE is found by find_file, return OPTION=path_to_file. */ When the FILE is found by find_file, return OPTION=path_to_file. */
static const char * static const char *
find_fortran_preinclude_file (int argc, const char **argv) find_fortran_preinclude_file (int argc, const char **argv)
{ {
if (argc != 2) char *result = NULL;
if (argc != 3)
return NULL; return NULL;
struct path_prefix prefixes = { 0, 0, "preinclude" };
/* Search first for 'finclude' folder location for a header file
installed by the compiler (similar to omp_lib.h). */
add_prefix (&prefixes, argv[2], NULL, 0, 0, false);
#ifdef TOOL_INCLUDE_DIR
/* Then search: <prefix>/<target>/<include>/finclude */
add_prefix (&prefixes, TOOL_INCLUDE_DIR "/finclude/",
NULL, 0, 0, false);
#endif
#ifdef NATIVE_SYSTEM_HEADER_DIR
/* Then search: <sysroot>/usr/include/finclude/<multilib> */
add_sysrooted_hdrs_prefix (&prefixes, NATIVE_SYSTEM_HEADER_DIR "/finclude/",
NULL, 0, 0, false);
#endif
const char *path = find_a_file (&include_prefixes, argv[1], R_OK, true); const char *path = find_a_file (&include_prefixes, argv[1], R_OK, true);
if (path != NULL) if (path != NULL)
return concat (argv[0], path, NULL); result = concat (argv[0], path, NULL);
else
{
path = find_a_file (&prefixes, argv[1], R_OK, true);
if (path != NULL)
result = concat (argv[0], path, NULL);
}
return NULL; path_prefix_reset (&prefixes);
return result;
} }
...@@ -9961,22 +10040,6 @@ convert_white_space (char *orig) ...@@ -9961,22 +10040,6 @@ convert_white_space (char *orig)
return orig; return orig;
} }
static void
path_prefix_reset (path_prefix *prefix)
{
struct prefix_list *iter, *next;
iter = prefix->plist;
while (iter)
{
next = iter->next;
free (const_cast <char *> (iter->prefix));
XDELETE (iter);
iter = next;
}
prefix->plist = 0;
prefix->max_len = 0;
}
/* Restore all state within gcc.c to the initial state, so that the driver /* Restore all state within gcc.c to the initial state, so that the driver
code can be safely re-run in-process. code can be safely re-run in-process.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment