Arrange to preinclude yvals.h ahead of stdint on VxWorks 7
diff mbox series

Message ID
State New
Headers show
  • Arrange to preinclude yvals.h ahead of stdint on VxWorks 7
Related show

Commit Message

Olivier Hainque Dec. 13, 2019, 4:59 p.m. UTC
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.

Tested in accordance with the description in

Committing soon to mainline.


2019-12-13  Olivier Hainque  <>

	* 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.
gcc/config.gcc              | 14 +++++++++++---
 gcc/config/t-vxworks        | 12 ++++++++++++
 gcc/config/vxworks/stdint.h | 28 ++++++++++++++++++++++++++++
 3 files changed, 51 insertions(+), 3 deletions(-)
 create mode 100644 gcc/config/vxworks/stdint.h

diff mbox series

diff --git a/gcc/config.gcc b/gcc/config.gcc
index 4790247a868..ca485af9619 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -962,9 +962,6 @@  case ${target} in
   extra_headers="${extra_headers} ../vxworks/vxworks-predef.h"
-  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' ;;
diff --git a/gcc/config/t-vxworks b/gcc/config/t-vxworks
index ce30338ed13..4f9646dd961 100644
--- a/gcc/config/t-vxworks
+++ b/gcc/config/t-vxworks
@@ -24,6 +24,18 @@  vxworks-c.o: $(srcdir)/config/vxworks-c.c
 	$(COMPILE) $<
+# 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
index 00000000000..5e0dbdfaabd
--- /dev/null
+++ b/gcc/config/vxworks/stdint.h
@@ -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
+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
+<>.  */
+#ifndef __GCC_STDINT_H
+#define __GCC_STDINT_H
+#include <_yvals.h>
+#include <stdint-gcc.h>