# Makefile for gnattools
#   Copyright 2003, 2004 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 2 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; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

# Default target; must be first.
all: gnattools

# Standard autoconf-set variables.
SHELL = @SHELL@
srcdir = @srcdir@
build = @build@
target = @target@
prefix = @prefix@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@

# Nonstandard autoconf-set variables.
LN_S=@LN_S@
target_noncanonical=@target_noncanonical@

# Variables for the user (or the top level) to override.
objext=.o
TRACE=no
ADA_FOR_BUILD=
ADA_FOR_TARGET=
LDFLAGS=
PWD_COMMAND = $${PWDCMD-pwd}

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

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)

# Variables for gnattools.
ADAFLAGS= -gnatpg -gnata
ADA_INCLUDE_DIR = $(libsubdir)/adainclude
ADA_RTL_OBJ_DIR = $(libsubdir)/adalib

# For finding the GCC build dir, which is used far too much
GCC_DIR=../gcc
# Include fragment generated by GCC configure; shared with libada for now.
include $(GCC_DIR)/libada-mk
# Variables based on those gleaned from the GCC makefile.  :-P
libsubdir=$(libdir)/gcc/$(target_noncanonical)/$(gcc_version)

# Get possible host-specific override for libsubdir (ick).
xmake_file=$(subst /config,/../gcc/config,$(gcc_xmake_file))
ifneq ($(xmake_file),)
include $(xmake_file)
endif

# Absolute srcdir for gcc/ada (why do we want absolute?  I dunno)
fsrcdir := $(shell cd $(srcdir)/../gcc/ada/; ${PWD_COMMAND})

# Useful "subroutines" for the excess includes
INCLUDES_FOR_SUBDIR = -I. -I.. -I../.. -I$(fsrcdir) -I$(fsrcdir)/../config \
	-I$(fsrcdir)/../../include -I$(fsrcdir)/..
ADA_INCLUDES_FOR_SUBDIR = -I. -I$(fsrcdir)

# Variables for gnattools1, native
TOOLS_FLAGS_TO_PASS_1= \
	"CC=../../xgcc -B../../" \
	"CFLAGS=$(CFLAGS) $(WARN_CFLAGS)" \
	"LDFLAGS=$(LDFLAGS)" \
	"ADAFLAGS=$(ADAFLAGS)" \
	"INCLUDES=$(INCLUDES_FOR_SUBDIR)" \
	"ADA_INCLUDES=-I- -I../rts $(ADA_INCLUDES_FOR_SUBDIR)"\
	"exeext=$(exeext)" \
	"fsrcdir=$(fsrcdir)" \
	"srcdir=$(fsrcdir)" \
	"GNATBIND=../../gnatbind" \
	"TOOLSCASE=native"

# Variables for regnattools
TOOLS_FLAGS_TO_PASS_1re= \
	"CC=../../xgcc -B../../" \
	"CFLAGS=$(CFLAGS)" \
	"ADAFLAGS=$(ADAFLAGS)" \
	"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" \
	"INCLUDES="

# Variables for gnattools2, native
TOOLS_FLAGS_TO_PASS_NATIVE= \
	"CC=../../xgcc -B../../" \
	"CFLAGS=$(CFLAGS)" \
	"ADAFLAGS=$(ADAFLAGS)" \
	"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=native"

# Variables for gnattools, cross
TOOLS_FLAGS_TO_PASS_CROSS= \
	"CC=$(CC)" \
	"CFLAGS=$(CFLAGS) $(WARN_CFLAGS)" \
	"LDFLAGS=$(LDFLAGS)" \
	"ADAFLAGS=$(ADAFLAGS)"	\
	"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" \
	"GNATLINK=gnatlink" \
	"GNATBIND=gnatbind" \
	"TOOLSCASE=cross" \
	"LIBGNAT="

# File lists
# ----------

# File associations set by configure
EXTRA_GNATTOOLS = @EXTRA_GNATTOOLS@
TOOLS_TARGET_PAIRS = @TOOLS_TARGET_PAIRS@

# These are built by gnatmake, and in both native and cross configurations.
GNATTOOLS2_FILES = \
	../../gnatchop$(exeext) \
	../../gnat$(exeext) \
	../../gnatkr$(exeext) \
	../../gnatls$(exeext) \
	../../gnatprep$(exeext) \
	../../gnatxref$(exeext) \
	../../gnatfind$(exeext) \
	../../gnatname$(exeext) \
	../../gnatclean$(exeext)

# Makefile targets
# ----------------

.PHONY: gnattools gnattools-native gnattools-cross regnattools
gnattools: @default_gnattools_target@

# Sanity check
$(GCC_DIR)/stamp-gnatlib:
	@if [ ! -f $(GCC_DIR)/stamp-gnatlib ] ; \
        then \
          echo "Cannot build gnattools while gnatlib is out of date or unbuilt" ; \
          false; \
        else \
          true; \
        fi


# Build directory for the tools. Let's copy the target-dependent
# sources using the same mechanism as for gnatlib. The other sources are
# accessed using the vpath directive in ada/Makefile.in

$(GCC_DIR)/stamp-tools:
	-rm -rf $(GCC_DIR)/ada/tools
	-mkdir -p $(GCC_DIR)/ada/tools
	-(cd $(GCC_DIR)/ada/tools; $(LN_S) ../sdefault.adb .)
	-$(foreach PAIR,$(TOOLS_TARGET_PAIRS), \
	          rm -f $(GCC_DIR)/ada/tools/$(word 1,$(subst <, ,$(PAIR)));\
	          $(LN_S) $(fsrcdir)/$(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
	# gnattools1
	$(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
	  $(TOOLS_FLAGS_TO_PASS_1) \
	  ../../gnatmake$(exeext) ../../gnatlink$(exeext) ../../gnatbl$(exeext)
	# gnattools2
	$(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
	  $(TOOLS_FLAGS_TO_PASS_NATIVE) \
	  $(GNATTOOLS2_FILES)

# 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
	# gnattools1-re
	$(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
	  $(TOOLS_FLAGS_TO_PASS_1re) \
	  gnatmake-re gnatlink-re
	# gnattools2
	$(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
	  $(TOOLS_FLAGS_TO_PASS_NATIVE) \
	  $(GNATTOOLS2_FILES)

# 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
# FIXME: This should be done in configure.
RTS_DIR:=$(strip $(subst \,/,$(shell gnatls -v | grep adalib )))
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) \
	  $(GNATTOOLS2_FILES)
	# gnattools4 (cross only)
	$(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
	  $(TOOLS_FLAGS_TO_PASS_CROSS) \
	  top_buildir=../../.. \
           ../../vxaddr2line$(exeext)
	# Rename cross tools to where the GCC makefile wants them when
	# installing.  FIXME: installation should be done elsewhere.
	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

# 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:

# Build TAGS (none here).
TAGS:

# Installation rules.
install:

install-info:

install-pdf:

install-html:

# Cleaning rules.
mostlyclean:

clean:

distclean:
	$(RM) Makefile config.status config.log

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

$(srcdir)/configure: @MAINT@ $(srcdir)/configure.ac
	cd $(srcdir) && autoconf

# Don't export variables to the environment, in order to not confuse
# configure.
.NOEXPORT:

