Arrange to preinclude yvals.h ahead of stdint on VxWorks 7
authorOlivier Hainque <hainque@adacore.com>
Mon, 30 Dec 2019 22:16:37 +0000 (22:16 +0000)
committerOlivier Hainque <hainque@gcc.gnu.org>
Mon, 30 Dec 2019 22:16:37 +0000 (22:16 +0000)
On Vxworks 7, includers of stdint.h (which we currently "provide")
need yvals.h to have been included ahead.

Instead of altering the common stdint-gcc.h with unpleasant
vxworks specific bits to do that, we arrange to provide stdint-gcc.h
on its own along with a stdint.h wrapper which preincludes yvals.h
on vx7 then includes stdint-gcc.h.

2019-12-30  Olivier Hainque  <hainque@adacore.com>

* config/vxworks/stdint.h: New file.  Include _yvals.h
then stdint-gcc.h.
* config/t-vxworks: Arrange to install the stdint.h wrapper.
* config.gcc (*-*-vxworks*): Add stdint-gcc.h to $extra_headers
so it gets copied.  Set use_gcc_stdint to request _not_ crafting
stdint.h through the common Makefile rules.

From-SVN: r279791

gcc/ChangeLog
gcc/config.gcc
gcc/config/t-vxworks
gcc/config/vxworks/stdint.h [new file with mode: 0644]

index 54f99916ae348af5d9dd8402b0c048e6a4f0f7a8..03e3f80361697357e71284f1a586031856a127e3 100644 (file)
@@ -1,3 +1,12 @@
+2019-12-30  Olivier Hainque  <hainque@adacore.com>
+
+       * config/vxworks/stdint.h: New file.  Include _yvals.h
+       then stdint-gcc.h.
+       * config/t-vxworks: Arrange to install the stdint.h wrapper.
+       * config.gcc (*-*-vxworks*): Add stdint-gcc.h to $extra_headers
+       so it gets copied.  Set use_gcc_stdint to request _not_ crafting
+       stdint.h through the common Makefile rules.
+
 2019-12-30  Olivier Hainque  <hainque@adacore.com>
 
        * config/vxworks/_yvals.h: New file.
index 42e4251a3a624196a5ff2eccdd4730ec6be715ee..8c2ff9a0def6b34947ea70345d4d991833377bae 100644 (file)
@@ -962,9 +962,6 @@ case ${target} in
   extra_headers="${extra_headers} ../vxworks/vxworks-predef.h"
   target_has_targetcm="yes"
 
-  use_gcc_stdint=provide
-  tm_file="${tm_file} vxworks-stdint.h"
-
   # This private header exposes a consistent interface for checks on
   # the VxWorks version our runtime header files need to perform, based on
   # what the system headers adverstise:
@@ -982,6 +979,17 @@ 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 ...
+
+  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"
+
   case ${enable_threads} in
     no) ;;
     "" | yes | vxworks) thread_file='vxworks' ;;
index ce30338ed135f3d9f9239300b6a87451e76e077b..4f9646dd9615434a6c24689adb5f64e801f03c1a 100644 (file)
@@ -24,6 +24,18 @@ 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.
diff --git a/gcc/config/vxworks/stdint.h b/gcc/config/vxworks/stdint.h
new file mode 100644 (file)
index 0000000..5e0dbdf
--- /dev/null
@@ -0,0 +1,28 @@
+/* This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef __GCC_STDINT_H
+#define __GCC_STDINT_H
+
+#include <_yvals.h>
+#include <stdint-gcc.h>
+
+#endif