1## -*-makefile-*- 2## Copyright (C) 2016 and later: Unicode, Inc. and others. 3## License & terms of use: http://www.unicode.org/copyright.html 4## Aix-specific setup (for Visual Age 5+) 5## Copyright (c) 1999-2010, International Business Machines Corporation and 6## others. All Rights Reserved. 7 8## Commands to generate dependency files 9GEN_DEPS.c= $(CC) -E -M $(DEFS) $(CPPFLAGS) 10GEN_DEPS.cc= $(CXX) -E -M $(DEFS) $(CPPFLAGS) 11 12# -qroconst make the strings readonly, which is usually the default. 13# This helps in the data library, 14# -qproto assumes all functions are prototyped (for optimization) 15# -qrtti turns on compiler RTTI, required beginning with ICU 4.6 16CFLAGS += -qproto -qroconst -qlanglvl=extended 17CXXFLAGS += -qproto -qroconst -qrtti -qlanglvl=extended0x 18 19# If you readd this line, you must change the SO value 20#LDFLAGS += -brtl 21 22ifeq ($(UCLN_NO_AUTO_CLEANUP),0) 23# set up init point. 24UCLN_FINI = ucln_fini$(TARGET_STUBNAME)_$(SO_TARGET_VERSION_MAJOR)$(ICULIBSUFFIXCNAME) 25CPPFLAGS_FINI = -DUCLN_FINI=$(UCLN_FINI) 26LDFLAGS_FINI = -binitfini::$(UCLN_FINI) 27 28CPPFLAGSICUUC += $(CPPFLAGS_FINI) 29LDFLAGSICUUC += $(LDFLAGS_FINI) 30CPPFLAGSICUIO += $(CPPFLAGS_FINI) 31LDFLAGSICUIO += $(LDFLAGS_FINI) 32CPPFLAGSICUI18N += $(CPPFLAGS_FINI) 33LDFLAGSICUI18N += $(LDFLAGS_FINI) 34CPPFLAGSCTESTFW += $(CPPFLAGS_FINI) 35LDFLAGSCTESTFW += $(LDFLAGS_FINI) 36 37# ICUUC, ICUIO, ICUI18N, CTESTFW 38endif 39 40## We need to delete things prior to linking, or else we'll get 41## SEVERE ERROR: output file in use .. on AIX. 42## But, shell script version should NOT delete target as we don't 43## have $@ in that context. (SH = only shell script, icu-config) 44AIX_PREDELETE=rm -f $@ ; 45#SH# AIX_PREDELETE= 46 47## Commands to link 48## We need to use the C++ linker, even when linking C programs, since 49## our libraries contain C++ code (C++ static init not called) 50LINK.c= $(AIX_PREDELETE) $(CXX) $(CXXFLAGS) $(LDFLAGS) 51LINK.cc= $(AIX_PREDELETE) $(CXX) $(CXXFLAGS) $(LDFLAGS) 52 53## Commands to make a shared library 54## -G means -berok -brtl -bnortllib -bnosymbolic -bnoautoexp 55## -bh:8 means halt on errors or worse. We don't display warnings about 56## duplicate inline symbols. 57SHLIB.c= $(AIX_PREDELETE) $(CXX) -qmkshrobj -G $(LDFLAGS) 58SHLIB.cc= $(AIX_PREDELETE) $(CXX) -qmkshrobj -G $(LDFLAGS) 59 60## Compiler switch to embed a runtime search path 61LD_RPATH= -I 62LD_RPATH_PRE= 63 64## Environment variable to set a runtime search path 65LDLIBRARYPATH_ENVVAR = LIBPATH 66 67# The following is for Makefile.inc's use. 68ICULIBSUFFIX_VERSION = $(LIB_VERSION_MAJOR) 69 70# this one is for icudefs.mk's use 71ifeq ($(ENABLE_SHARED),YES) 72SO_TARGET_VERSION_SUFFIX = $(SO_TARGET_VERSION_MAJOR) 73endif 74 75LD_SONAME = 76 77## The type of assembly needed when pkgdata is used for generating shared libraries. 78GENCCODE_ASSEMBLY=-a xlc 79 80## Shared object suffix 81SOBJ= so 82# without the -brtl option, the library names use .a. AIX is funny that way. 83SO= a 84## Non-shared intermediate object suffix 85STATIC_O = o 86 87## Override Versioned target for a shared library. 88FINAL_SO_TARGET= $(basename $(SO_TARGET))$(SO_TARGET_VERSION).$(SO) 89MIDDLE_SO_TARGET= $(basename $(SO_TARGET))$(SO_TARGET_VERSION_MAJOR).$(SO) 90SHARED_OBJECT = $(notdir $(FINAL_SO_TARGET:.$(SO)=.$(SOBJ))) 91SHARED_OBJECT_NO_VERSION= $(basename $(SO_TARGET)).$(SOBJ) 92 93## Build archive from shared object 94%.a : %.so 95 ln -f $< $(SHARED_OBJECT_NO_VERSION) 96 $(AIX_PREDELETE) $(AR) $(ARFLAGS) $@ $(SHARED_OBJECT_NO_VERSION) 97 rm -f $(SHARED_OBJECT_NO_VERSION) 98$(LIBDIR)/%.a : %.so 99 ln -f $< $(SHARED_OBJECT_NO_VERSION) 100 $(AIX_PREDELETE) $(AR) $(ARFLAGS) $@ $(SHARED_OBJECT_NO_VERSION) 101 rm -f $(SHARED_OBJECT_NO_VERSION) 102 103## Build import list from export list 104%.e : %.exp 105 @echo "Building an import list for $<" 106 @$(SHELL) -ec "echo '#! $*.a($*.so)' | cat - $< > $@" 107 108## Compilation rules 109%.$(STATIC_O): $(srcdir)/%.c 110 $(COMPILE.c) $(STATICCPPFLAGS) $(STATICCFLAGS) -o $@ $< 111%.o: $(srcdir)/%.c 112 $(COMPILE.c) $(DYNAMICCPPFLAGS) $(DYNAMICCFLAGS) -o $@ $< 113 114 115## C++ compilation rules. 116 117# This causes escapesrc to be built before other ICU targets. 118NEED_ESCAPING=YES 119 120ifneq ($(SKIP_ESCAPING),) 121# no escaping - bootstrap 122%.o: $(srcdir)/%.cpp 123 $(COMPILE.cc) $(DYNAMICCPPFLAGS) $(DYNAMICCXXFLAGS) -o $@ $< 124else 125# convert *.cpp files to _*.cpp with \u / \U escaping 126CLEANFILES += _*.cpp 127 128# the actual escaping 129_%.cpp: $(srcdir)/%.cpp 130 @$(BINDIR)/escapesrc$(EXEEXT) $< $@ 131 132# compilation for static obj 133%.$(STATIC_O): _%.cpp 134 $(COMPILE.cc) $(STATICCPPFLAGS) $(STATICCXXFLAGS) -o $@ $< 135# compilation for dynamic obj 136%.o: _%.cpp 137 $(COMPILE.cc) $(DYNAMICCPPFLAGS) $(DYNAMICCXXFLAGS) -o $@ $< 138endif 139 140## Dependency rules 141%.d : %.u 142 @$(SHELL) -ec 'cat $< \ 143 | sed '\''s/\($*\)\.o[ :]*/\1.o $@ : /g'\'' > $@; \ 144 [ -s $@ ] || rm -f $@ ; rm -f $<' 145 146%.u : $(srcdir)/%.c 147 @echo "generating dependency information for $<" 148 @$(GEN_DEPS.c) $< > /dev/null 149 150%.u : $(srcdir)/%.cpp 151 @echo "generating dependency information for $<" 152 @$(GEN_DEPS.cc) $< > /dev/null 153 154## Versioned libraries rules 155%$(SO_TARGET_VERSION_MAJOR).$(SO): %$(SO_TARGET_VERSION).$(SO) 156 $(RM) $@ && ln -s ${*F}$(SO_TARGET_VERSION).$(SO) $@ 157%.$(SO): %$(SO_TARGET_VERSION).$(SO) 158 $(RM) $@ && ln -s ${*F}$(SO_TARGET_VERSION).$(SO) $@ 159 160## End Aix-specific setup 161