mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-11-23 02:44:18 +08:00
d364c4ced8
We suffer from an inconsistency in the names of uninstalled gnattools executables in cross-compiler configurations. The cause is a recipe we have: ada.all.cross: for tool in $(ADA_TOOLS) ; do \ if [ -f $$tool$(exeext) ] ; \ then \ $(MV) $$tool$(exeext) $$tool-cross$(exeext); \ fi; \ done the intent of which is to give the names of gnattools executables the '-cross' suffix, consistently with the compiler drivers: 'gcc-cross', 'g++-cross', etc. A problem with the recipe is that this 'make' target is called too early in the build process, before gnattools have been made. Consequently no renames happen and owing to that they are conditional on the presence of the individual executables the recipe succeeds doing nothing. However if a target is requested later on such as 'make pdf' that does not cause gnattools executables to be rebuilt, then 'ada.all.cross' does succeed in renaming the executables already present in the build tree. Then if the 'gnat' testsuite is run later on which expects non-suffixed 'gnatmake' executable, it does not find the 'gnatmake-cross' executable in the build tree and may either catastrophically fail or incorrectly use a system-installed copy of 'gnatmake'. Of course if a target is requested such as `make all' that does cause gnattools executables to be rebuilt, then both suffixed and non-suffixed uninstalled executables result. Fix the problem by moving the renaming of gnattools to a separate 'make' recipe, pasted into a new 'gnattools-cross-mv' target and the existing legacy 'cross-gnattools' target. Then invoke the new target explicitly from the 'gnattools-cross' recipe in gnattools/. Update the test harness accordingly, so that suffixed gnattools are used in cross-compilation testsuite runs. gcc/ada/ * gcc-interface/Make-lang.in (ada.all.cross): Move recipe to... (GNATTOOLS_CROSS_MV): ... this new variable. (cross-gnattools): Paste it here. (gnattools-cross-mv): New target. gnattools/ * Makefile.in (gnattools-cross): Also build 'gnattools-cross-mv' in GCC_DIR. gcc/testsuite/ * lib/gnat.exp (local_find_gnatmake, find_gnatclean): Use '-cross' suffix where testing a cross-compiler.
303 lines
8.3 KiB
Makefile
303 lines
8.3 KiB
Makefile
# Makefile for gnattools
|
|
# Copyright 2003, 2004, 2009, 2010 Free Software Foundation, Inc.
|
|
#
|
|
# This file 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 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program 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.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; see the file COPYING3. If not see
|
|
# <http://www.gnu.org/licenses/>.
|
|
|
|
# Default target; must be first.
|
|
all: gnattools
|
|
|
|
# Standard autoconf-set variables.
|
|
SHELL = @SHELL@
|
|
srcdir = @srcdir@
|
|
libdir = @libdir@
|
|
build = @build@
|
|
target = @target@
|
|
host = @host@
|
|
prefix = @prefix@
|
|
INSTALL = @INSTALL@
|
|
INSTALL_DATA = @INSTALL_DATA@
|
|
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
|
|
|
# Nonstandard autoconf-set variables.
|
|
LN_S=@LN_S@
|
|
target_noncanonical=@target_noncanonical@
|
|
host_noncanonical=@host_noncanonical@
|
|
|
|
# Variables for the user (or the top level) to override.
|
|
exeext = @EXEEXT@
|
|
objext=.o
|
|
TRACE=no
|
|
ADA_FOR_BUILD=
|
|
ADA_FOR_TARGET=
|
|
LDFLAGS=
|
|
PWD_COMMAND = $${PWDCMD-pwd}
|
|
|
|
# The tedious process of getting CFLAGS right.
|
|
CFLAGS=-g
|
|
GCC_WARN_CFLAGS = -W -Wall
|
|
WARN_CFLAGS = @warn_cflags@
|
|
|
|
ADA_CFLAGS=@ADA_CFLAGS@
|
|
|
|
# Variables for gnattools.
|
|
ADAFLAGS= -gnatpg -gnata
|
|
|
|
# For finding the GCC build dir, which is used far too much
|
|
GCC_DIR=../gcc
|
|
|
|
# Full path to top source directory
|
|
ftop_srcdir := $(shell cd $(srcdir)/..;${PWD_COMMAND})
|
|
|
|
# Absolute srcdir for gcc (why do we want absolute? I dunno)
|
|
fsrcdir := $(shell cd $(srcdir)/../gcc/; ${PWD_COMMAND})
|
|
|
|
# Useful "subroutines" for the excess includes
|
|
INCLUDES_FOR_SUBDIR = -iquote . -iquote .. -iquote ../.. \
|
|
-iquote $(fsrcdir)/ada -iquote $(fsrcdir)/config \
|
|
-iquote $(fsrcdir) -I$(ftop_srcdir)/include
|
|
ADA_INCLUDES_FOR_SUBDIR = -I. -I$(fsrcdir)/ada
|
|
|
|
CXX_LFLAGS = \
|
|
-B../../../$(target_noncanonical)/libstdc++-v3/src/.libs \
|
|
-B../../../$(target_noncanonical)/libstdc++-v3/libsupc++/.libs \
|
|
-L../../../$(target_noncanonical)/libstdc++-v3/src/.libs \
|
|
-L../../../$(target_noncanonical)/libstdc++-v3/libsupc++/.libs
|
|
|
|
# Variables for gnattools, native
|
|
TOOLS_FLAGS_TO_PASS_NATIVE= \
|
|
"CC=../../xgcc -B../../" \
|
|
"CXX=../../xg++ -B../../ $(CXX_LFLAGS)" \
|
|
"CFLAGS=$(CFLAGS) $(WARN_CFLAGS)" \
|
|
"LDFLAGS=$(LDFLAGS)" \
|
|
"ADAFLAGS=$(ADAFLAGS)" \
|
|
"ADA_CFLAGS=$(ADA_CFLAGS)" \
|
|
"INCLUDES=$(INCLUDES_FOR_SUBDIR)" \
|
|
"ADA_INCLUDES=-I- -I../rts $(ADA_INCLUDES_FOR_SUBDIR)"\
|
|
"exeext=$(exeext)" \
|
|
"fsrcdir=$(fsrcdir)" \
|
|
"srcdir=$(fsrcdir)" \
|
|
"GNATMAKE=../../gnatmake" \
|
|
"GNATLINK=../../gnatlink" \
|
|
"GNATBIND=../../gnatbind" \
|
|
"TOOLSCASE=native"
|
|
|
|
# Variables for regnattools
|
|
TOOLS_FLAGS_TO_PASS_RE= \
|
|
"CC=../../xgcc -B../../" \
|
|
"CXX=../../xg++ -B../../ $(CXX_LFLAGS)" \
|
|
"CFLAGS=$(CFLAGS)" \
|
|
"LDFLAGS=$(LDFLAGS)" \
|
|
"ADAFLAGS=$(ADAFLAGS)" \
|
|
"ADA_CFLAGS=$(ADA_CFLAGS)" \
|
|
"INCLUDES=$(INCLUDES_FOR_SUBDIR)" \
|
|
"ADA_INCLUDES=-I../rts $(ADA_INCLUDES_FOR_SUBDIR)"\
|
|
"exeext=$(exeext)" \
|
|
"fsrcdir=$(fsrcdir)" \
|
|
"srcdir=$(fsrcdir)" \
|
|
"GNATMAKE=../../gnatmake" \
|
|
"GNATLINK=../../gnatlink" \
|
|
"GNATBIND=../../gnatbind" \
|
|
"TOOLSCASE=cross"
|
|
|
|
# Variables for gnattools, cross
|
|
ifeq ($(build), $(host))
|
|
GNATMAKE_FOR_HOST=gnatmake
|
|
GNATLINK_FOR_HOST=gnatlink
|
|
GNATBIND_FOR_HOST=gnatbind
|
|
GNATLS_FOR_HOST=gnatls
|
|
else
|
|
GNATMAKE_FOR_HOST=$(host_noncanonical)-gnatmake
|
|
GNATLINK_FOR_HOST=$(host_noncanonical)-gnatlink
|
|
GNATBIND_FOR_HOST=$(host_noncanonical)-gnatbind
|
|
GNATLS_FOR_HOST=$(host_noncanonical)-gnatls
|
|
endif
|
|
|
|
# Put the host RTS dir first in the PATH to hide the default runtime
|
|
# files that are among the sources
|
|
RTS_DIR:=$(strip $(subst \,/,$(shell $(GNATLS_FOR_HOST) -v | grep adalib )))
|
|
|
|
TOOLS_FLAGS_TO_PASS_CROSS= \
|
|
"CC=$(CC)" \
|
|
"CXX=$(CXX)" \
|
|
"CFLAGS=$(CFLAGS) $(WARN_CFLAGS)" \
|
|
"LDFLAGS=$(LDFLAGS)" \
|
|
"ADAFLAGS=$(ADAFLAGS)" \
|
|
"ADA_CFLAGS=$(ADA_CFLAGS)" \
|
|
"INCLUDES=$(INCLUDES_FOR_SUBDIR)" \
|
|
"ADA_INCLUDES=-I$(RTS_DIR)/../adainclude -I$(RTS_DIR) $(ADA_INCLUDES_FOR_SUBDIR)" \
|
|
"exeext=$(exeext)" \
|
|
"fsrcdir=$(fsrcdir)" \
|
|
"srcdir=$(fsrcdir)" \
|
|
"GNATMAKE=$(GNATMAKE_FOR_HOST)" \
|
|
"GNATLINK=$(GNATLINK_FOR_HOST)" \
|
|
"GNATBIND=$(GNATBIND_FOR_HOST)" \
|
|
"TOOLSCASE=cross" \
|
|
"LIBGNAT="
|
|
|
|
# File lists
|
|
# ----------
|
|
|
|
# File associations set by configure
|
|
EXTRA_GNATTOOLS = @EXTRA_GNATTOOLS@
|
|
TOOLS_TARGET_PAIRS = @TOOLS_TARGET_PAIRS@
|
|
|
|
# Makefile targets
|
|
# ----------------
|
|
|
|
.PHONY: gnattools gnattools-native gnattools-cross regnattools
|
|
gnattools: @default_gnattools_target@
|
|
|
|
# Sanity check
|
|
$(GCC_DIR)/stamp-gnatlib-rts:
|
|
@if [ ! -f $(GCC_DIR)/stamp-gnatlib-rts ] ; \
|
|
then \
|
|
echo "Cannot build gnattools while gnatlib is out of date or unbuilt" ; \
|
|
false; \
|
|
else \
|
|
true; \
|
|
fi
|
|
|
|
|
|
# Build directory for the tools. We first need to copy the generated files,
|
|
# then the target-dependent sources using the same mechanism as for gnatlib.
|
|
|
|
GENERATED_FILES_FOR_TOOLS = \
|
|
einfo-entities.ads einfo-entities.adb sdefault.adb seinfo.ads \
|
|
sinfo-nodes.ads sinfo-nodes.adb snames.ads snames.adb
|
|
|
|
$(GCC_DIR)/stamp-tools:
|
|
-rm -rf $(GCC_DIR)/ada/tools
|
|
-mkdir -p $(GCC_DIR)/ada/tools
|
|
-(cd $(GCC_DIR)/ada/tools; $(foreach FILE,$(GENERATED_FILES_FOR_TOOLS), \
|
|
$(LN_S) ../$(FILE) $(FILE);))
|
|
-$(foreach PAIR,$(TOOLS_TARGET_PAIRS), \
|
|
rm -f $(GCC_DIR)/ada/tools/$(word 1,$(subst <, ,$(PAIR)));\
|
|
$(LN_S) $(fsrcdir)/ada/$(word 2,$(subst <, ,$(PAIR))) \
|
|
$(GCC_DIR)/ada/tools/$(word 1,$(subst <, ,$(PAIR)));)
|
|
touch $(GCC_DIR)/stamp-tools
|
|
|
|
# gnatmake/link tools cannot always be built with gnatmake/link for bootstrap
|
|
# reasons: gnatmake should be built with a recent compiler, a recent compiler
|
|
# may not generate ALI files compatible with an old gnatmake so it is important
|
|
# to be able to build gnatmake without a version of gnatmake around. Once
|
|
# everything has been compiled once, gnatmake can be recompiled with itself
|
|
# (see target regnattools)
|
|
gnattools-native: $(GCC_DIR)/stamp-tools $(GCC_DIR)/stamp-gnatlib-rts
|
|
# gnattools1
|
|
$(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
|
|
$(TOOLS_FLAGS_TO_PASS_NATIVE) \
|
|
../../gnatmake$(exeext) ../../gnatlink$(exeext)
|
|
# gnattools2
|
|
$(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
|
|
$(TOOLS_FLAGS_TO_PASS_NATIVE) common-tools
|
|
|
|
# gnatmake/link can be built with recent gnatmake/link if they are available.
|
|
# This is especially convenient for building cross tools or for rebuilding
|
|
# the tools when the original bootstrap has already be done.
|
|
regnattools: $(GCC_DIR)/stamp-gnatlib-rts
|
|
# gnattools1-re
|
|
$(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
|
|
$(TOOLS_FLAGS_TO_PASS_RE) INCLUDES="" \
|
|
gnatmake-re gnatlink-re
|
|
# gnattools2
|
|
$(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
|
|
$(TOOLS_FLAGS_TO_PASS_NATIVE) common-tools
|
|
|
|
gnattools-cross: $(GCC_DIR)/stamp-tools
|
|
# gnattools1-re
|
|
$(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
|
|
$(TOOLS_FLAGS_TO_PASS_CROSS) INCLUDES="" \
|
|
gnatmake-re gnatlink-re
|
|
# gnattools2
|
|
$(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
|
|
$(TOOLS_FLAGS_TO_PASS_CROSS) common-tools
|
|
$(MAKE) -C $(GCC_DIR) gnattools-cross-mv
|
|
|
|
# Other
|
|
# -----
|
|
|
|
# Check uninstalled version.
|
|
check:
|
|
|
|
# Check installed version.
|
|
installcheck:
|
|
|
|
# Build info (none here).
|
|
info:
|
|
|
|
# Build DVI (none here).
|
|
dvi:
|
|
|
|
# Build PDF (none here).
|
|
pdf:
|
|
|
|
# Build HTML (none here).
|
|
html:
|
|
|
|
.PHONY: check installcheck info dvi pdf html
|
|
|
|
# Build TAGS (none here).
|
|
TAGS:
|
|
|
|
# Installation rules.
|
|
install:
|
|
|
|
install-strip: install
|
|
|
|
install-info:
|
|
|
|
install-pdf:
|
|
|
|
install-dvi:
|
|
|
|
install-html:
|
|
|
|
.PHONY: install install-strip install-info install-pdf install-dvi install-html
|
|
|
|
# Cleaning rules.
|
|
mostlyclean:
|
|
|
|
clean:
|
|
|
|
distclean:
|
|
$(RM) Makefile config.status config.log config.cache
|
|
|
|
maintainer-clean:
|
|
|
|
.PHONY: mostlyclean clean distclean maintainer-clean
|
|
|
|
# Rules for rebuilding this Makefile.
|
|
Makefile: $(srcdir)/Makefile.in config.status
|
|
CONFIG_FILES=$@ ; \
|
|
CONFIG_HEADERS= ; \
|
|
$(SHELL) ./config.status
|
|
|
|
config.status: $(srcdir)/configure
|
|
$(SHELL) ./config.status --recheck
|
|
|
|
AUTOCONF = autoconf
|
|
configure_deps = \
|
|
$(srcdir)/configure.ac \
|
|
$(srcdir)/../config/acx.m4 \
|
|
$(srcdir)/../config/override.m4
|
|
|
|
$(srcdir)/configure: @MAINT@ $(configure_deps)
|
|
cd $(srcdir) && $(AUTOCONF)
|
|
|
|
# Don't export variables to the environment, in order to not confuse
|
|
# configure.
|
|
.NOEXPORT:
|
|
|