# Makefile for libada.
#   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: gnatlib 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.
enable_shared = @enable_shared@
LN_S=@LN_S@
target_noncanonical=@target_noncanonical@

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

# 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.
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.
.PHONY: gnatlib gnatlib-plain gnatlib-sjlj gnatlib-zcx gnatlib-shared
gnatlib: @default_gnatlib_target@

gnatlib-plain:
	$(MAKE) -C $(GCC_DIR)/ada $(FLAGS_TO_PASS) \
	  GNATLIBFLAGS="$(GNATLIBFLAGS)" \
	  GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
	  TARGET_LIBGCC2_CFLAGS="$(TARGET_LIBGCC2_CFLAGS)" \
	  THREAD_KIND="$(THREAD_KIND)" \
	  TRACE="$(TRACE)" \
	  gnatlib

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.
.PHONY: gnattools gnattools-native gnattools-cross regnattools
gnattools: @default_gnattools_target@

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

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

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

# Check uninstalled version.
check:

# Check installed version.
installcheck:

# Build info (none here).
info:

# Build DVI (none here).
dvi:

# Build html (none here).
html:

# Build TAGS (none here).
TAGS:

# Installation rules.
install:

install-info:

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