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
|
## -*-makefile-*-
## Copyright (C) 2016 and later: Unicode, Inc. and others.
## License & terms of use: http://www.unicode.org/copyright.html
## Copyright (c) 2003-2015 IBM, Ken Foskey, and others. All rights reserved.
##
## Aix-specific setup (for gcc)
##
## Please note: AIX does NOT have library versioning per se (there is no 'SONAME' capability).
## So, we are using 'windows' style library names, that is, libicuuc20.1.so instead of libicuuc.so.20.1
# When building stubdata, special considerations need to be made when building on AIX with GCC
BUILD_HOST_ICU=AIX_GCC
# Certain files don't compile in -ansi mode (e.g. umutex.c, toolutil.c, and cdatatst.c)
CFLAGS += -D_ALL_SOURCE
## Commands to generate dependency files
GEN_DEPS.c= $(CC) -E -MM $(DEFS) $(CPPFLAGS)
GEN_DEPS.cc= $(CXX) -E -MM $(DEFS) $(CPPFLAGS)
## 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)
## Shared library options
LD_SOOPTIONS= -Wl,-bsymbolic
## Commands to make a shared library
SHLIB.c= $(AIX_PREDELETE) $(CC) $(CFLAGS) $(LDFLAGS) -shared $(LD_SOOPTIONS)
SHLIB.cc= $(AIX_PREDELETE) $(CXX) $(CXXFLAGS) $(LDFLAGS) -shared $(LD_SOOPTIONS)
## Compiler switch to embed a runtime search path
LD_RPATH= -I
LD_RPATH_PRE=
## enable the shared lib loader
LDFLAGS += -Wl,-bbigtoc
## These are the library specific LDFLAGS
LDFLAGSICUDT=-nodefaultlibs -nostdlib
## 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=
## Environment variable to set a runtime search path
LDLIBRARYPATH_ENVVAR = LIBPATH
## 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)
# 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
## Compiler switch to embed a library name. Not present on AIX.
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
A= a
## Non-shared intermediate object suffix
STATIC_O = o
## Special AIX rules
## Build archive from shared object
%.a : %.so
ln -f $< $(SHARED_OBJECT_NO_VERSION)
$(AR) $(ARFLAGS) $@ $(SHARED_OBJECT_NO_VERSION)
rm -f $(SHARED_OBJECT_NO_VERSION)
$(LIBDIR)/%.a : %.so
ln -f $< $(SHARED_OBJECT_NO_VERSION)
$(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 $@ $<
%.$(STATIC_O): $(srcdir)/%.cpp
$(COMPILE.cc) $(STATICCPPFLAGS) $(STATICCXXFLAGS) -o $@ $<
%.o: $(srcdir)/%.cpp
$(COMPILE.cc) $(DYNAMICCPPFLAGS) $(DYNAMICCXXFLAGS) -o $@ $<
## Dependency rules
%.d: $(srcdir)/%.c
@echo "generating dependency information for $<"
@$(SHELL) -ec '$(GEN_DEPS.c) $< \
| sed '\''s%\($*\)\.o[ :]*%\1.o $@ : %g'\'' > $@; \
[ -s $@ ] || rm -f $@'
%.d: $(srcdir)/%.cpp
@echo "generating dependency information for $<"
@$(SHELL) -ec '$(GEN_DEPS.cc) $< \
| sed '\''s%\($*\)\.o[ :]*%\1.o $@ : %g'\'' > $@; \
[ -s $@ ] || rm -f $@'
## 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) $@
## BIR - bind with internal references [so app data and icu data doesn't collide]
# LDflags that pkgdata will use
BIR_LDFLAGS= -Wl,-bE:$(NAME).map,-bnoexpall
# Dependencies [i.e. map files] for the final library
BIR_DEPS= $(NAME).map
|