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