From cca3d2b3d40539a32cc3de8be9da9b80ae2591a5 Mon Sep 17 00:00:00 2001
From: Olivier Hainque <hainque@adacore.com>
Date: Sun, 28 Nov 2021 15:21:25 +0000
Subject: [PATCH] Provide vxworks alternate stdint.h during the build

This change arranges to provide the vxworks alternate stdint.h
at build time instead of at install time, so it is used instead
of the system one while building the libraries.

This is a lot more consistent and helps the build on configurations
where the system does not come with stdint.h at all.

The change uses a similar mechanism as the one previsouly introduced
for glimits.h and takes the opportunity to simplify the glimits.h
command to use an automatic variable.

This introduces an indirect dependency on the VxWorks version.h
for vxcrtstuff objects, for which we then need to apply the same
tricks as for libgcc2 regarding include paths (to select the system
header instead of the gcc one).

2021-02-12  Olivier Hainque  <hainque@adacore.com>
            Rasmus Villemoes <rv@rasmusvillemoes.dk>

        * Makefile.in (T_STDINT_GCC_H): New variable, path to
        stdint-gcc.h that a target configuration may override when
        use_gcc_stdint is "provide".
        (stmp-int-hdrs): Depend on it and copy that for
        USE_GCC_INT=provide.
        * config.gcc (vxworks): Revert to use_gcc_stdint=provide.
        * config/t-vxworks (T_STDINT_GCC_H): Define, as vxw-stdint-gcc.h.
        (vxw-stdint-gcc.h): New target, produced from the original
        stdint-gcc.h.
	(vxw-glimits.h): Use an automatic variable to designate the
	first and only prerequisite.
        * config/vxworks/stdint.h: Remove.

        libgcc/
        * config/t-vxworks: Set CRTSTUFF_T_CFLAGS to
        $(LIBGCC2_INCLUDES).
        * config/t-vxworks7: Likewise.
---
 gcc/Makefile.in          |  5 +++--
 gcc/config.gcc           | 11 ++---------
 gcc/config/t-vxworks     | 22 +++++++++-------------
 libgcc/config/t-vxworks  |  2 ++
 libgcc/config/t-vxworks7 |  2 ++
 5 files changed, 18 insertions(+), 24 deletions(-)

diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index a4344d67f44..9ab03742202 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -452,6 +452,7 @@ USER_H_INC_NEXT_POST = @user_headers_inc_next_post@
 
 # Enable target overriding of this fragment, as in config/t-vxworks.
 T_GLIMITS_H = $(srcdir)/glimits.h
+T_STDINT_GCC_H = $(srcdir)/ginclude/stdint-gcc.h
 
 # The GCC to use for compiling crt*.o.
 # Usually the one we just built.
@@ -3095,7 +3096,7 @@ gcov-tool$(exeext): $(GCOV_TOOL_OBJS) $(LIBDEPS)
 # be rebuilt.
 
 # Build the include directories.
-stmp-int-hdrs: $(STMP_FIXINC) $(T_GLIMITS_H) $(USER_H) fixinc_list
+stmp-int-hdrs: $(STMP_FIXINC) $(T_GLIMITS_H) $(T_STDINT_GCC_H) $(USER_H) fixinc_list
 # Copy in the headers provided with gcc.
 #
 # The sed command gets just the last file name component;
@@ -3141,7 +3142,7 @@ stmp-int-hdrs: $(STMP_FIXINC) $(T_GLIMITS_H) $(USER_H) fixinc_list
 	  cp $(srcdir)/ginclude/stdint-wrap.h include/stdint.h; \
 	  chmod a+r include/stdint.h; \
 	elif [ $(USE_GCC_STDINT) = provide ]; then \
-	  cp $(srcdir)/ginclude/stdint-gcc.h include/stdint.h; \
+	  cp $(T_STDINT_GCC_H) include/stdint.h; \
 	  chmod a+r include/stdint.h; \
 	fi
 	set -e; for ml in `cat fixinc_list`; do \
diff --git a/gcc/config.gcc b/gcc/config.gcc
index edd12655c4a..7ab380d89e4 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -1019,16 +1019,9 @@ case ${target} in
   extra_headers="${extra_headers} ../vxworks/math.h ../vxworks/complex.h"
   extra_headers="${extra_headers} ../vxworks/inttypes.h ../vxworks/setjmp.h"
 
-  # We provide stdint.h ...
-
+  # We provide (a tailored version of) stdint.h
   tm_file="${tm_file} vxworks-stdint.h"
-
-  # .. only through the yvals conditional wrapping mentioned above
-  # to abide by the VxWorks 7 expectations.  The final copy is performed
-  # explicitly by a t-vxworks Makefile rule.
-
-  use_gcc_stdint=none
-  extra_headers="${extra_headers} ../../ginclude/stdint-gcc.h"
+  use_gcc_stdint=provide
 
   case ${enable_threads} in
     no) ;;
diff --git a/gcc/config/t-vxworks b/gcc/config/t-vxworks
index 5a06ebe1b87..8441af2a8cf 100644
--- a/gcc/config/t-vxworks
+++ b/gcc/config/t-vxworks
@@ -24,18 +24,6 @@ vxworks-c.o: $(srcdir)/config/vxworks-c.c
 	$(COMPILE) $<
 	$(POSTCOMPILE)
 
-# Arrange to install our stdint.h wrapper, by copying it in the
-# build-time include dir before this include dir is installed and after
-# stmp-int-hdrs removes it (because it was told we don't provide it).
-
-INSTALL_HEADERS += install-stdint.h
-
-install-stdint.h: stmp-int-hdrs
-	cp -p $(srcdir)/config/vxworks/stdint.h include/stdint.h
-	chmod a+r include/stdint.h
-
-$(INSTALL_HEADERS_DIR): install-stdint.h
-
 # Both the kernel and RTP headers provide limits.h.  They embed VxWorks
 # specificities and are dated on some configurations so we both need to
 # provide our own version and make sure the system one gets exposed.
@@ -54,5 +42,13 @@ T_GLIMITS_H = vxw-glimits.h
 
 vxw-glimits.h: $(srcdir)/glimits.h
 	ID=`echo $(BASEVER_c) | sed -e 's/\./_/g'` && \
-	sed -e "s/_LIMITS_H__/_LIMITS_H__$${ID}_/" < $(srcdir)/glimits.h > $@T
+	sed -e "s/_LIMITS_H__/_LIMITS_H__$${ID}_/" < $< > $@T
+	mv $@T $@
+
+# Arrange to "provide" a tailored version of stdint-gcc.h
+
+T_STDINT_GCC_H = vxw-stdint-gcc.h
+
+vxw-stdint-gcc.h: $(srcdir)/ginclude/stdint-gcc.h
+	sed -e "/#define _GCC_STDINT_H/ a #include <_yvals.h>" < $< > $@T
 	mv $@T $@
diff --git a/libgcc/config/t-vxworks b/libgcc/config/t-vxworks
index b4bb85bff08..5f7ced8b561 100644
--- a/libgcc/config/t-vxworks
+++ b/libgcc/config/t-vxworks
@@ -17,3 +17,5 @@ LIBGCC2_INCLUDES = -nostdinc -I. \
      */mrtp*) echo -I$(WIND_USR)/h -I$(WIND_USR)/h/wrn/coreip ;; \
      *) echo -I$(WIND_BASE)/target/h -I$(WIND_BASE)/target/h/wrn/coreip ;; \
    esac`
+
+CRTSTUFF_T_CFLAGS = $(LIBGCC2_INCLUDES)
diff --git a/libgcc/config/t-vxworks7 b/libgcc/config/t-vxworks7
index 6ddd3e84f33..180784bf3a1 100644
--- a/libgcc/config/t-vxworks7
+++ b/libgcc/config/t-vxworks7
@@ -18,3 +18,5 @@ LIBGCC2_INCLUDES = -nostdinc -I. \
       */mrtp*) echo -I$(VSB_DIR)/usr/h/public -I$(VSB_DIR)/usr/h ;; \
       *) echo -I$(VSB_DIR)/krnl/h/system -I$(VSB_DIR)/krnl/h/public ;; \
    esac`
+
+CRTSTUFF_T_CFLAGS = $(LIBGCC2_INCLUDES)
-- 
2.25.1

