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>

gcc/
	* 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.
This commit is contained in:
Olivier Hainque 2021-11-28 15:21:25 +00:00
parent 0d5db1dd65
commit 6a0f6018ba
6 changed files with 18 additions and 52 deletions

View File

@ -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.
@ -3099,7 +3100,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;
@ -3145,7 +3146,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 \

View File

@ -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) ;;

View File

@ -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 $@

View File

@ -1,28 +0,0 @@
/* 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

View File

@ -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)

View File

@ -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)