srcdir = @srcdir@
build = @build@
target = @target@
-enable_shared = @enable_shared@
+prefix = @prefix@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
# Nonstandard autoconf-set variables.
+enable_shared = @enable_shared@
+LN_S=@LN_S@
+target_noncanonical=@target_noncanonical@
-FLAGS_TO_PASS =
+# Variables for the user (or the top level) to override.
+objext=.o
+GNATLIBFLAGS= -W -Wall -gnatpg
+THREAD_KIND=native
+TRACE=no
+GNATLIBLDFLAGS=
+ADA_FOR_BUILD=
+ADA_FOR_TARGET=
+LDFLAGS=
+STAGE_PREFIX=
-GNATLIB = gnatlib
+# The tedious process of getting CFLAGS right.
+CFLAGS=-g
+LOOSE_WARN = -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes
+GCC_WARN_CFLAGS = $(LOOSE_WARN) $(NOCOMMON_FLAG)
-ifeq ($(build),$(target))
- GNATTOOLS = gnattools
+ADA_CFLAGS=
+T_ADA_CFLAGS=
+# HPPA is literally the only target which sets X_ADA_CFLAGS
+X_ADA_CFLAGS=@x_ada_cflags@
+ALL_ADA_CFLAGS=$(X_ADA_CFLAGS) $(T_ADA_CFLAGS) $(ADA_CFLAGS)
- ifeq ($(enable_shared),yes)
- GNATLIB = gnatlib-shared
- endif
+# Variables for gnattools.
+ADAFLAGS= -gnatpg -gnata
+ADA_INCLUDE_DIR = $(libsubdir)/adainclude
+ADA_RTL_OBJ_DIR = $(libsubdir)/adalib
-else
- GNATTOOLS = cross-gnattools ada.all.cross
+# For finding the GCC build dir, which is used far too much
+GCC_DIR=../../gcc
+# Include fragment generated by GCC configure.
+include $(GCC_DIR)/libada-mk
+# Variables based on those gleaned from the GCC makefile. :-P
+libsubdir=$(libdir)/gcc/$(target_noncanonical)/$(gcc_version)
+
+TARGET_LIBGCC2_CFLAGS=
+GNATLIBCFLAGS= -g -O2
+# Get target-specific overrides for TARGET_LIBGCC2_CFLAGS
+# and possibly GNATLIBCFLAGS. Currently this uses files
+# in gcc/config. The 'subst' call is used to rerelativize them
+# from their gcc locations. This is hackery, but there isn't
+# yet a better way to do this.
+tmake_file=$(subst /config,/../gcc/config,$(gcc_tmake_file))
+ifneq ($(tmake_file),)
+include $(tmake_file)
endif
+# Get possible host-specific override for libsubdir (ick).
+xmake_file=$(subst /config,/../gcc/config,$(gcc_xmake_file))
+ifneq ($(xmake_file),)
+include $(xmake_file)
+endif
+
+FLAGS_TO_PASS = \
+ "MAKEOVERRIDES=" \
+ "LDFLAGS=$(LDFLAGS)" \
+ "LN_S=$(LN_S)" \
+ "SHELL=$(SHELL)" \
+ "exeext=$(exeext)" \
+ "objext=$(objext)" \
+ "prefix=$(prefix)" \
+ "STAGE_PREFIX=$(STAGE_PREFIX)" \
+ "CC=$(cc_set_by_configure)" \
+ "CFLAGS=$(CFLAGS) $(WARN_CFLAGS)"
+
+ADA_FLAGS_TO_PASS = \
+ "ADA_FOR_BUILD=$(ADA_FOR_BUILD)" \
+ "ADA_INCLUDE_DIR=$(ADA_INCLUDE_DIR)" \
+ "ADA_RTL_OBJ_DIR=$(ADA_RTL_OBJ_DIR)" \
+ "ADAFLAGS=$(ADAFLAGS)" \
+ "ADA_FOR_TARGET=$(ADA_FOR_TARGET)" \
+ "INSTALL=$(INSTALL)" \
+ "INSTALL_DATA=$(INSTALL_DATA)" \
+ "INSTALL_PROGRAM=$(INSTALL_PROGRAM)"
+
+ADA_TOOLS_FLAGS_TO_PASS=\
+ "CC=../../xgcc -B../../" \
+ "CFLAGS=$(CFLAGS)" \
+ "exeext=$(exeext)" \
+ "ADAFLAGS=$(ADAFLAGS)" \
+ "ADA_INCLUDES=-I../rts" \
+ "GNATMAKE=../../gnatmake" \
+ "GNATLINK=../../gnatlink" \
+ "GNATBIND=../../gnatbind"
+
# Rules to build gnatlib.
-gnatlib:
- $(MAKE) -C ../../gcc $(FLAGS_TO_PASS) $(GNATLIB)
+.PHONY: gnatlib gnatlib-plain gnatlib-sjlj gnatlib-zcx gnatlib-shared
+gnatlib: @default_gnatlib_target@
+
+gnatlib-plain gnatlib-sjlj gnatlib-zcx gnatlib-shared:
+ $(MAKE) -C $(GCC_DIR)/ada $(FLAGS_TO_PASS) \
+ GNATLIBFLAGS="$(GNATLIBFLAGS)" \
+ GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
+ TARGET_LIBGCC2_CFLAGS="$(TARGET_LIBGCC2_CFLAGS)" \
+ THREAD_KIND="$(THREAD_KIND)" \
+ TRACE="$(TRACE)" $@
+
+.PHONY: rts-zfp rts-ravenscar
+rts-zfp rts-ravenscar:
+ $(MAKE) -C $(GCC_DIR)/ada $(FLAGS_TO_PASS) \
+ GNATMAKE=../gnatmake-cross $@
# Rules to build gnattools.
-gnattools: gnatlib
- $(MAKE) -C ../../gcc $(FLAGS_TO_PASS) $(GNATTOOLS)
+# For cross builds of gnattools,
+# 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 -v | grep adalib )))
+
+ifeq ($(build),$(target))
+ GNATTOOLS = gnattools-native
+else
+ GNATTOOLS = gnattools-cross
+endif
+
+.PHONY: gnattools regnattools
+gnattools: $(GNATTOOLS)
+
+gnattools-native: gnatlib
+ $(MAKE) -C $(GCC_DIR)/ada $(FLAGS_TO_PASS) $(ADA_FLAGS_TO_PASS) \
+ ADA_INCLUDES="-I- -I../rts" \
+ CC="../../xgcc -B../../" STAGE_PREFIX=../../ gnattools1
+ $(MAKE) -C $(GCC_DIR)/ada $(ADA_TOOLS_FLAGS_TO_PASS) gnattools2
+ $(MAKE) -C $(GCC_DIR)/ada $(ADA_TOOLS_FLAGS_TO_PASS) gnattools3
+
+regnattools:
+ $(MAKE) -C $(GCC_DIR)/ada $(ADA_TOOLS_FLAGS_TO_PASS) gnattools1-re
+ $(MAKE) -C $(GCC_DIR)/ada $(ADA_TOOLS_FLAGS_TO_PASS) gnattools2
+ $(MAKE) -C $(GCC_DIR)/ada $(ADA_TOOLS_FLAGS_TO_PASS) gnattools3
+
+gnattools-cross: gnatlib
+ $(MAKE) -C $(GCC_DIR)/ada $(FLAGS_TO_PASS) $(ADA_FLAGS_TO_PASS) \
+ ADA_INCLUDES="-I$(RTS_DIR)../adainclude -I$(RTS_DIR)" \
+ GNATMAKE="gnatmake" \
+ GNATBIND="gnatbind" \
+ GNATLINK="gnatlink" \
+ LIBGNAT="" \
+ gnattools1-re gnattools2 gnattools4
+ # rename cross tools, as expected by the GCC makefile when installing
+ if [ -f $(GCC_DIR)/gnatbind$(exeext) ] ; then \
+ mv $(GCC_DIR)/gnatbind$(exeext) $(GCC_DIR)/gnatbind-cross$(exeext); \
+ fi
+ if [ -f $(GCC_DIR)/gnatbl$(exeext) ] ; then \
+ mv $(GCC_DIR)/gnatbl$(exeext) $(GCC_DIR)/gnatbl-cross$(exeext); \
+ fi
+ if [ -f $(GCC_DIR)/gnatchop$(exeext) ] ; then \
+ mv $(GCC_DIR)/gnatchop$(exeext) $(GCC_DIR)/gnatchop-cross$(exeext); \
+ fi
+ if [ -f $(GCC_DIR)/gnat$(exeext) ] ; then \
+ mv $(GCC_DIR)/gnat$(exeext) $(GCC_DIR)/gnat-cross$(exeext); \
+ fi
+ if [ -f $(GCC_DIR)/gnatkr$(exeext) ] ; then \
+ mv $(GCC_DIR)/gnatkr$(exeext) $(GCC_DIR)/gnatkr-cross$(exeext); \
+ fi
+ if [ -f $(GCC_DIR)/gnatlink$(exeext) ] ; then \
+ mv $(GCC_DIR)/gnatlink$(exeext) $(GCC_DIR)/gnatlink-cross$(exeext); \
+ fi
+ if [ -f $(GCC_DIR)/gnatls$(exeext) ] ; then \
+ mv $(GCC_DIR)/gnatls$(exeext) $(GCC_DIR)/gnatls-cross$(exeext); \
+ fi
+ if [ -f $(GCC_DIR)/gnatmake$(exeext) ] ; then \
+ mv $(GCC_DIR)/gnatmake$(exeext) $(GCC_DIR)/gnatmake-cross$(exeext); \
+ fi
+ if [ -f $(GCC_DIR)/gnatmem$(exeext) ] ; then \
+ mv $(GCC_DIR)/gnatmem$(exeext) $(GCC_DIR)/gnatmem-cross$(exeext); \
+ fi
+ if [ -f $(GCC_DIR)/gnatname$(exeext) ] ; then \
+ mv $(GCC_DIR)/gnatname$(exeext) $(GCC_DIR)/gnatname-cross$(exeext); \
+ fi
+ if [ -f $(GCC_DIR)/gnatprep$(exeext) ] ; then \
+ mv $(GCC_DIR)/gnatprep$(exeext) $(GCC_DIR)/gnatprep-cross$(exeext); \
+ fi
+ if [ -f $(GCC_DIR)/gnatxref$(exeext) ] ; then \
+ mv $(GCC_DIR)/gnatxref$(exeext) $(GCC_DIR)/gnatxref-cross$(exeext); \
+ fi
+ if [ -f $(GCC_DIR)/gnatfind$(exeext) ] ; then \
+ mv $(GCC_DIR)/gnatfind$(exeext) $(GCC_DIR)/gnatfind-cross$(exeext); \
+ fi
+ if [ -f $(GCC_DIR)/gnatclean$(exeext) ] ; then \
+ mv $(GCC_DIR)/gnatclean$(exeext) $(GCC_DIR)/gnatclean-cross$(exeext); \
+ fi
+ if [ -f $(GCC_DIR)/gnatsym$(exeext) ] ; then \
+ mv $(GCC_DIR)/gnatsym$(exeext) $(GCC_DIR)/gnatsym-cross$(exeext); \
+ fi
+ if [ -f $(GCC_DIR)/gpr2make$(exeext) ] ; then \
+ mv $(GCC_DIR)/gpr2make$(exeext) $(GCC_DIR)/gpr2make-cross$(exeext); \
+ fi
+ if [ -f $(GCC_DIR)/gprcmd$(exeext) ] ; then \
+ mv $(GCC_DIR)/gprcmd$(exeext) $(GCC_DIR)/gprcmd-cross$(exeext); \
+ fi
# Check uninstalled version.
check: