# This is the Unix/NT makefile used to build an alternate GNAT run-time.
# Note that no files in the original GNAT library dirctory will be
# modified by this procedure
#
# This Makefile requires Gnu make.
# Here is how to use this Makefile
#
# 1. Create a new directory (say adalib)
#    e.g.  $ mkdir adalib
#          $ cd adalib           
#
# 2. Copy this Makefile from the standard Adalib directory, e.g.
#    $ cp /usr/local/gnat/lib/gcc-lib/<target>/<version>/adalib/Makefile.adalib .
#
# 3. If needed (e.g for pragma Normalize_Scalars), create a gnat.adc
#    containing the configuration pragmas you want to use to build the library
#    e.g. $ echo pragma Normalize_Scalars; > gnat.adc
#    Note that this step is usually not needed, and most pragmas are not
#    relevant to the GNAT run time. 
#          
# 4. Determine the values of the following MACROS
#      ROOT   (location of GNAT installation, e.g /usr/local/gnat)
#    and optionnally
#      CFLAGS (back end compilation flags such as -g -O2)
#      ADAFLAGS (front end compilation flags such as -gnatpgn)
#                *beware* the minimum value for this MACRO is -gnatpg 
#                for proper compilation of the GNAT library
# 5a. If you are using a native compile, call make
#   e.g.  $ make -f Makefile.adalib ROOT=/usr/local/gnat CFLAGS="-g -O0"
#
# 5b. If you are using a cross compiler, you need to define two additional
#     MACROS:
#       CC    (name of the cross compiler)
#       AR    (name of the cross ar)
#
#   e.g.  $ make -f Makefile.adalib ROOT=/opt/gnu/gnat \
#     CFLAGS="-O2 -g -I/usr/wind/target/h" CC=powerpc-wrs-vxworks-gcc \
#     AR=arppc
#
# 6. put this new library on your Object PATH where you want to use it
# in place of the original one. This can be achieved for instance by
# updating the value of the environment variable ADA_OBJECTS_PATH

PWD_COMMAND=$${PWDCMD-pwd}
CC = gcc
AR = ar

ifeq ($(strip $(filter-out %sh,$(SHELL))),)
   GNAT_ROOT = $(shell cd $(ROOT);${PWD_COMMAND})/
else
   GNAT_ROOT = $(ROOT)/
endif

target = $(shell $(CC) -dumpmachine)
version = $(shell $(CC) -dumpversion)
ADA_INCLUDE_PATH = $(GNAT_ROOT)lib/gcc-lib/$(target)/$(version)/adainclude/
GCC_INCLUDE_PATH = $(GNAT_ROOT)lib/gcc-lib/$(target)/$(version)/gcc-include/
ADA_OBJECTS_PATH = $(GNAT_ROOT)lib/gcc-lib/$(target)/$(version)/adalib/

vpath %.adb $(ADA_INCLUDE_PATH)
vpath %.ads $(ADA_INCLUDE_PATH)
vpath %.c $(ADA_INCLUDE_PATH)
vpath %.h $(ADA_INCLUDE_PATH)

CFLAGS = -O2
GNATLIBCFLAGS = -DIN_RTS=1 -DIN_GCC=1 -fexceptions
ADAFLAGS = -gnatpgn
ALL_ADAFLAGS = $(CFLAGS) $(ADAFLAGS) -I. 
FORCE_DEBUG_ADAFLAGS = -g
INCLUDES = -I$(ADA_INCLUDE_PATH) -I$(GCC_INCLUDE_PATH)/include   \
-I$(GCC_INCLUDE_PATH)/gcc/config -I$(GCC_INCLUDE_PATH)/gcc       \
-I$(GCC_INCLUDE_PATH)/gcc/ada    -I$(GCC_INCLUDE_PATH)

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

.c.o:
	$(CC) -c $(CFLAGS) $(GNATLIBCFLAGS) $(INCLUDES) $<
.adb.o:
	$(CC) -c $(ALL_ADAFLAGS) $<
.ads.o:
	$(CC) -c $(ALL_ADAFLAGS) $<

GNAT_OBJS :=$(filter-out __%,$(shell $(AR) t $(ADA_OBJECTS_PATH)libgnat.a))
GNARL_OBJS:=$(filter-out __%,$(shell $(AR) t $(ADA_OBJECTS_PATH)libgnarl.a))
OBJS := $(GNAT_OBJS) $(GNARL_OBJS)

all: libgnat.a libgnarl.a delete_objects g-trasym.o
	chmod 0444 *.ali *.a

delete_objects:
	rm *.o

libgnat.a: $(GNAT_OBJS)
	$(AR) r libgnat.a $(GNAT_OBJS)

libgnarl.a: $(GNARL_OBJS)
	$(AR) r libgnarl.a $(GNARL_OBJS)

a-except.o: a-except.adb a-except.ads
	$(CC) -c $(FORCE_DEBUG_ADAFLAGS) $(ALL_ADAFLAGS) -O0 -fno-inline $<

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

s-tasdeb.o: s-tasdeb.adb
	$(CC) -c $(FORCE_DEBUG_ADAFLAGS) $(ALL_ADAFLAGS) $<

s-vaflop.o: s-vaflop.adb
	$(CC) -c $(FORCE_DEBUG_ADAFLAGS) -O $(ALL_ADAFLAGS) $<

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

s-traceb.o: s-traceb.adb
	$(CC) -c $(ALL_ADAFLAGS) $(FORCE_DEBUG_ADAFLAGS) -fno-optimize-sibling-calls $(ADA_INCLUDES) $<

tracebak.o: tracebak.c
	$(CC) -c $(CFLAGS) $(GNATLIBCFLAGS) \
		$(ALL_CPPFLAGS) $(INCLUDES) -fno-omit-frame-pointer $<

.PHONY: delete_objects
