# Makefile for GNU Ada Compiler (GNAT).
#   Copyright (C) 1994-2005 Free Software Foundation, Inc.

#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 2, 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.

#You should have received a copy of the GNU General Public License
#along with GCC; see the file COPYING.  If not, write to
#the Free Software Foundation, 51 Franklin Street, Fifth Floor,
#Boston, MA 02110-1301, USA.

# The makefile built from this file lives in the language subdirectory.
# Its purpose is to provide support for:
#
# 1) recursion where necessary, and only then (building .o's), and
# 2) building and debugging cc1 from the language subdirectory, and
# 3) nothing else.
#
# The parent makefile handles all other chores, with help from the
# language makefile fragment, of course.
#
# The targets for external use are:
# all, TAGS, ???mostlyclean, ???clean.

# This makefile will only work with Gnu make.
# The rules are written assuming a minimum subset of tools are available:
#
# Required:
#      MAKE:    Only Gnu make will work.
#      MV:      Must accept (at least) one, maybe wildcard, source argument,
#               a file or directory destination, and support creation/
#               modification date preservation.  Gnu mv -f works.
#      RM:      Must accept an arbitrary number of space separated file
#               arguments, or one wildcard argument. Gnu rm works.
#      RMDIR:   Must delete a directory and all its contents. Gnu rm -rf works.
#      ECHO:    Must support command line redirection. Any Unix-like
#               shell will typically provide this, otherwise a custom version
#               is trivial to write.
#      AR:      Gnu ar works.
#      MKDIR:   Gnu mkdir works.
#      CHMOD:   Gnu chmod works.
#      true:    Does nothing and returns a normal successful return code.
#      pwd:     Prints the current directory on stdout.
#      cd:      Change directory.
#
# Optional:
#      BISON:   Gnu bison works.
#      FLEX:    Gnu flex works.
#      Other miscellaneous tools for obscure targets.

# Tell GNU make 3.79 not to run this directory in parallel.
# Not all of the required dependencies are present.
.NOTPARALLEL:

# Suppress smart makes who think they know how to automake Yacc files
.y.c:

# Variables that exist for you to override.
# See below for how to change them for certain systems.

# Various ways of specifying flags for compilations:  
# CFLAGS is for the user to override to, e.g., do a bootstrap with -O2.
# BOOT_CFLAGS is the value of CFLAGS to pass
# to the stage2 and stage3 compilations
# XCFLAGS is used for most compilations but not when using the GCC just built.
XCFLAGS =
CFLAGS = -g
BOOT_CFLAGS = -O $(CFLAGS)
# These exists to be overridden by the x-* and t-* files, respectively.
X_CFLAGS =
T_CFLAGS =

X_CPPFLAGS =
T_CPPFLAGS =

X_ADA_CFLAGS =
T_ADA_CFLAGS =

X_ADAFLAGS =
T_ADAFLAGS =

CC = cc
BISON = bison
BISONFLAGS =
ECHO = echo
LEX = flex
LEXFLAGS =
CHMOD = chmod
LN = ln
LN_S = ln -s
CP = cp -p
MV = mv -f
RM = rm -f
RMDIR = rm -rf
MKDIR = mkdir -p
AR = ar
AR_FLAGS = rc
LS = ls
RANLIB = @RANLIB@
RANLIB_FLAGS = @ranlib_flags@

SHELL = @SHELL@
PWD_COMMAND = $${PWDCMD-pwd}
# How to copy preserving the date
INSTALL_DATA_DATE = cp -p
MAKEINFO = makeinfo
TEXI2DVI = texi2dvi
TEXI2PDF = texi2pdf
GNATBIND = $(STAGE_PREFIX)gnatbind
GNATBIND_FLAGS = -static -x
ADA_CFLAGS =
ADAFLAGS = -W -Wall -gnatpg -gnata
SOME_ADAFLAGS =-gnata
FORCE_DEBUG_ADAFLAGS = -g
GNATLIBFLAGS = -gnatpg -nostdinc
GNATLIBCFLAGS = -g -O2
# LLVM local begin
GNATLIBCFLAGS_FOR_C = $(GNATLIBCFLAGS) $(TARGET_LIBGCC2_CFLAGS) -fexceptions \
	-DIN_RTS -DIN_TARGET_LIBS
# LLVM local end
ALL_ADA_CFLAGS = $(X_ADA_CFLAGS) $(T_ADA_CFLAGS) $(ADA_CFLAGS)
ALL_ADAFLAGS = $(CFLAGS) $(ALL_ADA_CFLAGS) $(X_ADAFLAGS) $(T_ADAFLAGS) \
	$(ADAFLAGS)
MOST_ADAFLAGS = $(CFLAGS) $(ALL_ADA_CFLAGS) $(X_ADAFLAGS) $(T_ADAFLAGS) \
	$(SOME_ADAFLAGS)
THREAD_KIND = native
THREADSLIB =
GMEM_LIB =
MISCLIB =
SYMDEPS = $(LIBINTL_DEP)
OUTPUT_OPTION = @OUTPUT_OPTION@

objext = .o
exeext =
arext  = .a
soext  = .so
shext  =
hyphen = -

# Define this as & to perform parallel make on a Sequent.
# Note that this has some bugs, and it seems currently necessary 
# to compile all the gen* files first by hand to avoid erroneous results.
P =

# This is used instead of ALL_CFLAGS when compiling with GCC_FOR_TARGET.
# It omits XCFLAGS, and specifies -B./.
# It also specifies -B$(tooldir)/ to find as and ld for a cross compiler.
GCC_CFLAGS = $(INTERNAL_CFLAGS) $(X_CFLAGS) $(T_CFLAGS) $(CFLAGS)

# Tools to use when building a cross-compiler.
# These are used because `configure' appends `cross-make'
# to the makefile when making a cross-compiler.

# We don't use cross-make.  Instead we use the tools from the build tree,
# if they are available.
# program_transform_name and objdir are set by configure.in.
program_transform_name =
objdir = .

target_alias=@target_alias@
target=@target@
xmake_file = @xmake_file@
tmake_file = @tmake_file@
host_canonical=@host@
#version=`sed -e 's/.*\"\([^ \"]*\)[ \"].*/\1/' < $(srcdir)/version.c`
#mainversion=`sed -e 's/.*\"\([0-9]*\.[0-9]*\).*/\1/' < $(srcdir)/version.c`

# Directory where sources are, from where we are.
srcdir = @srcdir@
VPATH = $(srcdir)

fsrcdir := $(shell cd $(srcdir);${PWD_COMMAND})
fsrcpfx := $(shell cd $(srcdir);${PWD_COMMAND})/
fcurdir := $(shell ${PWD_COMMAND})
fcurpfx := $(shell ${PWD_COMMAND})/

# Top build directory, relative to here.
top_builddir = ../..

# Internationalization library.
LIBINTL = @LIBINTL@
LIBINTL_DEP = @LIBINTL_DEP@

# Any system libraries needed just for GNAT.
SYSLIBS = @GNAT_LIBEXC@

# List of extra object files linked in with various programs.
EXTRA_GNATTOOLS_OBJS = ../../prefix.o ../../version.o

# List of target dependent sources, overridden below as necessary
TARGET_ADA_SRCS =

# Type of tools build we are doing; default is not compiling tools.
TOOLSCASE =

# End of variables for you to override.

all: all.indirect

# This tells GNU Make version 3 not to put all variables in the environment.
.NOEXPORT:

# tmake_file and xmake_file expand to lists with entries of the form
# $(srcdir)/config/...  but here $(srcdir) is the ada subdirectory so we
# need to adjust the paths.  There can't be spaces in the subst arguments
# or we get spurious spaces in the actual list of files to include.

# target overrides
ifneq ($(tmake_file),)
include $(subst /config,/../config,$(tmake_file))
endif

# host overrides
ifneq ($(xmake_file),)
include $(subst /config,/../config,$(xmake_file))
endif

# Now figure out from those variables how to compile and link.

all.indirect: Makefile ../gnat1$(exeext)

# IN_GCC distinguishes between code compiled into GCC itself and other
# programs built during a bootstrap.
# autoconf inserts -DCROSS_DIRECTORY_STRUCTURE if we are building a cross
# compiler which does not use the native libraries and headers.
INTERNAL_CFLAGS = @CROSS@ -DIN_GCC

# This is the variable actually used when we compile.
LOOSE_CFLAGS = `echo $(CFLAGS) $(WARN2_CFLAGS)|sed -e 's/-pedantic//g' -e 's/-Wtraditional//g'`
ALL_CFLAGS = $(INTERNAL_CFLAGS) $(X_CFLAGS) $(T_CFLAGS) $(LOOSE_CFLAGS) \
	$(XCFLAGS)

# Likewise.
ALL_CPPFLAGS = $(CPPFLAGS) $(X_CPPFLAGS) $(T_CPPFLAGS)

# This is where we get libiberty.a from.
LIBIBERTY = ../../libiberty/libiberty.a

# How to link with both our special library facilities
# and the system's installed libraries.
LIBS = $(LIBINTL) $(LIBIBERTY) $(SYSLIBS)
LIBDEPS = $(LIBINTL_DEP) $(LIBIBERTY)
# Default is no TGT_LIB; one might be passed down or something
TGT_LIB =
TOOLS_LIBS = $(EXTRA_GNATTOOLS_OBJS) targext.o link.o $(LIBGNAT) ../../../libiberty/libiberty.a $(SYSLIBS) $(TGT_LIB)

# Specify the directories to be searched for header files.
# Both . and srcdir are used, in that order,
# so that tm.h and config.h will be found in the compilation
# subdirectory rather than in the source directory.
INCLUDES = -I- -I. -I.. -I$(srcdir) -I$(srcdir)/.. -I$(srcdir)/../config \
	-I$(srcdir)/../../include

ADA_INCLUDES = -I- -I. -I$(srcdir)

INCLUDES_FOR_SUBDIR = -I. -I.. -I../.. -I$(fsrcdir) -I$(fsrcdir)/../config \
	-I$(fsrcdir)/../../include -I$(fsrcdir)/..
ADA_INCLUDES_FOR_SUBDIR = -I. -I$(fsrcdir)

# Avoid a lot of time thinking about remaking Makefile.in and *.def.
.SUFFIXES: .in .def

# Say how to compile Ada programs.
.SUFFIXES: .ada .adb .ads .asm

# Always use -I$(srcdir)/config when compiling.
.asm.o:
	$(CC) -c -x assembler $< $(OUTPUT_OPTION)

.c.o:
	$(CC) -c $(ALL_CFLAGS) $(ADA_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $< \
	  $(OUTPUT_OPTION)

.adb.o:
	$(CC) -c $(ALL_ADAFLAGS) $(ADA_INCLUDES) $< $(OUTPUT_OPTION)

.ads.o:
	$(CC) -c $(ALL_ADAFLAGS) $(ADA_INCLUDES) $< $(OUTPUT_OPTION)

# how to regenerate this file
Makefile: ../config.status $(srcdir)/Makefile.in $(srcdir)/../version.c
	cd ..; \
	LANGUAGES="$(CONFIG_LANGUAGES)" \
	CONFIG_HEADERS= \
	CONFIG_FILES=ada/Makefile $(SHELL) config.status

# This tells GNU make version 3 not to export all the variables
# defined in this file into the environment.
.NOEXPORT:

# Lists of files for various purposes.

GNATLINK_OBJS = gnatlink.o \
 a-except.o ali.o alloc.o butil.o casing.o csets.o debug.o fmap.o fname.o \
 gnatvsn.o hostparm.o indepsw.o interfac.o i-c.o i-cstrin.o namet.o opt.o \
 osint.o output.o rident.o s-exctab.o s-secsta.o s-stalib.o s-stoele.o \
 sdefault.o snames.o stylesw.o switch.o system.o table.o targparm.o tree_io.o \
 types.o validsw.o widechar.o

GNATMAKE_OBJS = a-except.o ali.o ali-util.o s-casuti.o \
 alloc.o atree.o binderr.o butil.o casing.o csets.o debug.o elists.o einfo.o\
 erroutc.o errutil.o err_vars.o fmap.o fname.o fname-uf.o fname-sf.o \
 gnatmake.o gnatvsn.o hostparm.o interfac.o i-c.o i-cstrin.o krunch.o lib.o \
 make.o makeusg.o makeutl.o mlib.o mlib-fil.o mlib-prj.o mlib-tgt.o mlib-utl.o \
 namet.o nlists.o opt.o osint.o osint-m.o output.o \
 prj.o prj-attr.o prj-attr-pm.o prj-com.o prj-dect.o prj-env.o prj-err.o prj-ext.o prj-nmsc.o \
 prj-pars.o prj-part.o prj-proc.o prj-strt.o prj-tree.o prj-util.o \
 rident.o s-exctab.o s-secsta.o s-stalib.o s-stoele.o \
 scans.o scng.o sdefault.o sfn_scan.o s-purexc.o s-htable.o \
 sinfo.o sinput.o sinput-c.o sinput-p.o \
 snames.o stand.o stringt.o styleg.o stylesw.o system.o validsw.o switch.o switch-m.o \
 table.o targparm.o tempdir.o tree_io.o types.o \
 uintp.o  uname.o urealp.o usage.o widechar.o \
 $(EXTRA_GNATMAKE_OBJS)

# Convert the target variable into a space separated list of architecture,
# manufacturer, and operating system and assign each of those to its own
# variable.

host:=$(subst -, ,$(host_canonical))
targ:=$(subst -, ,$(target))
arch:=$(word 1,$(targ))
ifeq ($(words $(targ)),2)
  manu:=
  osys:=$(word 2,$(targ))
else
  manu:=$(word 2,$(targ))
  osys:=$(word 3,$(targ))
endif

# LIBGNAT_TARGET_PAIRS is a list of pairs of filenames.
# The members of each pair must be separated by a '<' and no whitespace.
# Each pair must be separated by some amount of whitespace from the following
# pair.

# Non-tasking case:

LIBGNAT_TARGET_PAIRS = \
a-intnam.ads<a-intnam-dummy.ads \
s-inmaop.adb<s-inmaop-dummy.adb \
s-intman.adb<s-intman-dummy.adb \
s-osinte.ads<s-osinte-dummy.ads \
s-osprim.adb<s-osprim-posix.adb \
s-taprop.adb<s-taprop-dummy.adb \
s-taspri.ads<s-taspri-dummy.ads

# When using the GCC exception handling mechanism, we need to use an
# alternate body for a-exexpr.adb (a-exexpr-gcc.adb)

EH_MECHANISM=

# Default shared object option. Note that we rely on the fact that the "soname"
# option will always be present and last in this flag, so that we can have
# $(SO_OPTS)libgnat-x.xx

SO_OPTS = -Wl,-soname,

# Default gnatlib-shared target.
# By default, equivalent to gnatlib.
# Set to gnatlib-shared-default, gnatlib-shared-dual, or a platform specific
# target when supported.
GNATLIB_SHARED = gnatlib

# default value for gnatmake's target dependent file
MLIB_TGT = mlib-tgt

# By default, do not distribute prefix.o (in libgccprefix), since it is only
# needed by external GNAT tools such as gnatdist and Glide.
# Override this variable on native platforms when needed.
PREFIX_OBJS =

# To avoid duplicate code, use this variable to set PREFIX_OBJS when needed:
PREFIX_REAL_OBJS = ../prefix.o \
  ../../libiberty/concat.o     \
  ../../libiberty/xmalloc.o    \
  ../../libiberty/xstrdup.o    \
  ../../libiberty/xexit.o

LIB_VERSION = $(strip $(shell grep ' Library_Version :' $(fsrcpfx)gnatvsn.ads | sed -e 's/.*"\(.*\)".*/\1/'))

# $(filter-out PATTERN...,TEXT) removes all PATTERN words from TEXT.
# $(strip STRING) removes leading and trailing spaces from STRING.
# If what's left is null then it's a match.

ifeq ($(strip $(filter-out m68k% wrs vx%,$(targ))),)
  LIBGNAT_TARGET_PAIRS = \
  a-intnam.ads<a-intnam-vxworks.ads \
  a-numaux.ads<a-numaux-vxworks.ads \
  s-inmaop.adb<s-inmaop-posix.adb \
  s-interr.adb<s-interr-vxworks.adb \
  s-intman.ads<s-intman-vxworks.ads \
  s-intman.adb<s-intman-vxworks.adb \
  s-osinte.adb<s-osinte-vxworks.adb \
  s-osinte.ads<s-osinte-vxworks.ads \
  s-osprim.adb<s-osprim-vxworks.adb \
  s-parame.ads<s-parame-vxworks.ads \
  s-parame.adb<s-parame-vxworks.adb \
  s-stchop.adb<s-stchop-vxworks.adb \
  s-taprop.adb<s-taprop-vxworks.adb \
  s-taspri.ads<s-taspri-vxworks.ads \
  s-tpopsp.adb<s-tpopsp-vxworks.adb \
  s-vxwork.ads<s-vxwork-m68k.ads \
  g-soccon.ads<g-soccon-vxworks.ads \
  g-socthi.ads<g-socthi-vxworks.ads \
  g-socthi.adb<g-socthi-vxworks.adb \
  system.ads<system-vxworks-m68k.ads

  TOOLS_TARGET_PAIRS=mlib-tgt.adb<mlib-tgt-vxworks.adb

  EXTRA_GNATRTL_NONTASKING_OBJS=i-vxwork.o i-vxwoio.o
  EXTRA_GNATRTL_TASKING_OBJS=s-vxwork.o

  ifeq ($(strip $(filter-out yes,$(TRACE))),)
    LIBGNAT_TARGET_PAIRS += \
    s-traces.adb<s-traces-default.adb \
    s-tratas.adb<s-tratas-default.adb \
    s-trafor.adb<s-trafor-default.adb \
    s-trafor.ads<s-trafor-default.ads \
    s-tfsetr.adb<s-tfsetr-vxworks.adb 
  endif
endif

ifeq ($(strip $(filter-out powerpc% wrs vxworks,$(targ))),)
  LIBGNAT_TARGET_PAIRS = \
  a-intnam.ads<a-intnam-vxworks.ads \
  a-numaux.ads<a-numaux-vxworks.ads \
  s-inmaop.adb<s-inmaop-posix.adb \
  s-interr.adb<s-interr-vxworks.adb \
  s-intman.ads<s-intman-vxworks.ads \
  s-intman.adb<s-intman-vxworks.adb \
  s-osinte.ads<s-osinte-vxworks.ads \
  s-osprim.adb<s-osprim-vxworks.adb \
  s-parame.ads<s-parame-vxworks.ads \
  s-parame.adb<s-parame-vxworks.adb \
  s-stchop.adb<s-stchop-vxworks.adb \
  s-taprop.adb<s-taprop-vxworks.adb \
  s-taspri.ads<s-taspri-vxworks.ads \
  s-vxwork.ads<s-vxwork-ppc.ads \
  g-soccon.ads<g-soccon-vxworks.ads \
  g-socthi.ads<g-socthi-vxworks.ads \
  g-socthi.adb<g-socthi-vxworks.adb

  TOOLS_TARGET_PAIRS=mlib-tgt.adb<mlib-tgt-vxworks.adb

  ifeq ($(strip $(filter-out yes,$(TRACE))),)
    LIBGNAT_TARGET_PAIRS += \
    s-traces.adb<s-traces-default.adb \
    s-trafor.adb<s-trafor-default.adb \
    s-trafor.ads<s-trafor-default.ads \
    s-tratas.adb<s-tratas-default.adb \
    s-tfsetr.adb<s-tfsetr-vxworks.adb 
  endif

  ifeq ($(strip $(filter-out rtp,$(THREAD_KIND))),)
    LIBGNAT_TARGET_PAIRS += \
    s-osinte.adb<s-osinte-vxworks-rtp.adb \
    s-tpopsp.adb<s-tpopsp-vxworks-rtp.adb \
    system.ads<system-vxworks-ppc-rtp.ads

    EXTRA_GNATRTL_NONTASKING_OBJS=s-vxwexc.o
  else
    LIBGNAT_TARGET_PAIRS += \
    s-osinte.adb<s-osinte-vxworks.adb \
    s-tpopsp.adb<s-tpopsp-vxworks.adb \
    system.ads<system-vxworks-ppc.ads

    EXTRA_GNATRTL_NONTASKING_OBJS=i-vxwork.o i-vxwoio.o s-vxwexc.o
  endif

  EXTRA_GNATRTL_TASKING_OBJS=s-vxwork.o
endif

# vxworksae / vxworks 653
ifeq ($(strip $(filter-out powerpc% wrs vxworksae,$(targ))),)
  # target pairs for kernel + vthreads runtime
  LIBGNAT_TARGET_PAIRS = \
  a-elchha.adb<a-elchha-vxworks-ppc-full.adb \
  a-intnam.ads<a-intnam-vxworks.ads \
  a-numaux.ads<a-numaux-vxworks.ads \
  g-io.adb<g-io-vxworks-ppc-cert.adb \
  g-io.ads<g-io-vxworks-ppc-cert.ads \
  s-inmaop.adb<s-inmaop-posix.adb \
  s-interr.adb<s-interr-vxworks.adb \
  s-intman.ads<s-intman-vxworks.ads \
  s-intman.adb<s-intman-vxworks.adb \
  s-osinte.adb<s-osinte-vxworks.adb \
  s-osinte.ads<s-osinte-vxworks.ads \
  s-osprim.adb<s-osprim-vxworks.adb \
  s-parame.ads<s-parame-ae653.ads \
  s-parame.adb<s-parame-vxworks.adb \
  s-taprop.adb<s-taprop-vxworks.adb \
  s-taspri.ads<s-taspri-vxworks.ads \
  s-tpopsp.adb<s-tpopsp-vxworks.adb \
  s-vxwork.ads<s-vxwork-ppc.ads \
  g-soccon.ads<g-soccon-vxworks.ads \
  g-socthi.ads<g-socthi-vxworks.ads \
  g-socthi.adb<g-socthi-vxworks.adb \
  system.ads<system-vxworks-ppc-vthread.ads

  TOOLS_TARGET_PAIRS=mlib-tgt.adb<mlib-tgt-vxworks.adb

  EXTRA_GNATRTL_NONTASKING_OBJS=i-vxwork.o i-vxwoio.o s-vxwexc.o
  EXTRA_GNATRTL_TASKING_OBJS=s-vxwork.o

  # Extra pairs for the vthreads runtime
  ifeq ($(strip $(filter-out vthreads,$(THREAD_KIND))),)
    LIBGNAT_TARGET_PAIRS += \
    s-thread.adb<s-thread-ae653.adb
    EXTRA_GNATRTL_NONTASKING_OBJS += s-thread.o
  endif

  ifeq ($(strip $(filter-out yes,$(TRACE))),)
    LIBGNAT_TARGET_PAIRS += \
    s-traces.adb<s-traces-default.adb \
    s-trafor.adb<s-trafor-default.adb \
    s-trafor.ads<s-trafor-default.ads \
    s-tratas.adb<s-tratas-default.adb \
    s-tfsetr.adb<s-tfsetr-vxworks.adb
  endif
endif

ifeq ($(strip $(filter-out sparc% wrs vx%,$(targ))),)
  LIBGNAT_TARGET_PAIRS = \
  a-intnam.ads<a-intnam-vxworks.ads \
  a-numaux.ads<a-numaux-vxworks.ads \
  s-inmaop.adb<s-inmaop-posix.adb \
  s-interr.adb<s-interr-vxworks.adb \
  s-intman.ads<s-intman-vxworks.ads \
  s-intman.adb<s-intman-vxworks.adb \
  s-osinte.adb<s-osinte-vxworks.adb \
  s-osinte.ads<s-osinte-vxworks.ads \
  s-osprim.adb<s-osprim-vxworks.adb \
  s-parame.ads<s-parame-vxworks.ads \
  s-parame.adb<s-parame-vxworks.adb \
  s-stchop.adb<s-stchop-vxworks.adb \
  s-taprop.adb<s-taprop-vxworks.adb \
  s-taspri.ads<s-taspri-vxworks.ads \
  s-tpopsp.adb<s-tpopsp-vxworks.adb \
  s-vxwork.ads<s-vxwork-sparcv9.ads \
  g-soccon.ads<g-soccon-vxworks.ads \
  g-socthi.ads<g-socthi-vxworks.ads \
  g-socthi.adb<g-socthi-vxworks.adb \
  system.ads<system-vxworks-sparcv9.ads   \

  TOOLS_TARGET_PAIRS=mlib-tgt.adb<mlib-tgt-vxworks.adb

  EXTRA_GNATRTL_NONTASKING_OBJS=i-vxwork.o i-vxwoio.o
  EXTRA_GNATRTL_TASKING_OBJS=s-vxwork.o
endif

ifeq ($(strip $(filter-out %86 wrs vxworks,$(targ))),)
  LIBGNAT_TARGET_PAIRS = \
  a-intnam.ads<a-intnam-vxworks.ads \
  i-vxwork.ads<i-vxwork-x86.ads \
  s-inmaop.adb<s-inmaop-posix.adb \
  s-interr.adb<s-interr-vxworks.adb \
  s-intman.ads<s-intman-vxworks.ads \
  s-intman.adb<s-intman-vxworks.adb \
  a-numaux.adb<a-numaux-x86.adb \
  a-numaux.ads<a-numaux-x86.ads \
  s-osinte.ads<s-osinte-vxworks.ads \
  s-osprim.adb<s-osprim-vxworks.adb \
  s-parame.ads<s-parame-vxworks.ads \
  s-parame.adb<s-parame-vxworks.adb \
  s-stchop.adb<s-stchop-vxworks.adb \
  s-taprop.adb<s-taprop-vxworks.adb \
  s-taspri.ads<s-taspri-vxworks.ads \
  s-vxwork.ads<s-vxwork-x86.ads \
  g-soccon.ads<g-soccon-vxworks.ads \
  g-socthi.ads<g-socthi-vxworks.ads \
  g-socthi.adb<g-socthi-vxworks.adb

  TOOLS_TARGET_PAIRS=mlib-tgt.adb<mlib-tgt-vxworks.adb

  ifeq ($(strip $(filter-out yes,$(TRACE))),)
    LIBGNAT_TARGET_PAIRS += \
    s-traces.adb<s-traces-default.adb \
    s-trafor.adb<s-trafor-default.adb \
    s-trafor.ads<s-trafor-default.ads \
    s-tratas.adb<s-tratas-default.adb \
    s-tfsetr.adb<s-tfsetr-vxworks.adb
  endif

  ifeq ($(strip $(filter-out rtp,$(THREAD_KIND))),)
    LIBGNAT_TARGET_PAIRS += \
    s-osinte.adb<s-osinte-vxworks-rtp.adb \
    s-tpopsp.adb<s-tpopsp-vxworks-rtp.adb \
    system.ads<system-vxworks-x86-rtp.ads

    EXTRA_GNATRTL_NONTASKING_OBJS=s-vxwexc.o
  else
    LIBGNAT_TARGET_PAIRS += \
    s-osinte.adb<s-osinte-vxworks.adb \
    s-tpopsp.adb<s-tpopsp-vxworks.adb \
    system.ads<system-vxworks-x86.ads

    EXTRA_GNATRTL_NONTASKING_OBJS=i-vxwork.o i-vxwoio.o s-vxwexc.o
  endif

  EXTRA_GNATRTL_TASKING_OBJS=s-vxwork.o
endif

ifeq ($(strip $(filter-out arm% coff wrs vx%,$(targ))),)
  LIBGNAT_TARGET_PAIRS = \
  a-intnam.ads<a-intnam-vxworks.ads \
  a-numaux.ads<a-numaux-vxworks.ads \
  s-inmaop.adb<s-inmaop-posix.adb \
  s-interr.adb<s-interr-vxworks.adb \
  s-intman.ads<s-intman-vxworks.ads \
  s-intman.adb<s-intman-vxworks.adb \
  s-osinte.adb<s-osinte-vxworks.adb \
  s-osinte.ads<s-osinte-vxworks.ads \
  s-osprim.adb<s-osprim-vxworks.adb \
  s-parame.ads<s-parame-vxworks.ads \
  s-parame.adb<s-parame-vxworks.adb \
  s-stchop.adb<s-stchop-vxworks.adb \
  s-taprop.adb<s-taprop-vxworks.adb \
  s-taspri.ads<s-taspri-vxworks.ads \
  s-tpopsp.adb<s-tpopsp-vxworks.adb \
  s-vxwork.ads<s-vxwork-arm.ads \
  g-soccon.ads<g-soccon-vxworks.ads \
  g-socthi.ads<g-socthi-vxworks.ads \
  g-socthi.adb<g-socthi-vxworks.adb \
  system.ads<system-vxworks-arm.ads

  TOOLS_TARGET_PAIRS=mlib-tgt.adb<mlib-tgt-vxworks.adb

  EXTRA_GNATRTL_NONTASKING_OBJS=i-vxwork.o i-vxwoio.o
  EXTRA_GNATRTL_TASKING_OBJS=s-vxwork.o
endif

ifeq ($(strip $(filter-out mips% wrs vx%,$(targ))),)
  LIBGNAT_TARGET_PAIRS = \
  a-intnam.ads<a-intnam-vxworks.ads \
  a-numaux.ads<a-numaux-vxworks.ads \
  s-inmaop.adb<s-inmaop-posix.adb \
  s-interr.adb<s-interr-vxworks.adb \
  s-intman.ads<s-intman-vxworks.ads \
  s-intman.adb<s-intman-vxworks.adb \
  s-osinte.adb<s-osinte-vxworks.adb \
  s-osinte.ads<s-osinte-vxworks.ads \
  s-osprim.adb<s-osprim-vxworks.adb \
  s-parame.ads<s-parame-vxworks.ads \
  s-parame.adb<s-parame-vxworks.adb \
  s-stchop.adb<s-stchop-vxworks.adb \
  s-taprop.adb<s-taprop-vxworks.adb \
  s-taspri.ads<s-taspri-vxworks.ads \
  s-tpopsp.adb<s-tpopsp-vxworks.adb \
  s-vxwork.ads<s-vxwork-mips.ads \
  g-soccon.ads<g-soccon-vxworks.ads \
  g-socthi.ads<g-socthi-vxworks.ads \
  g-socthi.adb<g-socthi-vxworks.adb \
  system.ads<system-vxworks-mips.ads

  TOOLS_TARGET_PAIRS=mlib-tgt.adb<mlib-tgt-vxworks.adb

  EXTRA_GNATRTL_NONTASKING_OBJS=i-vxwork.o i-vxwoio.o
  EXTRA_GNATRTL_TASKING_OBJS=s-vxwork.o
endif

ifeq ($(strip $(filter-out sparc% sun solaris%,$(targ))),)
  LIBGNAT_TARGET_PAIRS_32 = \
  a-intnam.ads<a-intnam-solaris.ads \
  s-inmaop.adb<s-inmaop-posix.adb \
  s-intman.adb<s-intman-solaris.adb \
  s-osinte.adb<s-osinte-solaris.adb \
  s-osinte.ads<s-osinte-solaris.ads \
  s-osprim.adb<s-osprim-solaris.adb \
  s-taprop.adb<s-taprop-solaris.adb \
  s-tasinf.adb<s-tasinf-solaris.adb \
  s-tasinf.ads<s-tasinf-solaris.ads \
  s-taspri.ads<s-taspri-solaris.ads \
  s-tpopsp.adb<s-tpopsp-solaris.adb \
  g-soccon.ads<g-soccon-solaris.ads \
  g-soliop.ads<g-soliop-solaris.ads \
  system.ads<system-solaris-sparc.ads

  LIBGNAT_TARGET_PAIRS_64 = \
  a-intnam.ads<a-intnam-solaris.ads \
  s-inmaop.adb<s-inmaop-posix.adb \
  s-intman.adb<s-intman-solaris.adb \
  s-osinte.adb<s-osinte-solaris.adb \
  s-osinte.ads<s-osinte-solaris.ads \
  s-osprim.adb<s-osprim-solaris.adb \
  s-taprop.adb<s-taprop-solaris.adb \
  s-tasinf.adb<s-tasinf-solaris.adb \
  s-tasinf.ads<s-tasinf-solaris.ads \
  s-taspri.ads<s-taspri-solaris.ads \
  s-tpopsp.adb<s-tpopsp-solaris.adb \
  g-soccon.ads<g-soccon-solaris-64.ads \
  g-soliop.ads<g-soliop-solaris.ads \
  system.ads<system-solaris-sparcv9.ads

  ifeq ($(strip $(filter-out sparc sun solaris%,$(targ))),)
    LIBGNAT_TARGET_PAIRS = $(LIBGNAT_TARGET_PAIRS_32)
  else
    LIBGNAT_TARGET_PAIRS = $(LIBGNAT_TARGET_PAIRS_64)
  endif
  
  TOOLS_TARGET_PAIRS=mlib-tgt.adb<mlib-tgt-solaris.adb

  EH_MECHANISM=-gcc
  THREADSLIB = -lposix4 -lthread
  MISCLIB = -lposix4 -lnsl -lsocket
  SO_OPTS = -Wl,-h,
  GNATLIB_SHARED = gnatlib-shared-dual
  GMEM_LIB = gmemlib
  PREFIX_OBJS = $(PREFIX_REAL_OBJS)
  LIBRARY_VERSION := $(LIB_VERSION)

  ifeq ($(strip $(filter-out pthread PTHREAD,$(THREAD_KIND))),)
    LIBGNAT_TARGET_PAIRS = \
    a-intnam.ads<a-intnam-solaris.ads \
    s-inmaop.adb<s-inmaop-posix.adb \
    s-intman.adb<s-intman-posix.adb \
    s-osinte.adb<s-osinte-posix.adb \
    s-osinte.ads<s-osinte-solaris-posix.ads \
    s-osprim.adb<s-osprim-solaris.adb \
    s-taprop.adb<s-taprop-posix.adb \
    s-taspri.ads<s-taspri-posix.ads \
    s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
    g-soccon.ads<g-soccon-solaris.ads \
    g-soliop.ads<g-soliop-solaris.ads \
    system.ads<system-solaris-sparc.ads

    THREADSLIB = -lposix4 -lpthread
  endif

  ifeq ($(strip $(filter-out m64,$(THREAD_KIND))),)
    LIBGNAT_TARGET_PAIRS = $(LIBGNAT_TARGET_PAIRS_64)
  endif
endif

ifeq ($(strip $(filter-out %86 solaris2%,$(arch) $(osys))),)
  LIBGNAT_TARGET_PAIRS = \
  a-numaux.adb<a-numaux-x86.adb \
  a-numaux.ads<a-numaux-x86.ads \
  a-intnam.ads<a-intnam-solaris.ads \
  s-inmaop.adb<s-inmaop-posix.adb \
  s-intman.adb<s-intman-solaris.adb \
  s-osinte.adb<s-osinte-solaris.adb \
  s-osinte.ads<s-osinte-solaris.ads \
  s-osprim.adb<s-osprim-solaris.adb \
  s-taprop.adb<s-taprop-solaris.adb \
  s-tasinf.adb<s-tasinf-solaris.adb \
  s-tasinf.ads<s-tasinf-solaris.ads \
  s-taspri.ads<s-taspri-solaris.ads \
  s-tpopsp.adb<s-tpopsp-solaris.adb \
  g-soccon.ads<g-soccon-solaris.ads \
  g-soliop.ads<g-soliop-solaris.ads \
  system.ads<system-solaris-x86.ads

  TOOLS_TARGET_PAIRS=mlib-tgt.adb<mlib-tgt-solaris.adb

  THREADSLIB = -lposix4 -lthread
  MISCLIB = -lposix4 -lnsl -lsocket
  SO_OPTS = -Wl,-h,
  GNATLIB_SHARED = gnatlib-shared-dual
  GMEM_LIB = gmemlib
  PREFIX_OBJS = $(PREFIX_REAL_OBJS)
  LIBRARY_VERSION := $(LIB_VERSION)
endif

ifeq ($(strip $(filter-out %86 linux%,$(arch) $(osys))),)
  LIBGNAT_TARGET_PAIRS = \
  a-intnam.ads<a-intnam-linux.ads \
  a-numaux.adb<a-numaux-x86.adb \
  a-numaux.ads<a-numaux-x86.ads \
  g-soccon.ads<g-soccon-linux-x86.ads \
  s-inmaop.adb<s-inmaop-posix.adb \
  s-intman.adb<s-intman-posix.adb \
  s-osinte.adb<s-osinte-posix.adb \
  s-osinte.ads<s-osinte-linux.ads \
  s-osprim.adb<s-osprim-posix.adb \
  s-taprop.adb<s-taprop-linux.adb \
  s-taspri.ads<s-taspri-posix.ads \
  s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
  system.ads<system-linux-x86.ads

  TOOLS_TARGET_PAIRS =  \
    mlib-tgt.adb<mlib-tgt-linux.adb \
    indepsw.adb<indepsw-gnu.adb

  EH_MECHANISM=-gcc
  THREADSLIB = -lpthread
  GNATLIB_SHARED = gnatlib-shared-dual
  GMEM_LIB = gmemlib
  PREFIX_OBJS = $(PREFIX_REAL_OBJS)
  LIBRARY_VERSION := $(LIB_VERSION)
endif

ifeq ($(strip $(filter-out %86 kfreebsd%,$(arch) $(osys))),)
  LIBGNAT_TARGET_PAIRS = \
  a-intnam.ads<a-intnam-freebsd.ads \
  a-numaux.adb<a-numaux-x86.adb \
  a-numaux.ads<a-numaux-x86.ads \
  s-inmaop.adb<s-inmaop-posix.adb \
  s-intman.adb<s-intman-posix.adb \
  g-soccon.ads<g-soccon-freebsd.ads \
  s-osinte.adb<s-osinte-posix.adb \
  s-osinte.ads<s-osinte-kfreebsd-gnu.ads \
  s-osprim.adb<s-osprim-posix.adb \
  s-taprop.adb<s-taprop-linux.adb \
  s-taspri.ads<s-taspri-posix.ads \
  s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
  system.ads<system-freebsd-x86.ads

  TOOLS_TARGET_PAIRS =  \
    mlib-tgt.adb<mlib-tgt-linux.adb \
    indepsw.adb<indepsw-gnu.adb

  SYMLIB = -laddr2line -lbfd -liberty $(LIBINTL)
  THREADSLIB = -lpthread
  GNATLIB_SHARED = gnatlib-shared-dual
  GMEM_LIB = gmemlib
  PREFIX_OBJS = $(PREFIX_REAL_OBJS)
  LIBRARY_VERSION := $(LIB_VERSION)
endif

ifeq ($(strip $(filter-out %86 freebsd%,$(arch) $(osys))),)
  LIBGNAT_TARGET_PAIRS = \
  a-intnam.ads<a-intnam-freebsd.ads \
  a-numaux.adb<a-numaux-x86.adb \
  a-numaux.ads<a-numaux-x86.ads \
  g-soccon.ads<g-soccon-freebsd.ads \
  s-inmaop.adb<s-inmaop-posix.adb \
  s-intman.adb<s-intman-posix.adb \
  s-osinte.adb<s-osinte-freebsd.adb \
  s-osinte.ads<s-osinte-freebsd.ads \
  s-osprim.adb<s-osprim-posix.adb \
  s-taprop.adb<s-taprop-posix.adb \
  s-taspri.ads<s-taspri-posix.ads \
  s-tpopsp.adb<s-tpopsp-posix.adb \
  system.ads<system-freebsd-x86.ads

  TOOLS_TARGET_PAIRS = \
  mlib-tgt.adb<mlib-tgt-linux.adb
  GNATLIB_SHARED = gnatlib-shared-dual

  THREADSLIB= -lc_r
  GMEM_LIB = gmemlib
  PREFIX_OBJS = $(PREFIX_REAL_OBJS)
  LIBRARY_VERSION := $(LIB_VERSION)
endif

ifeq ($(strip $(filter-out s390% linux%,$(arch) $(osys))),)
  ifeq ($(strip $(filter-out s390x,$(arch))),)
    LIBGNAT_TARGET_PAIRS = \
    a-intnam.ads<a-intnam-linux.ads \
    s-inmaop.adb<s-inmaop-posix.adb \
    s-intman.adb<s-intman-posix.adb \
    s-osinte.adb<s-osinte-posix.adb \
    s-osinte.ads<s-osinte-linux.ads \
    s-osprim.adb<s-osprim-posix.adb \
    s-taprop.adb<s-taprop-linux.adb \
    s-taspri.ads<s-taspri-posix.ads \
    s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
    system.ads<system-linux-s390x.ads
  else
    LIBGNAT_TARGET_PAIRS = \
    a-intnam.ads<a-intnam-linux.ads \
    s-inmaop.adb<s-inmaop-posix.adb \
    s-intman.adb<s-intman-posix.adb \
    s-osinte.adb<s-osinte-posix.adb \
    s-osinte.ads<s-osinte-linux.ads \
    s-osprim.adb<s-osprim-posix.adb \
    s-taprop.adb<s-taprop-linux.adb \
    s-taspri.ads<s-taspri-posix.ads \
    s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
    system.ads<system-linux-s390.ads
  endif

  TOOLS_TARGET_PAIRS =  \
    mlib-tgt.adb<mlib-tgt-linux.adb

  EH_MECHANISM=-gcc
  THREADSLIB = -lpthread
  GNATLIB_SHARED = gnatlib-shared-dual
  PREFIX_OBJS = $(PREFIX_REAL_OBJS)
  LIBRARY_VERSION := $(LIB_VERSION)
endif

ifeq ($(strip $(filter-out mips sgi irix%,$(targ))),)
  ifeq ($(strip $(filter-out mips sgi irix6%,$(targ))),)
    LIBGNAT_TARGET_PAIRS = \
    a-intnam.ads<a-intnam-irix.ads \
    s-inmaop.adb<s-inmaop-posix.adb \
    s-intman.adb<s-intman-irix.adb \
    s-mastop.adb<s-mastop-irix.adb \
    s-osinte.adb<s-osinte-irix.adb \
    s-osinte.ads<s-osinte-irix.ads \
    s-osprim.adb<s-osprim-posix.adb \
    s-proinf.adb<s-proinf-irix-athread.adb \
    s-proinf.ads<s-proinf-irix-athread.ads \
    s-taprop.adb<s-taprop-irix.adb \
    s-tasinf.ads<s-tasinf-irix.ads \
    s-taspri.ads<s-taspri-posix.ads \
    s-tpopsp.adb<s-tpopsp-posix.adb \
    s-traceb.adb<s-traceb-mastop.adb \
    g-soccon.ads<g-soccon-irix.ads \
    system.ads<system-irix-n32.ads

    THREADSLIB = -lpthread
    GNATLIB_SHARED = gnatlib-shared-default

  else
    LIBGNAT_TARGET_PAIRS += \
    s-mastop.adb<s-mastop-irix.adb \
    s-osprim.adb<s-osprim-posix.adb \
    s-traceb.adb<s-traceb-mastop.adb \
    g-soccon.ads<g-soccon-irix.ads \
    system.ads<system-irix-o32.ads
  endif

  EH_MECHANISM=-gcc
  TOOLS_TARGET_PAIRS = mlib-tgt.adb<mlib-tgt-irix.adb
  TGT_LIB = -lexc
  MISCLIB = -lexc
  PREFIX_OBJS = $(PREFIX_REAL_OBJS)
  LIBRARY_VERSION := $(LIB_VERSION)
endif

ifeq ($(strip $(filter-out hppa% hp hpux10%,$(targ))),)
  LIBGNAT_TARGET_PAIRS = \
  a-excpol.adb<a-excpol-abort.adb \
  a-intnam.ads<a-intnam-hpux.ads \
  s-inmaop.adb<s-inmaop-posix.adb \
  s-interr.adb<s-interr-sigaction.adb \
  s-intman.adb<s-intman-posix.adb \
  s-osinte.adb<s-osinte-hpux-dce.adb \
  s-osinte.ads<s-osinte-hpux-dce.ads \
  s-parame.ads<s-parame-hpux.ads \
  s-osprim.adb<s-osprim-posix.adb \
  s-taprop.adb<s-taprop-hpux-dce.adb \
  s-taspri.ads<s-taspri-hpux-dce.ads \
  s-tpopsp.adb<s-tpopsp-posix.adb \
  g-soccon.ads<g-soccon-hpux.ads \
  system.ads<system-hpux.ads

  EH_MECHANISM=-gcc
  PREFIX_OBJS = $(PREFIX_REAL_OBJS)
endif

ifeq ($(strip $(filter-out hppa% hp hpux11%,$(targ))),)
  LIBGNAT_TARGET_PAIRS = \
  a-intnam.ads<a-intnam-hpux.ads \
  s-inmaop.adb<s-inmaop-posix.adb \
  s-intman.adb<s-intman-posix.adb \
  s-osinte.adb<s-osinte-posix.adb \
  s-osinte.ads<s-osinte-hpux.ads \
  s-parame.ads<s-parame-hpux.ads \
  s-osprim.adb<s-osprim-posix.adb \
  s-traceb.adb<s-traceb-hpux.adb \
  s-taprop.adb<s-taprop-posix.adb \
  s-taspri.ads<s-taspri-posix.ads \
  s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
  g-soccon.ads<g-soccon-hpux.ads \
  system.ads<system-hpux.ads

  TOOLS_TARGET_PAIRS = mlib-tgt.adb<mlib-tgt-hpux.adb
  EH_MECHANISM=-gcc
  TGT_LIB = /usr/lib/libcl.a
  THREADSLIB = -lpthread
  GMEM_LIB = gmemlib
  soext = .sl
  SO_OPTS = -Wl,+h,
  PREFIX_OBJS = $(PREFIX_REAL_OBJS)
  GNATLIB_SHARED = gnatlib-shared-dual
  LIBRARY_VERSION := $(LIB_VERSION)
endif

ifeq ($(strip $(filter-out ibm aix%,$(manu) $(osys))),)
  LIBGNAT_TARGET_PAIRS = \
  a-intnam.ads<a-intnam-aix.ads \
  s-inmaop.adb<s-inmaop-posix.adb \
  s-intman.adb<s-intman-posix.adb \
  s-osinte.adb<s-osinte-aix.adb \
  s-osinte.ads<s-osinte-aix.ads \
  s-osprim.adb<s-osprim-posix.adb \
  s-taprop.adb<s-taprop-posix.adb \
  s-taspri.ads<s-taspri-posix.ads \
  s-tpopsp.adb<s-tpopsp-posix.adb \
  g-soccon.ads<g-soccon-aix.ads \
  system.ads<system-aix.ads

  THREADSLIB = -lpthreads
  PREFIX_OBJS=$(PREFIX_REAL_OBJS)

  TOOLS_TARGET_PAIRS = \
  mlib-tgt.adb<mlib-tgt-aix.adb \
  indepsw.adb<indepsw-aix.adb

  GMEM_LIB = gmemlib
endif

ifeq ($(strip $(filter-out lynxos,$(osys))),)
  TOOLS_TARGET_PAIRS = \
  mlib-tgt.adb<mlib-tgt-lynxos.adb \
  indepsw.adb<indepsw-gnu.adb

  ifeq ($(strip $(filter-out %86 lynxos,$(arch) $(osys))),)
    LIBGNAT_TARGET_PAIRS = \
    a-numaux.adb<a-numaux-x86.adb \
    a-numaux.ads<a-numaux-x86.ads \
    a-intnam.ads<a-intnam-lynxos.ads \
    s-inmaop.adb<s-inmaop-posix.adb \
    s-intman.adb<s-intman-posix.adb \
    s-osinte.adb<s-osinte-lynxos.adb \
    s-osinte.ads<s-osinte-lynxos.ads \
    s-osprim.adb<s-osprim-posix.adb \
    s-taprop.adb<s-taprop-lynxos.adb \
    s-taspri.ads<s-taspri-lynxos.ads \
    s-tpopsp.adb<s-tpopsp-lynxos.adb \
    system.ads<system-lynxos-x86.ads

    PREFIX_OBJS=$(PREFIX_REAL_OBJS)

  else
    LIBGNAT_TARGET_PAIRS = \
    a-intnam.ads<a-intnam-lynxos.ads \
    s-inmaop.adb<s-inmaop-posix.adb \
    s-intman.adb<s-intman-posix.adb \
    s-osinte.adb<s-osinte-lynxos.adb \
    s-osinte.ads<s-osinte-lynxos.ads \
    s-osprim.adb<s-osprim-posix.adb \
    s-taprop.adb<s-taprop-lynxos.adb \
    s-taspri.ads<s-taspri-lynxos.ads \
    s-tpopsp.adb<s-tpopsp-lynxos.adb \
    system.ads<system-lynxos-ppc.ads
  endif
endif

ifeq ($(strip $(filter-out rtems%,$(osys))),)
  LIBGNAT_TARGET_PAIRS = \
  a-intnam.ads<a-intnam-rtems.ads \
  s-inmaop.adb<s-inmaop-posix.adb \
  s-intman.adb<s-intman-posix.adb \
  s-osinte.adb<s-osinte-rtems.adb \
  s-osinte.ads<s-osinte-rtems.ads \
  s-osprim.adb<s-osprim-posix.adb \
  s-parame.adb<s-parame-rtems.adb \
  s-taprop.adb<s-taprop-posix.adb \
  s-taspri.ads<s-taspri-posix.ads \
  s-auxdec.ads<s-auxdec-empty.ads \
  s-auxdec.adb<s-auxdec-empty.adb \
  s-tpopsp.adb<s-tpopsp-rtems.adb
endif

ifeq ($(strip $(filter-out alpha% dec osf%,$(targ))),)
  LIBGNAT_TARGET_PAIRS = \
  a-intnam.ads<a-intnam-tru64.ads \
  s-inmaop.adb<s-inmaop-posix.adb \
  s-intman.adb<s-intman-posix.adb \
  s-mastop.adb<s-mastop-tru64.adb \
  s-osinte.adb<s-osinte-tru64.adb \
  s-osinte.ads<s-osinte-tru64.ads \
  s-osprim.adb<s-osprim-unix.adb \
  s-taprop.adb<s-taprop-tru64.adb \
  s-tasinf.ads<s-tasinf-tru64.ads \
  s-taspri.ads<s-taspri-tru64.ads \
  s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
  s-traceb.adb<s-traceb-mastop.adb \
  g-soccon.ads<g-soccon-tru64.ads \
  system.ads<system-tru64.ads

  TOOLS_TARGET_PAIRS=mlib-tgt.adb<mlib-tgt-tru64.adb

  EH_MECHANISM=-gcc
  GMEM_LIB=gmemlib
  THREADSLIB = -lpthread -lmach -lexc -lrt
  PREFIX_OBJS = $(PREFIX_REAL_OBJS)
  GNATLIB_SHARED = gnatlib-shared-default
  LIBRARY_VERSION := $(LIB_VERSION)
endif

ifeq ($(strip $(filter-out alpha64 ia64 dec hp vms% openvms% alphavms%,$(host))),)

soext  = .exe
hyphen = _
LN = cp -p
LN_S = cp -p

.SUFFIXES: .sym

.o.sym: 
	@ gnu:[bin]vmssymvec $<
endif

ifeq ($(strip $(filter-out alpha64 ia64 dec hp vms% openvms% alphavms%,$(targ))),)
ifeq ($(strip $(filter-out ia64 hp vms% openvms%,$(targ))),)
  LIBGNAT_TARGET_PAIRS_AUX1 = \
  g-enblsp.adb<g-enblsp-vms-ia64.adb \
  g-trasym.adb<g-trasym-vms-ia64.adb \
  s-auxdec.ads<s-auxdec-vms_64.ads \
  s-crtl.ads<s-crtl-vms64.ads \
  s-osinte.adb<s-osinte-vms-ia64.adb \
  s-osinte.ads<s-osinte-vms-ia64.ads \
  s-vaflop.adb<s-vaflop-vms-ia64.adb \
  system.ads<system-vms_64.ads

  LIBGNAT_TARGET_PAIRS_AUX2 = \
  s-parame.ads<s-parame-vms-ia64.ads
else
ifeq ($(strip $(filter-out alpha64 dec vms% openvms% alphavms%,$(targ))),)
  LIBGNAT_TARGET_PAIRS_AUX1 = \
  g-enblsp.adb<g-enblsp-vms-alpha.adb \
  g-trasym.adb<g-trasym-vms-alpha.adb \
  s-asthan.adb<s-asthan-vms-alpha.adb \
  s-auxdec.ads<s-auxdec-vms_64.ads \
  s-crtl.ads<s-crtl-vms64.ads \
  s-osinte.adb<s-osinte-vms.adb \
  s-osinte.ads<s-osinte-vms.ads \
  s-vaflop.adb<s-vaflop-vms-alpha.adb \
  system.ads<system-vms_64.ads

ifeq ($(strip $(filter-out express EXPRESS,$(THREAD_KIND))),)
  LIBGNAT_TARGET_PAIRS_AUX2 = \
  s-parame.ads<s-parame-vms-restrict.ads
else
  LIBGNAT_TARGET_PAIRS_AUX2 = \
  s-parame.ads<s-parame-vms-alpha.ads
endif
endif
endif

  LIBGNAT_TARGET_PAIRS = \
  a-caldel.adb<a-caldel-vms.adb \
  a-calend.adb<a-calend-vms.adb \
  a-calend.ads<a-calend-vms.ads \
  a-dirval.adb<a-dirval-vms.adb \
  a-excpol.adb<a-excpol-abort.adb \
  a-intnam.ads<a-intnam-vms.ads \
  a-numaux.ads<a-numaux-vms.ads \
  g-expect.adb<g-expect-vms.adb \
  g-soccon.ads<g-soccon-vms.ads \
  g-socthi.ads<g-socthi-vms.ads \
  g-socthi.adb<g-socthi-vms.adb \
  i-c.ads<i-c-vms_64.ads \
  i-cstrin.ads<i-cstrin-vms_64.ads \
  i-cstrin.adb<i-cstrin-vms_64.adb \
  i-cpoint.ads<i-cpoint-vms_64.ads \
  i-cpoint.adb<i-cpoint-vms_64.adb \
  i-cstrea.adb<i-cstrea-vms.adb \
  s-inmaop.adb<s-inmaop-vms.adb \
  s-interr.adb<s-interr-vms.adb \
  s-intman.adb<s-intman-vms.adb \
  s-intman.ads<s-intman-vms.ads \
  s-osprim.adb<s-osprim-vms.adb \
  s-osprim.ads<s-osprim-vms.ads \
  s-taprop.adb<s-taprop-vms.adb \
  s-taspri.ads<s-taspri-vms.ads \
  s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
  s-tpopde.adb<s-tpopde-vms.adb \
  s-tpopde.ads<s-tpopde-vms.ads \
  s-traent.adb<s-traent-vms.adb \
  s-traent.ads<s-traent-vms.ads \
  $(LIBGNAT_TARGET_PAIRS_AUX1) \
  $(LIBGNAT_TARGET_PAIRS_AUX2)

ifeq ($(strip $(filter-out ia64 hp vms% openvms%,$(targ))),)
  TOOLS_TARGET_PAIRS= \
  mlib-tgt.adb<mlib-tgt-vms-ia64.adb \
  symbols.adb<symbols-vms.adb \
  symbols-processing.adb<symbols-processing-vms-ia64.adb
else
  TOOLS_TARGET_PAIRS= \
  mlib-tgt.adb<mlib-tgt-vms-alpha.adb \
  symbols.adb<symbols-vms.adb \
  symbols-processing.adb<symbols-processing-vms-alpha.adb
endif


  GMEM_LIB = gmemlib
  EH_MECHANISM=-gcc
  GNATLIB_SHARED=gnatlib-shared-vms
ifeq ($(strip $(filter-out alpha64 dec vms% openvms% alphavms%,$(targ))),)
  EXTRA_LIBGNAT_SRCS=vmshandler.asm
  EXTRA_LIBGNAT_OBJS=vmshandler.o
endif
  EXTRA_GNATRTL_TASKING_OBJS=s-tpopde.o
  EXTRA_GNATTOOLS = \
     ../../gnatlbr$(exeext)  \
     ../../gnatsym$(exeext)  \
     ../../vms_help$(exeext) \
     ../../gnat.hlp
  # This command transforms (YYYYMMDD) into YY,MMDD
  GSMATCH_VERSION := $(shell grep "^ *Gnat_Static_Version_String" $(fsrcpfx)gnatvsn.ads | sed -e 's/.*(\(.*\)).*/\1/' -e 's/\(..\)\(..\)\(....\)/\2,\3/')
  TOOLS_LIBS_LO := --for-linker=sys\\$$\$$library:trace.exe
  LIBRARY_VERSION := $(subst .,_,$(LIB_VERSION))
endif

ifeq ($(strip $(filter-out cygwin32% mingw32% pe,$(osys))),)
  LIBGNAT_TARGET_PAIRS = \
  a-calend.adb<a-calend-mingw.adb \
  a-dirval.adb<a-dirval-mingw.adb \
  a-excpol.adb<a-excpol-abort.adb \
  a-intnam.ads<a-intnam-mingw.ads \
  a-numaux.adb<a-numaux-x86.adb \
  a-numaux.ads<a-numaux-x86.ads \
  s-gloloc.adb<s-gloloc-mingw.adb \
  s-inmaop.adb<s-inmaop-dummy.adb \
  s-interr.adb<s-interr-sigaction.adb \
  s-intman.adb<s-intman-mingw.adb \
  s-memory.adb<s-memory-mingw.adb \
  s-osinte.ads<s-osinte-mingw.ads \
  s-osprim.adb<s-osprim-mingw.adb \
  s-taprop.adb<s-taprop-mingw.adb \
  s-taspri.ads<s-taspri-mingw.ads \
  g-socthi.ads<g-socthi-mingw.ads \
  g-socthi.adb<g-socthi-mingw.adb \
  g-soccon.ads<g-soccon-mingw.ads \
  g-soliop.ads<g-soliop-mingw.ads \
  system.ads<system-mingw.ads

  TOOLS_TARGET_PAIRS= \
  mlib-tgt.adb<mlib-tgt-mingw.adb \
  indepsw.adb<indepsw-mingw.adb

  MISCLIB = -lwsock32
  GMEM_LIB = gmemlib
  PREFIX_OBJS = $(PREFIX_REAL_OBJS)
  EXTRA_GNATTOOLS = ../../gnatdll$(exeext)
  EXTRA_GNATMAKE_OBJS = mdll.o mdll-utl.o mdll-fil.o
  EXTRA_GNATRTL_NONTASKING_OBJS = g-regist.o
  soext = .dll
# ??? This will be replaced by gnatlib-shared-dual-win32 when GNAT auto-import
# support for array/record will be done.
  GNATLIB_SHARED = gnatlib-shared-win32
  LIBRARY_VERSION := $(LIB_VERSION)
endif

ifeq ($(strip $(filter-out powerpc% linux%,$(arch) $(osys))),)
  LIBGNAT_TARGET_PAIRS = \
  a-intnam.ads<a-intnam-linux.ads \
  g-soccon.ads<g-soccon-linux-ppc.ads \
  s-inmaop.adb<s-inmaop-posix.adb \
  s-intman.adb<s-intman-posix.adb \
  s-osinte.adb<s-osinte-posix.adb \
  s-osinte.ads<s-osinte-linux.ads \
  s-osprim.adb<s-osprim-posix.adb \
  s-taprop.adb<s-taprop-linux.adb \
  s-taspri.ads<s-taspri-posix.ads \
  s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
  system.ads<system-linux-ppc.ads

  TOOLS_TARGET_PAIRS =  \
    mlib-tgt.adb<mlib-tgt-linux.adb \
    indepsw.adb<indepsw-gnu.adb

  EH_MECHANISM=-gcc
  THREADSLIB = -lpthread
  GNATLIB_SHARED = gnatlib-shared-dual
  GMEM_LIB = gmemlib
  PREFIX_OBJS = $(PREFIX_REAL_OBJS)
  LIBRARY_VERSION := $(LIB_VERSION)
endif

ifeq ($(strip $(filter-out sparc% linux%,$(arch) $(osys))),)
  LIBGNAT_TARGET_PAIRS = \
  a-intnam.ads<a-intnam-linux.ads \
  s-inmaop.adb<s-inmaop-posix.adb \
  s-intman.adb<s-intman-posix.adb \
  s-osinte.adb<s-osinte-posix.adb \
  s-osinte.ads<s-osinte-linux.ads \
  s-osprim.adb<s-osprim-posix.adb \
  s-taprop.adb<s-taprop-linux.adb \
  s-taspri.ads<s-taspri-posix.ads \
  s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
  system.ads<system-linux-sparc.ads

  TOOLS_TARGET_PAIRS =  \
    mlib-tgt.adb<mlib-tgt-linux.adb \
    indepsw.adb<indepsw-gnu.adb

  EH_MECHANISM=-gcc
  THREADSLIB = -lpthread
  GNATLIB_SHARED = gnatlib-shared-dual
  GMEM_LIB = gmemlib
  PREFIX_OBJS = $(PREFIX_REAL_OBJS)
  LIBRARY_VERSION := $(LIB_VERSION)
endif

ifeq ($(strip $(filter-out hppa% linux%,$(arch) $(osys))),)
  LIBGNAT_TARGET_PAIRS = \
  a-intnam.ads<a-intnam-linux.ads \
  s-inmaop.adb<s-inmaop-posix.adb \
  s-intman.adb<s-intman-posix.adb \
  s-osinte.adb<s-osinte-posix.adb \
  s-osinte.ads<s-osinte-linux-hppa.ads \
  s-osprim.adb<s-osprim-posix.adb \
  s-taprop.adb<s-taprop-linux.adb \
  s-taspri.ads<s-taspri-posix.ads \
  s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
  system.ads<system-linux-hppa.ads

  TOOLS_TARGET_PAIRS =  \
    mlib-tgt.adb<mlib-tgt-linux.adb \
    indepsw.adb<indepsw-gnu.adb

  EH_MECHANISM=-gcc
  THREADSLIB = -lpthread
  GNATLIB_SHARED = gnatlib-shared-dual
  GMEM_LIB = gmemlib
  PREFIX_OBJS = $(PREFIX_REAL_OBJS)
  LIBRARY_VERSION := $(LIB_VERSION)
endif

ifeq ($(strip $(filter-out %ia64 linux%,$(arch) $(osys))),)
  LIBGNAT_TARGET_PAIRS = \
  a-intnam.ads<a-intnam-linux.ads \
  a-numaux.ads<a-numaux-libc-x86.ads \
  g-soccon.ads<g-soccon-linux-64.ads \
  s-inmaop.adb<s-inmaop-posix.adb \
  s-intman.adb<s-intman-posix.adb \
  s-osinte.ads<s-osinte-linux.ads \
  s-osinte.adb<s-osinte-posix.adb \
  s-osprim.adb<s-osprim-posix.adb \
  s-taprop.adb<s-taprop-linux.adb \
  s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
  s-taspri.ads<s-taspri-posix.ads \
  system.ads<system-linux-ia64.ads

  TOOLS_TARGET_PAIRS =  \
    mlib-tgt.adb<mlib-tgt-linux.adb \
    indepsw.adb<indepsw-gnu.adb

  EH_MECHANISM=-gcc
  MISCLIB=
  THREADSLIB=-lpthread
  GNATLIB_SHARED=gnatlib-shared-dual
  GMEM_LIB = gmemlib
  PREFIX_OBJS=$(PREFIX_REAL_OBJS)
  LIBRARY_VERSION := $(LIB_VERSION)
endif

ifeq ($(strip $(filter-out alpha% linux%,$(arch) $(osys))),)
  LIBGNAT_TARGET_PAIRS = \
  a-intnam.ads<a-intnam-linux.ads \
  s-inmaop.adb<s-inmaop-posix.adb \
  s-intman.adb<s-intman-posix.adb \
  s-osinte.ads<s-osinte-linux-alpha.ads \
  s-osinte.adb<s-osinte-posix.adb \
  s-osprim.adb<s-osprim-posix.adb \
  s-taprop.adb<s-taprop-linux.adb \
  s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
  s-taspri.ads<s-taspri-posix.ads \
  system.ads<system-linux-alpha.ads

  TOOLS_TARGET_PAIRS =  \
    mlib-tgt.adb<mlib-tgt-linux.adb \
    indepsw.adb<indepsw-gnu.adb

  EH_MECHANISM=-gcc
  MISCLIB=
  THREADSLIB=-lpthread
  GNATLIB_SHARED=gnatlib-shared-dual
  PREFIX_OBJS=$(PREFIX_REAL_OBJS)
  LIBRARY_VERSION := $(LIB_VERSION)
endif

ifeq ($(strip $(filter-out %x86_64 linux%,$(arch) $(osys))),)
  LIBGNAT_TARGET_PAIRS = \
  a-intnam.ads<a-intnam-linux.ads \
  a-numaux.adb<a-numaux-x86.adb \
  a-numaux.ads<a-numaux-x86.ads \
  g-soccon.ads<g-soccon-linux-64.ads \
  s-inmaop.adb<s-inmaop-posix.adb \
  s-intman.adb<s-intman-posix.adb \
  s-osinte.ads<s-osinte-linux.ads \
  s-osinte.adb<s-osinte-posix.adb \
  s-osprim.adb<s-osprim-posix.adb \
  s-taprop.adb<s-taprop-linux.adb \
  s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
  s-taspri.ads<s-taspri-posix.ads \
  system.ads<system-linux-x86_64.ads

  TOOLS_TARGET_PAIRS =  \
    mlib-tgt.adb<mlib-tgt-linux.adb \
    indepsw.adb<indepsw-gnu.adb

  EH_MECHANISM=-gcc
  THREADSLIB=-lpthread
  GNATLIB_SHARED=gnatlib-shared-dual
  GMEM_LIB = gmemlib
  PREFIX_OBJS=$(PREFIX_REAL_OBJS)
  LIBRARY_VERSION := $(LIB_VERSION)
endif

ifeq ($(strip $(filter-out powerpc darwin%,$(arch) $(osys))),)
  LIBGNAT_TARGET_PAIRS = \
  a-intnam.ads<a-intnam-darwin.ads \
  s-inmaop.adb<s-inmaop-posix.adb \
  s-intman.adb<s-intman-posix.adb \
  s-osinte.adb<s-osinte-darwin.adb \
  s-osinte.ads<s-osinte-darwin.ads \
  s-osprim.adb<s-osprim-posix.adb \
  s-taprop.adb<s-taprop-posix.adb \
  s-taspri.ads<s-taspri-posix.ads \
  s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
  g-soccon.ads<g-soccon-darwin.ads \
  a-numaux.ads<a-numaux-darwin.ads \
  a-numaux.adb<a-numaux-darwin.adb \
  system.ads<system-darwin-ppc.ads

  TOOLS_TARGET_PAIRS =  \
    mlib-tgt.adb<mlib-tgt-darwin.adb

  EH_MECHANISM=-gcc
  GNATLIB_SHARED = gnatlib-shared-darwin
  SO_OPTS = -Wl,-flat_namespace -shared-libgcc
  RANLIB = ranlib -c
  GMEM_LIB = gmemlib
  PREFIX_OBJS=$(PREFIX_REAL_OBJS)
  LIBRARY_VERSION := $(LIB_VERSION)
  soext = .dylib
endif

ifneq ($(EH_MECHANISM),)
  LIBGNAT_TARGET_PAIRS += a-exexpr.adb<a-exexpr$(EH_MECHANISM).adb
  EXTRA_LIBGNAT_SRCS+=raise$(EH_MECHANISM).c
  EXTRA_LIBGNAT_OBJS+=raise$(EH_MECHANISM).o
endif

# Use the Ada 2005 version of Ada.Exceptions by default, unless specified
# explicitely already. The base files (a-except.ad?) are used only for building
# the compiler and other basic tools.
# These base versions lack Ada 2005 additions which would cause bootstrap
# problems if included in the compiler and other basic tools.

ifeq ($(filter-out a-except%,$(LIBGNAT_TARGET_PAIRS)),$(LIBGNAT_TARGET_PAIRS))
  LIBGNAT_TARGET_PAIRS += \
    a-except.ads<a-except-2005.ads \
    a-except.adb<a-except-2005.adb
endif

# The runtime library for gnat comprises two directories.  One contains the
# Ada source files that the compiler (gnat1) needs -- these files are listed
# by ADA_INCLUDE_SRCS -- and the other contains the object files and their
# corresponding .ali files for the parts written in Ada, libgnat.a for
# the parts of the runtime written in C, and libgthreads.a for the pthreads
# emulation library.  LIBGNAT_OBJS lists the objects that go into libgnat.a,
# while GNATRTL_OBJS lists the object files compiled from Ada sources that
# go into the directory.  The pthreads emulation is built in the threads
# subdirectory and copied.
LIBGNAT_SRCS = ada.h adaint.c adaint.h argv.c cio.c cstreams.c \
  errno.c exit.c cal.c ctrl_c.c env.c env.h \
  raise.h raise.c sysdep.c aux-io.c init.c initialize.c seh_init.c \
  final.c tracebak.c tb-alvms.c tb-alvxw.c tb-gcc.c expect.c mkdir.c \
  socket.c gsocket.h targext.c $(EXTRA_LIBGNAT_SRCS)

LIBGNAT_OBJS = adaint.o argv.o cio.o cstreams.o ctrl_c.o errno.o exit.o env.o \
  raise.o sysdep.o aux-io.o init.o initialize.o seh_init.o cal.o \
  final.o tracebak.o expect.o mkdir.o socket.o targext.o $(EXTRA_LIBGNAT_OBJS)

# NOTE ??? - when the -I option for compiling Ada code is made to work,
#  the library installation will change and there will be a
#  GNAT_RTL_SRCS.  Right now we count on being able to build GNATRTL_OBJS
#  from ADA_INCLUDE_SRCS.

# GNATRTL_NONTASKING_OBJS and GNATRTL_TASKING_OBJS can be found in
# the following include file:

include $(fsrcdir)/Makefile.rtl

GNATRTL_OBJS = $(GNATRTL_NONTASKING_OBJS) $(GNATRTL_TASKING_OBJS) \
  g-trasym.o memtrack.o

# Default run time files

ADA_INCLUDE_SRCS =\
 ada.ads calendar.ads directio.ads gnat.ads interfac.ads ioexcept.ads \
 machcode.ads text_io.ads unchconv.ads unchdeal.ads \
 sequenio.ads system.ads memtrack.adb \
 a-[a-o]*.adb a-[p-z]*.adb a-[a-o]*.ads a-[p-z]*.ads g-*.ad? i-*.ad? \
 s-[a-o]*.adb s-[p-z]*.adb s-[a-o]*.ads s-[p-z]*.ads  

LIBGNAT=../rts/libgnat.a 
GCC_LINK=$(CC) -static-libgcc $(ADA_INCLUDES)

# when compiling the tools, the runtime has to be first on the path so that
# it hides the runtime files lying with the rest of the sources
ifeq ($(TOOLSCASE),native)
  vpath %.ads ../rts ../
  vpath %.adb ../rts ../
  vpath %.c   ../rts ../
  vpath %.h   ../rts ../
endif

# in the cross tools case, everything is compiled with the native 
# gnatmake/link. Therefore only -I needs to be modified in ADA_INCLUDES
ifeq ($(TOOLSCASE),cross)
  vpath %.ads ../
  vpath %.adb ../
  vpath %.c   ../
  vpath %.h   ../
endif


../../gnatchop$(exeext): 
	$(GNATMAKE) -c $(ADA_INCLUDES) gnatchop --GCC="$(CC) $(ALL_ADAFLAGS)"
	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatchop 
	$(GNATLINK) -v gnatchop -o $@ --GCC="$(GCC_LINK)" $(TOOLS_LIBS)

../../gnat$(exeext): 
	$(GNATMAKE) -c $(ADA_INCLUDES) gnatcmd --GCC="$(CC) $(ALL_ADAFLAGS)"
	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatcmd 
	$(GNATLINK) -v gnatcmd -o $@ --GCC="$(GCC_LINK)" $(TOOLS_LIBS)

../../gnatkr$(exeext): 
	$(GNATMAKE) -c $(ADA_INCLUDES) gnatkr --GCC="$(CC) $(ALL_ADAFLAGS)"
	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatkr 
	$(GNATLINK) -v gnatkr -o $@ --GCC="$(GCC_LINK)" $(TOOLS_LIBS)

../../gnatls$(exeext): 
	$(GNATMAKE) -c $(ADA_INCLUDES) gnatls --GCC="$(CC) $(ALL_ADAFLAGS)"
	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatls 
	$(GNATLINK) -v gnatls -o $@ --GCC="$(GCC_LINK)" $(TOOLS_LIBS)

../../gnatname$(exeext): 
	$(GNATMAKE) -c $(ADA_INCLUDES) gnatname --GCC="$(CC) $(ALL_ADAFLAGS)"
	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatname 
	$(GNATLINK) -v gnatname -o $@ --GCC="$(GCC_LINK)" $(TOOLS_LIBS)

../../gprmake$(exeext): 
	$(GNATMAKE) -c $(ADA_INCLUDES) gprmake --GCC="$(CC) $(ALL_ADAFLAGS)"
	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gprmake
	$(GNATLINK) -v gprmake -o $@ --GCC="$(GCC_LINK)" $(TOOLS_LIBS)

../../gnatprep$(exeext): 
	$(GNATMAKE) -c $(ADA_INCLUDES) gnatprep --GCC="$(CC) $(ALL_ADAFLAGS)"
	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatprep 
	$(GNATLINK) -v gnatprep -o $@ --GCC="$(GCC_LINK)" $(TOOLS_LIBS)

../../gnatxref$(exeext): 
	$(GNATMAKE) -c $(ADA_INCLUDES) gnatxref --GCC="$(CC) $(ALL_ADAFLAGS)"
	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatxref 
	$(GNATLINK) -v gnatxref -o $@ --GCC="$(GCC_LINK)" $(TOOLS_LIBS)

../../gnatfind$(exeext): 
	$(GNATMAKE) -c $(ADA_INCLUDES) gnatfind --GCC="$(CC) $(ALL_ADAFLAGS)"
	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatfind 
	$(GNATLINK) -v gnatfind -o $@ --GCC="$(GCC_LINK)" $(TOOLS_LIBS)

../../gnatclean$(exeext): 
	$(GNATMAKE) -c $(ADA_INCLUDES) gnatclean --GCC="$(CC) $(ALL_ADAFLAGS)"
	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatclean
	$(GNATLINK) -v gnatclean -o $@ --GCC="$(GCC_LINK)" $(TOOLS_LIBS)

../../gnatsym$(exeext): 
	$(GNATMAKE) -c $(ADA_INCLUDES) gnatsym --GCC="$(CC) $(ALL_ADAFLAGS)"
	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatsym
	$(GNATLINK) -v gnatsym -o $@ --GCC="$(GCC_LINK)" $(TOOLS_LIBS)

../../gnatdll$(exeext): 
	$(GNATMAKE) -c $(ADA_INCLUDES) gnatdll --GCC="$(CC) $(ALL_ADAFLAGS)"
	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) $(GNATBIND_FLAGS) gnatdll
	$(GNATLINK) -v gnatdll -o $@ --GCC="$(GCC_LINK)" $(TOOLS_LIBS)

../../vxaddr2line$(exeext): targext.o
	$(GNATMAKE) -c  $(ADA_INCLUDES) vxaddr2line --GCC="$(CC) $(ALL_ADAFLAGS)"
	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) vxaddr2line 
	$(GNATLINK) -v vxaddr2line -o $@ --GCC="$(GCC_LINK)" targext.o $(CLIB)

gnatmake-re:  link.o targext.o
	$(GNATMAKE) $(ADA_INCLUDES) -u sdefault --GCC="$(CC) $(MOST_ADA_FLAGS)"
	$(GNATMAKE) -c $(ADA_INCLUDES) gnatmake --GCC="$(CC) $(ALL_ADAFLAGS)"
	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatmake 
	$(GNATLINK) -v gnatmake -o ../../gnatmake$(exeext) \
		--GCC="$(GCC_LINK)" $(TOOLS_LIBS)

# Note the use of the "mv" command in order to allow gnatlink to be linked with
# with the former version of gnatlink itself which cannot override itself.
gnatlink-re:  link.o targext.o
	$(GNATMAKE) -c $(ADA_INCLUDES) gnatlink --GCC="$(CC) $(ALL_ADAFLAGS)"
	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatlink 
	$(GNATLINK) -v gnatlink -o ../../gnatlinknew$(exeext) \
		    --GCC="$(GCC_LINK)" $(TOOLS_LIBS)
	$(MV)  ../../gnatlinknew$(exeext)  ../../gnatlink$(exeext)
  
# Needs to be built with CC=gcc
# Since the RTL should be built with the latest compiler, remove the
#  stamp target in the parent directory whenever gnat1 is rebuilt

# Likewise for the tools
../../gnatmake$(exeext): $(P) b_gnatm.o link.o targext.o $(GNATMAKE_OBJS)
	$(GCC_LINK) $(ALL_CFLAGS) $(LDFLAGS) -o $@ b_gnatm.o $(GNATMAKE_OBJS) \
		    $(TOOLS_LIBS)

../../gnatlink$(exeext): $(P) b_gnatl.o link.o targext.o $(GNATLINK_OBJS)
	$(GCC_LINK) $(ALL_CFLAGS) $(LDFLAGS) -o $@ b_gnatl.o $(GNATLINK_OBJS) \
		    $(TOOLS_LIBS)

../../gnatbl$(exeext): gnatbl.o
	$(GCC_LINK) -o $@ $(ALL_CFLAGS) $(LDFLAGS) gnatbl.o $(TOOLS_LIBS)

gnatbl.o: gnatbl.c adaint.h
	$(CC) $(ALL_CFLAGS) $(INCLUDES) -c $< $(OUTPUT_OPTION)

../stamp-gnatlib:
	@if [ ! -f stamp-gnatlib ] ; \
	then \
	  $(ECHO) You must first build the GNAT library: make gnatlib; \
	  false; \
	else \
	  true; \
	fi

install-gnatlib: ../stamp-gnatlib
#	Create the directory before deleting it, in case the directory is
#	a list of directories (as it may be on VMS). This ensures we are
#	deleting the right one.
	-$(MKDIR) $(DESTDIR)$(ADA_RTL_OBJ_DIR)
	-$(MKDIR) $(DESTDIR)$(ADA_INCLUDE_DIR)
	$(RMDIR) $(DESTDIR)$(ADA_RTL_OBJ_DIR)
	$(RMDIR) $(DESTDIR)$(ADA_INCLUDE_DIR)
	-$(MKDIR) $(DESTDIR)$(ADA_RTL_OBJ_DIR)
	-$(MKDIR) $(DESTDIR)$(ADA_INCLUDE_DIR)
	for file in rts/*.ali; do \
	    $(INSTALL_DATA_DATE) $$file $(DESTDIR)$(ADA_RTL_OBJ_DIR); \
	done
	-$(INSTALL_DATA) rts/g-trasym$(objext) $(DESTDIR)$(ADA_RTL_OBJ_DIR)
	-cd rts; for file in *$(arext);do \
	    $(INSTALL_DATA) $$file $(DESTDIR)$(ADA_RTL_OBJ_DIR); \
	    $(RANLIB_FOR_TARGET) $(DESTDIR)$(ADA_RTL_OBJ_DIR)/$$file; \
	done
	-$(foreach file, $(EXTRA_ADALIB_FILES), \
	    $(INSTALL_DATA_DATE) rts/$(file) $(DESTDIR)$(ADA_RTL_OBJ_DIR) && \
	) true
#     Install the shared libraries, if any, using $(INSTALL) instead
#     of $(INSTALL_DATA). The latter may force a mode inappropriate
#     for shared libraries on some targets, e.g. on HP-UX where the x
#     permission is required.
	for file in gnat gnarl; do \
	   if [ -f rts/lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext) ]; then \
	      $(INSTALL) rts/lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext) \
			 $(DESTDIR)$(ADA_RTL_OBJ_DIR); \
	   fi; \
	   if [ -f rts/lib$${file}$(soext) ]; then \
	      $(LN_S) lib$${file}$(hyphen)$(LIBRARY_VERSION)$(soext) \
	      $(DESTDIR)$(ADA_RTL_OBJ_DIR)/lib$${file}$(soext); \
	   fi; \
	done
# This copy must be done preserving the date on the original file.
	for file in rts/*.adb rts/*.ads; do \
	    $(INSTALL_DATA_DATE) $$file $(DESTDIR)$(ADA_INCLUDE_DIR); \
	done
	cd $(DESTDIR)$(ADA_INCLUDE_DIR); $(CHMOD) a-wx *.adb
	cd $(DESTDIR)$(ADA_INCLUDE_DIR); $(CHMOD) a-wx *.ads

../stamp-gnatlib2:
	$(RM) rts/s-*.ali
	$(RM) rts/s-*$(objext)
	$(RM) rts/a-*.ali
	$(RM) rts/a-*$(objext)
	$(RM) rts/*.ali
	$(RM) rts/*$(objext)
	$(RM) rts/*$(arext)
	$(RM) rts/*$(soext)
	touch ../stamp-gnatlib2
	$(RM) ../stamp-gnatlib

# NOTE: The $(foreach ...) commands assume ";" is the valid separator between
#       successive target commands. Although the Gnu make documentation
#       implies this is true on all systems, I suspect it may not be, So care
#       has been taken to allow a sed script to look for ";)" and substitue
#       for ";" the appropriate character in the range of lines below
#       beginning with "GNULLI Begin" and ending with "GNULLI End"

# GNULLI Begin ###########################################################

../stamp-gnatlib1: Makefile ../stamp-gnatlib2
	$(RMDIR) rts
	$(MKDIR) rts
	$(CHMOD) u+w rts
# Copy target independent sources
	$(foreach f,$(ADA_INCLUDE_SRCS) $(LIBGNAT_SRCS), \
	  $(LN_S) $(fsrcpfx)$(f) rts ;) true
# Remove files to be replaced by target dependent sources
	$(RM) $(foreach PAIR,$(LIBGNAT_TARGET_PAIRS), \
	                rts/$(word 1,$(subst <, ,$(PAIR))))
	$(RM) rts/*-*-*.ads rts/*-*-*.adb
# Copy new target dependent sources
	$(foreach PAIR,$(LIBGNAT_TARGET_PAIRS), \
	          $(LN_S) $(fsrcpfx)$(word 2,$(subst <, ,$(PAIR))) \
	                rts/$(word 1,$(subst <, ,$(PAIR)));)
	$(RM) ../stamp-gnatlib
	touch ../stamp-gnatlib1

# GNULLI End #############################################################

# Don't use semicolon separated shell commands that involve list expansions.
# The semicolon triggers a call to DCL on VMS and DCL can't handle command
# line lengths in excess of 256 characters.
# Example: cd rts; ar rc libfoo.a $(LONG_LIST_OF_OBJS)
# is guaranteed to overflow the buffer.

gnatlib: ../stamp-gnatlib1 ../stamp-gnatlib2
	$(MAKE) -C rts \
		CC="`echo \"$(GCC_FOR_TARGET)\" \
		| sed -e 's,^\./xgcc,../../xgcc,' -e 's,-B\./,-B../../,'`" \
	        INCLUDES="$(INCLUDES_FOR_SUBDIR) -I./../.." \
                CFLAGS="$(GNATLIBCFLAGS_FOR_C)" \
		srcdir=$(fsrcdir) \
	        -f ../Makefile $(LIBGNAT_OBJS)
	$(MAKE) -C rts \
		CC="`echo \"$(GCC_FOR_TARGET)\" \
		| sed -e 's,^\./xgcc,../../xgcc,' -e 's,-B\./,-B../../,'`" \
	        ADA_INCLUDES="" \
                CFLAGS="$(GNATLIBCFLAGS)" \
	        ADAFLAGS="$(GNATLIBFLAGS)" \
		srcdir=$(fsrcdir) \
	        -f ../Makefile \
	        $(GNATRTL_OBJS)
	$(RM) rts/libgnat$(arext) rts/libgnarl$(arext)
	$(AR_FOR_TARGET) $(AR_FLAGS) rts/libgnat$(arext) \
	   $(addprefix rts/,$(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS))
        ifneq ($(PREFIX_OBJS),)
		$(AR_FOR_TARGET) $(AR_FLAGS) rts/libgccprefix$(arext) \
		  $(PREFIX_OBJS);
		$(RANLIB_FOR_TARGET) rts/libgccprefix$(arext)
        endif
	$(RANLIB_FOR_TARGET) rts/libgnat$(arext)
	$(AR_FOR_TARGET) $(AR_FLAGS) rts/libgnarl$(arext) \
	   $(addprefix rts/,$(GNATRTL_TASKING_OBJS))
	$(RANLIB_FOR_TARGET) rts/libgnarl$(arext)
        ifeq ($(GMEM_LIB),gmemlib)
		$(AR_FOR_TARGET) $(AR_FLAGS) rts/libgmem$(arext) \
		  rts/memtrack.o
		$(RANLIB_FOR_TARGET) rts/libgmem$(arext)
        endif
	$(CHMOD) a-wx rts/*.ali
	touch ../stamp-gnatlib

# Warning: this target assumes that LIBRARY_VERSION has been set correctly.
gnatlib-shared-default:
	$(MAKE) $(FLAGS_TO_PASS) \
             GNATLIBFLAGS="$(GNATLIBFLAGS)" \
	     GNATLIBCFLAGS="$(GNATLIBCFLAGS) $(TARGET_LIBGCC2_CFLAGS)" \
	     THREAD_KIND="$(THREAD_KIND)" \
             gnatlib
	$(RM) rts/libgna*$(soext)
	cd rts; ../../xgcc -B../../ -shared $(GNATLIBCFLAGS) \
		$(TARGET_LIBGCC2_CFLAGS) \
		-o libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
		$(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS) \
		$(SO_OPTS)libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
		$(MISCLIB) -lm
	cd rts; ../../xgcc -B../../ -shared $(GNATLIBCFLAGS) \
		$(TARGET_LIBGCC2_CFLAGS) \
		-o libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
		$(GNATRTL_TASKING_OBJS) \
		$(SO_OPTS)libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
		$(THREADSLIB)
	cd rts; $(LN_S) libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
		libgnat$(soext)
	cd rts; $(LN_S) libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
		libgnarl$(soext)

gnatlib-shared-dual:
	$(MAKE) $(FLAGS_TO_PASS) \
             GNATLIBFLAGS="$(GNATLIBFLAGS)" \
	     GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
	     THREAD_KIND="$(THREAD_KIND)" \
             gnatlib-shared-default
	$(MV) rts/libgna*$(soext) .
	$(RM) ../stamp-gnatlib2
	$(MAKE) $(FLAGS_TO_PASS) \
             GNATLIBFLAGS="$(GNATLIBFLAGS)" \
	     GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
	     THREAD_KIND="$(THREAD_KIND)" \
             gnatlib
	$(MV) libgna*$(soext) rts

gnatlib-shared-dual-win32:
	$(MAKE) $(FLAGS_TO_PASS) \
             GNATLIBFLAGS="$(GNATLIBFLAGS)" \
	     GNATLIBCFLAGS="$(GNATLIBCFLAGS) $(TARGET_LIBGCC2_CFLAGS)" \
	     THREAD_KIND="$(THREAD_KIND)" \
             gnatlib-shared-win32
	$(MV) rts/libgna*$(soext) .
	$(RM) ../stamp-gnatlib2
	$(MAKE) $(FLAGS_TO_PASS) \
             GNATLIBFLAGS="$(GNATLIBFLAGS)" \
	     GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
	     THREAD_KIND="$(THREAD_KIND)" \
             gnatlib
	$(MV) libgna*$(soext) rts

# ??? we need to add the option to support auto-import of arrays/records to
# the GNATLIBFLAGS when this will be supported by GNAT. At this point we will
# use the gnatlib-shared-dual-win32 target to build the GNAT runtimes on
# Windows.
gnatlib-shared-win32:
	$(MAKE) $(FLAGS_TO_PASS) \
             GNATLIBFLAGS="$(GNATLIBFLAGS)" \
	     GNATLIBCFLAGS="$(GNATLIBCFLAGS) $(TARGET_LIBGCC2_CFLAGS)" \
	     THREAD_KIND="$(THREAD_KIND)" \
             gnatlib
	$(RM) rts/libgna*$(soext)
	cd rts; ../../xgcc -B../../ -shared $(TARGET_LIBGCC2_CFLAGS) \
		-o libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
		$(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS) \
		$(SO_OPTS)libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) $(MISCLIB)
	cd rts; ../../xgcc -B../../ -shared $(TARGET_LIBGCC2_CFLAGS) \
		-o libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
		$(GNATRTL_TASKING_OBJS) \
		$(SO_OPTS)libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
		$(THREADSLIB) -Wl,libgnat$(hyphen)$(LIBRARY_VERSION)$(soext)

gnatlib-shared-darwin:
	$(MAKE) $(FLAGS_TO_PASS) \
	     GNATLIBFLAGS="$(GNATLIBFLAGS)" \
	     GNATLIBCFLAGS="$(GNATLIBCFLAGS) $(TARGET_LIBGCC2_CFLAGS) \
	                    -fno-common" \
	     THREAD_KIND="$(THREAD_KIND)" \
	     gnatlib
	$(RM) rts/libgnat$(soext) rts/libgnarl$(soext)
	cd rts; ../../xgcc -B../../ -dynamiclib $(TARGET_LIBGCC2_CFLAGS) \
		-o libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
		$(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS) \
		$(SO_OPTS) \
		$(MISCLIB) -lm
	cd rts; ../../xgcc -B../../ -dynamiclib $(TARGET_LIBGCC2_CFLAGS) \
		-o libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
		$(GNATRTL_TASKING_OBJS) \
		$(SO_OPTS) \
		$(THREADSLIB) -Wl,libgnat$(hyphen)$(LIBRARY_VERSION)$(soext)
	cd rts; $(LN_S) libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
		libgnat$(soext)
	cd rts; $(LN_S) libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
		libgnarl$(soext)

gnatlib-shared-vms:
	$(MAKE) $(FLAGS_TO_PASS) \
             GNATLIBFLAGS="$(GNATLIBFLAGS)" \
	     GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
	     THREAD_KIND="$(THREAD_KIND)" \
             gnatlib
	$(RM) rts/libgna*$(soext)
	cd rts && echo "case_sensitive=yes" > SYMVEC_$$$$.opt && \
	objdump --syms $(LIBGNAT_OBJS) $(GNATRTL_NONTASKING_OBJS) | \
	$(SHLIB_SYMVEC) >> SYMVEC_$$$$.opt && \
	echo "case_sensitive=NO" >> SYMVEC_$$$$.opt && \
	../../xgcc -g -B../../ -nostartfiles -shared -shared-libgcc \
	   -o libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) libgnat.a \
	   sys\$$library:trace.exe \
	   --for-linker=/noinform \
	   --for-linker=SYMVEC_$$$$.opt \
	   --for-linker=gsmatch=equal,$(GSMATCH_VERSION)
	cd rts && echo "case_sensitive=yes" > SYMVEC_$$$$.opt && \
	objdump --syms $(GNATRTL_TASKING_OBJS) | \
	$(SHLIB_SYMVEC) >> SYMVEC_$$$$.opt && \
	echo "case_sensitive=NO" >> SYMVEC_$$$$.opt && \
	../../xgcc -g -B../../ -nostartfiles -shared -shared-libgcc \
	   -o libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
	   libgnarl.a libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
	   sys\$$library:trace.exe \
	   --for-linker=/noinform \
	   --for-linker=SYMVEC_$$$$.opt \
	   --for-linker=gsmatch=equal,$(GSMATCH_VERSION)

gnatlib-shared:
	$(MAKE) $(FLAGS_TO_PASS) \
             GNATLIBFLAGS="$(GNATLIBFLAGS)" \
	     GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
	     THREAD_KIND="$(THREAD_KIND)" \
	     TARGET_LIBGCC2_CFLAGS="$(TARGET_LIBGCC2_CFLAGS)" \
             $(GNATLIB_SHARED)

gnatlib-sjlj:
	$(MAKE) $(FLAGS_TO_PASS) EH_MECHANISM="" ../stamp-gnatlib1
	sed -e 's/ZCX_By_Default.*/ZCX_By_Default            : constant Boolean := False;/' rts/system.ads > rts/s.ads
	$(MV) rts/s.ads rts/system.ads
	$(MAKE) $(FLAGS_TO_PASS) \
	     EH_MECHANISM="" \
	     GNATLIBFLAGS="$(GNATLIBFLAGS)" \
	     GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
	     THREAD_KIND="$(THREAD_KIND)" \
	     TARGET_LIBGCC2_CFLAGS="$(TARGET_LIBGCC2_CFLAGS)" gnatlib

gnatlib-zcx:
	$(MAKE) $(FLAGS_TO_PASS) EH_MECHANISM="-gcc" ../stamp-gnatlib1
	sed -e 's/ZCX_By_Default.*/ZCX_By_Default            : constant Boolean := True;/' rts/system.ads > rts/s.ads
	$(MV) rts/s.ads rts/system.ads
	$(MAKE) $(FLAGS_TO_PASS) \
	     EH_MECHANISM="-gcc" \
	     GNATLIBFLAGS="$(GNATLIBFLAGS)" \
	     GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
	     THREAD_KIND="$(THREAD_KIND)" \
	     TARGET_LIBGCC2_CFLAGS="$(TARGET_LIBGCC2_CFLAGS)" gnatlib

# .s files for cross-building
gnat-cross: force
	make $(GNAT1_ADA_OBJS) CC="gcc -B../stage1/" CFLAGS="-S -gnatp"

# Compiling object files from source files.

# Note that dependencies on obstack.h are not written
# because that file is not part of GCC.
# Dependencies on gvarargs.h are not written
# because all that file does, when not compiling with GCC,
# is include the system varargs.h.

b_gnatl.c : $(GNATLINK_OBJS)
	$(GNATBIND) -C $(ADA_INCLUDES) -o b_gnatl.c gnatlink.ali
b_gnatl.o : b_gnatl.c

b_gnatm.c : $(GNATMAKE_OBJS)
	$(GNATBIND) -C $(ADA_INCLUDES) -o b_gnatm.c gnatmake.ali
b_gnatm.o : b_gnatm.c

ADA_INCLUDE_DIR = $(libsubdir)/adainclude
ADA_RTL_OBJ_DIR = $(libsubdir)/adalib

# force no sibling call optimization on s-traceb.o so the number of stack
# frames to be skipped when computing a call chain is not modified by
# optimization. However we can do that only when building the runtime
# (not the compiler) because the -fno-optimize-sibling-calls exists
# only in GCC 3.

ifneq (,$(findstring xgcc,$(CC)))
NO_SIBLING_ADAFLAGS=-fno-optimize-sibling-calls
else
NO_SIBLING_ADAFLAGS=
endif

s-traceb.o  : s-traceb.adb
	$(CC) -c $(ALL_ADAFLAGS) $(FORCE_DEBUG_ADAFLAGS) \
	      $(NO_SIBLING_ADAFLAGS) $(ADA_INCLUDES) \
      $< $(OUTPUT_OPTION)

# force debugging information on s-tasdeb.o so that it is always
# possible to set conditional breakpoints on tasks.

s-tasdeb.o  : s-tasdeb.adb s-tasdeb.ads
	$(CC) -c $(ALL_ADAFLAGS) $(FORCE_DEBUG_ADAFLAGS) -O0 $(ADA_INCLUDES) \
	      $< $(OUTPUT_OPTION)

# force debugging information on a-except.o so that it is always
# possible to set conditional breakpoints on exceptions.
# use -O1 otherwise gdb isn't able to get a full backtrace on mips targets.

a-except.o  : a-except.adb a-except.ads
	$(CC) -c $(ALL_ADAFLAGS) $(FORCE_DEBUG_ADAFLAGS) -O1 -fno-inline \
	      $(ADA_INCLUDES) $< $(OUTPUT_OPTION)

# force debugging information on s-assert.o so that it is always
# possible to set breakpoint on assert failures.

s-assert.o  : s-assert.adb s-assert.ads a-except.ads
	$(CC) -c $(ALL_ADAFLAGS) $(FORCE_DEBUG_ADAFLAGS) -O2 $(ADA_INCLUDES) \
	      $< $(OUTPUT_OPTION)

adadecode.o : adadecode.c adadecode.h
aux-io.o  : aux-io.c
argv.o    : argv.c
cal.o     : cal.c
deftarg.o : deftarg.c
errno.o   : errno.c
exit.o    : adaint.h exit.c
expect.o  : expect.c
final.o   : final.c
gmem.o    : gmem.c
link.o    : link.c
mkdir.o   : mkdir.c
socket.o  : socket.c gsocket.h
sysdep.o  : sysdep.c
raise-gcc.o : raise-gcc.c raise.h
raise.o   : raise.c raise.h

gen-soccon: gen-soccon.c gsocket.h
	$(CC) $(ALL_CFLAGS) $(ADA_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
		-UIN_GCC -DTARGET=\"$(target_alias)\" \
		$< $(OUTPUT_OPTION)

cio.o     : cio.c
	$(CC) -c $(ALL_CFLAGS) $(ADA_CFLAGS) \
	         $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)

init.o    : init.c adaint.h raise.h
	$(CC) -c $(ALL_CFLAGS) $(ADA_CFLAGS) \
	         $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)

initialize.o : initialize.c raise.h
	$(CC) -c $(ALL_CFLAGS) $(ADA_CFLAGS) \
	         $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)

targext.o : targext.c
	$(CC) -c $(ALL_CFLAGS) $(ADA_CFLAGS) \
		$(ALL_CPPFLAGS) $(INCLUDES_FOR_SUBDIR) \
		$< $(OUTPUT_OPTION)

# No optimization to compile this file as optimizations (-O1 or above) breaks
# the SEH handling on Windows. The reasons are not clear.
seh_init.o : seh_init.c raise.h
	$(CC) -c $(ALL_CFLAGS) $(ADA_CFLAGS) -O0 \
	         $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)

# Need to keep the frame pointer in this file to pop the stack properly on
# some targets.
tracebak.o  : tracebak.c tb-alvms.c tb-alvxw.c tb-gcc.c
	$(CC) -c $(ALL_CFLAGS) $(ADA_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
	      -fno-omit-frame-pointer $< $(OUTPUT_OPTION)

# In GNU Make, ignore whether `stage*' exists.
.PHONY: stage1 stage2 stage3 stage4 clean realclean TAGS bootstrap
.PHONY: risky-stage1 risky-stage2 risky-stage3 risky-stage4

force:

# Gnatlbr, Vms_help, and Gnat.hlp are only used on VMS

../../gnatlbr$(exeext): ../../prefix.o
	$(GNATMAKE) -c $(ADA_INCLUDES) gnatlbr --GCC="$(CC) $(ALL_ADAFLAGS)"
	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) gnatlbr
	$(GNATLINK) -v gnatlbr -o $@ --GCC="$(GCC_LINK)" $(TOOLS_LIBS)

../../vms_help$(exeext):
	$(GNATMAKE) -c $(ADA_INCLUDES) vms_help --GCC="$(CC) $(ALL_ADAFLAGS)"
	$(GNATBIND) $(ADA_INCLUDES) $(GNATBIND_FLAGS) vms_help
	$(GNATLINK) -v vms_help -o $@ --GCC="$(GCC_LINK)" $(TOOLS_LIBS)

../../gnat.hlp: ../../vms_help$(exeext)
	../../vms_help$(exeext) $(fsrcdir)/gnat.help_in \
	                        $(fsrcdir)/vms_data.ads ../../gnat.hlp
