## -*-makefile-*-
## 390-specific setup 
## Copyright (c) 1999-2001, International Business Machines Corporation and
## others. All Rights Reserved.
##
## $Id: mh-os390,v 1.34 2002/02/12 20:04:52 yves-oss Exp $

###################################################################
#                    IMPORTANT NOTE                               #
###################################################################
# Before you try to run the Makefile, make sure you have the      #
# environment variables set.                                      #
#                                                                 #
# If you are going to do the OS390BATCH build, make sure you have #
# the OS390BATCH environment variable set.                        #
#                                                                 #
#   export OS390BATCH=1                                           #
#                                                                 #
# To build a version of ICU which uses IEEE Floating point        #
#                                                                 #
#   export IEEE390=1                                              #
#                                                                 #
###################################################################

ifeq (${IEEE390}, 1)
ICU_IEEE          = -Wc,"float(ieee)" -DIEEE_754=1
else
ICU_IEEE          = -DIEEE_754=0
endif

# TODO: Consider using  -Wc,roc,rent for making the data readonly
CFLAGS390=      -Wc,"langlvl(extended),spill(2000)" $(ICU_BUILD_OPTIONS)  $(ICU_IEEE) -Wc,dll,expo
## OS390BATCH
ifeq (${OS390BATCH},1)
DEFS390=        -D_OPEN_THREADS -D_XOPEN_SOURCE_EXTENDED -D_SHR_TZNAME -D_SHR_TIMEZONE -DOS390BATCH
else
DEFS390=        -D_OPEN_THREADS -D_XOPEN_SOURCE_EXTENDED -D_SHR_TZNAME -D_SHR_TIMEZONE
endif
ARFLAGS=        -cr
OS390DATA=      1


## Commands to generate dependency files
GEN_DEPS.c=	makedep                        
GEN_DEPS.cc=	makedep

## Commands to compile
COMPILE.c=	_CXX_CXXSUFFIX="cpp" _CXX_STEPS="-1" $(CXX) $(DEFS) $(CPPFLAGS) $(CFLAGS) $(CFLAGS390) $(DEFS390) -c
COMPILE.cc=	_CXX_CXXSUFFIX="cpp" _CXX_STEPS="-1" $(CXX) $(DEFS) $(CPPFLAGS) $(CFLAGS) $(CFLAGS390) $(DEFS390) -c

# Commands to link
LINK.c=		$(CC) $(DEFS) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) 
LINK.cc=	$(CXX) $(DEFS) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) 

## Commands for shared library (dll)
SHLIB.c=	$(LINK.c) -Wl,dll
SHLIB.cc=	$(LINK.cc) -Wl,dll

## Compiler switch to embed a runtime search path
LD_RPATH=	-I

## Environment variable to set a runtime search path
LDLIBRARYPATH_ENVVAR = LIBPATH

## Versioned target for a shared library.
FINAL_SO_TARGET = $(basename $(SO_TARGET)).$(SO_TARGET_VERSION).$(SO)
MIDDLE_SO_TARGET = $(basename $(SO_TARGET).$(SO))

## Shared object suffix (switch to dll for shared library build)
SO = dll
## Non-shared intermediate object suffix
STATIC_O = o

## Suffix of the subset data library for batch mode
BATCH_STUB_SUFFIX=_390

ifeq ($(OS390BATCH),1)
BATCH_STUB_TARGET=	"//'${LOADMOD}(IXMI${SO_TARGET_VERSION_MAJOR}D1)'"
BATCH_LIBICUUC=		"//'${LOADEXP}(IXMI${SO_TARGET_VERSION_MAJOR}UC)'"
BATCH_LIBICUDT=		"//'${LOADEXP}(IXMI${SO_TARGET_VERSION_MAJOR}D1)'"
endif

## Link commands to link to ICU libs
LIBICUDT=	$(top_builddir)/stubdata/lib$(ICUDATA_NAME)$(ICULIBSUFFIX)$(BATCH_STUB_SUFFIX).x
LIBICUUC=	$(top_builddir)/common/li$(ICUPREFIX)uc$(ICULIBSUFFIX).$(SO_TARGET_VERSION).x
LIBICUI18N=	$(top_builddir)/i18n/lib$(ICUPREFIX)i18n$(ICULIBSUFFIX).$(SO_TARGET_VERSION).x
LIBICULE=	$(top_builddir)/layout/lib$(ICUPREFIX)le$(ICULIBSUFFIX).$(SO_TARGET_VERSION).x
LIBCTESTFW=	$(top_builddir)/tools/ctestfw/lib$(ICUPREFIX)ctestfw$(ICULIBSUFFIX).$(SO_TARGET_VERSION).x
LIBICUTOOLUTIL=	$(top_builddir)/tools/toolutil/lib$(ICUPREFIX)toolutil$(ICULIBSUFFIX).$(SO_TARGET_VERSION).x
LIBUSTDIO=	$(top_builddir)/extra/ustdio/libustdio$(ICULIBSUFFIX).$(SO_TARGET_VERSION).x

## Special 390 rules

## Build archive from object
%.a : $(OBJECTS)
	$(AR) $(ARFLAGS) $@ $(OBJECTS)

## Compilation rules
%.$(STATIC_O): $(srcdir)/%.c
	$(COMPILE.c) $(STATICCPPFLAGS) $(STATICCFLAGS) -o $@ $<
%.o: $(srcdir)/%.c
	$(COMPILE.c) $(DYNAMICCPPFLAGS) $(DYNAMICCFLAGS) -o $@ $<

%.$(STATIC_O): $(srcdir)/%.cpp
	$(COMPILE.cc) $(STATICCPPFLAGS) $(STATICCXXFLAGS) -o $@ $<
%.o: $(srcdir)/%.cpp
	$(COMPILE.cc) $(DYNAMICCPPFLAGS) $(DYNAMICCXXFLAGS) -o $@ $<

## Dependency rules
%.d : %.u
	@$(SHELL) -ec 'cat $<  \
		| sed '\''s/\($*\)\.o[ :]*/\1.o $@ : /g'\'' > $@; \
		[ -s $@ ] || rm -f $@ ; rm -f $<'

%.u : $(srcdir)/%.c
	@echo "generating dependency information for $<"
	@$(SHELL) -ec 'touch            $*.u  > /dev/null 2>&1'
	@$(SHELL) -ec '$(GEN_DEPS.c) -f $*.u $< > /dev/null 2>&1'

%.u : $(srcdir)/%.cpp
	@echo "generating dependency information for $<"
	@$(SHELL) -ec 'touch              $*.u  > /dev/null 2>&1'
	@$(SHELL) -ec '$(GEN_DEPS.cc)  -f $*.u $< > /dev/null 2>&1'

## Versioned libraries rules
%.$(SO): %.$(SO_TARGET_VERSION).$(SO)
	$(RM) $@ && ln -s $*.$(SO_TARGET_VERSION).$(SO) $@

## End 390-specific setup
