diff options
Diffstat (limited to 'ACE/include/makeinclude/platform_aix_ibm.GNU')
-rw-r--r-- | ACE/include/makeinclude/platform_aix_ibm.GNU | 199 |
1 files changed, 199 insertions, 0 deletions
diff --git a/ACE/include/makeinclude/platform_aix_ibm.GNU b/ACE/include/makeinclude/platform_aix_ibm.GNU new file mode 100644 index 00000000000..d785081274d --- /dev/null +++ b/ACE/include/makeinclude/platform_aix_ibm.GNU @@ -0,0 +1,199 @@ +# $Id$ + +# This file is for use with AIX 4.3 and up, using either of the IBM +# compilers (IBM C/C++ 3.6.6 or Visual Age C++ 5 or 6 batch compiler). +# If you wish to use the CSet++ compiler, please use platform_aix4_cset++.GNU. +# Note that as of ACE 5.4, the only supported compilers from IBM are +# Visual Age C++ 6 and up. + +debug ?= 1 +distrib ?= 0 +exceptions ?= 1 +optimize ?= 0 +rtti ?= 1 +threads ?= 1 +buildbits ?= 32 + +ifeq (,$(inline)) +ifeq (1,$(debug)) + inline = 0 +else + inline = 1 +endif +endif + +# First, find out which compiler we're building with. The settings we +# use for compiling, as well as how to build shared libraries, depend on +# the compiler version. There's no easy way to ask lslpp which is installed. +# Instead, compile a file and see which compiler is set up for use. This +# trick was submitted by Craig Rodrigues <rodrigc@mediaone.net>, originally +# from the vacpp compiler newsgroup. +# It relies on the preprocessor defining __xlC__ to the proper version +# number of the compiler. +XLCVERSION := $(shell echo "__xlC__" > ./testxlCvers.cpp;xlC -E ./testxlCvers.cpp | tail -n 1;$(RM) testxlCvers.cpp) +#XLCVERSION := $(shell xlC -E ./testAIXCompilerVersion.cpp | tail -1') +#ACE_AIX_CLEAN := $(shell $(RM) ./testAIXCompilerVersion.cpp) + +# In case anything here or in the config depends on OS version number, +# grab it here and pass it all to the compiler as well. +AIX_MAJOR_VERS := $(shell uname -v) +AIX_MINOR_VERS := $(shell uname -r) +AIX_VERS := $(AIX_MAJOR_VERS)0$(AIX_MINOR_VERS) + +# Use of exceptions should be a compiler-specific setting, but for now it's +# not. IBM C/C++ doesn't have a way to turn exceptions off, and Visual +# Age C++ V5 building ACE without exception handling causes segv on startup +# of every test. Until this is straightened out, force exceptions=1 for +# both compilers. +exceptions=1 + +# Yes, believe it or not... +# The way to make a shared lib on AIX is to make a shared object file and +# then put that in an archive. +# Non-shared archives are named lib<x>ns.a - ns = non-shared. +SOEXT = a +# aix_build turns on the funky shared library building code in +# rules.lib.GNU +aix_build = 1 +#SHR_FILTER=$(ACE_ROOT)/bin/aix_shr + +ifeq ($(threads),1) +# Note - the _r form of the compiler command turns on -qthreads and the +# thread-required preprocessor defines, as well as -lpthreads for linking. +# If this is Visual Age C++ 5, DLD will get reset below. +CC = xlc_r +CXX = xlC_r +DLD = makeC++SharedLib_r +else +CC = xlc +CXX = xlC +DLD = makeC++SharedLib +endif + +ARFLAGS = ruv +AR = ar +LD = $(SHR_FILTER) $(CXX) +RANLIB = ranlib + +CPPFLAGS += -DACE_AIX_VERS=$(AIX_VERS) + +# AIX 5.2 offers POSIX aio, but the Visual Age C++ compiler can't grok the +# aio.h header file. This is a known problem and will be addressed in +# May 2004 (per IBM). This is a workaround for it, supplied by IBM. +# When the compiler fix is released, this workaround (and the change +# to -qflag, below) can be removed. (Steve Huston) +ifeq (502,$(AIX_VERS)) +CPPFLAGS += -U__C99_RESTRICT +endif + +# -qinitauto seems like an interesting option, but some tests (specifically +# Process_Strategy_Test) hang with it turned on. This should be investigated +# at some point. +DCCFLAGS += -g -qcheck=nobounds:div:null +DCFLAGS += -g + +# Now sort out the compiler differences here... +ifeq ($(XLCVERSION),0x0306) + SHR_FILTER=$(ACE_ROOT)/bin/aix_shr + TEMPINCDIR = tempinc + CCFLAGS += -qlanglvl=ansi -qflag=e:e -qonce -qtempinc=$(TEMPINCDIR) -DACE_TEMPLATES_REQUIRE_PRAGMA + SOFLAGS += -p 0 +# ibmcxx_build turns on the extra step for instantiating and compiling +# template instances in rules.lib.GNU. + ibmcxx_build = 1 + rtti = 0 +else # Visual Age 5 and up + ifeq ($(XLCVERSION),0x0500) + SHR_FILTER=$(ACE_ROOT)/bin/aix_shr + TEMPINCDIR = tempinc + CCFLAGS += -qflag=w:w -qonce -qtempinc=$(TEMPINCDIR) + else + ifeq ($(XLCVERSION),0x0600) + # This is just for the workaround for aio, above. Without it, the + # compiler warns that __C99_RESTRICT is reserved. When that workaround + # is gone, this ifeq can be removed also. -qflag=w:w is what we want + # in the end. + CCFLAGS += -qtemplateregistry=templateregistry.$(MAKEFILE) + ifeq (502,$(AIX_VERS)) + CCFLAGS += -qflag=e:e + else + CCFLAGS += -qflag=w:w + endif + else + ifeq ($(XLCVERSION),0x0700) + CCFLAGS += -qflag=w:w + ifeq ($(templates),manual) + CCFLAGS += -qnotempinc -qnotemplateregistry + else + CCFLAGS += -qtemplateregistry=templateregistry.$(MAKEFILE) + endif + # According to documentation, default is -qeh, which is equivalent + # to -qeh=v5. Apparently 6.0 fixed some problems with nested + # try-catch blocks. + ifeq ($(exceptions),1) + CCFLAGS += -qeh=v6 + endif + else + CXX = echo "Unrecognized compiler version $(XLCVERSION)\n" + endif + endif + endif + DLD = $(CXX) -qmkshrobj + SOFLAGS += $(CCFLAGS) $(CPPFLAGS) $(INCLDIRS) + ifeq ($(buildbits),64) + DLD += -q64 + CFLAGS += -q64 -qwarn64 + CCFLAGS += -q64 -qwarn64 + ARFLAGS := -X64 $(ARFLAGS) + + # This option results in a crash of TAO when building 64bit with + # Visual Age 6. No idea why but don't use it when using Visual Age 6. + ifneq ($(XLCVERSION),0x0600) + # CCFLAGS += -qstaticinline + endif + else + # Using 32bit the staticinline option works. + #CCFLAGS += -qstaticinline + endif + CCFLAGS += -qfuncsect +endif + +# The Visual Age preprocessor is not usable with the TAO_IDL compiler. +# At the moment an idl file just contains includes of other idl files +# the Visual Age preprocessor doesn't report that file in the list of +# files that is used. The only way we can workaround this is using the +# gcc preprocessor, do this in your platform_macros.GNU is this +# causes problems +# TAO_IDL_PREPROCESSOR = gcc + +ifeq ($(exceptions),0) + CCFLAGS += -qnoeh +endif + +ifeq (1,$(rtti)) + CCFLAGS += -qrtti=all +else # ! rtti + CCFLAGS += -DACE_LACKS_RTTI +endif # ! rtti + +ifeq ($(shared_libs),1) +ACELIB = -lACE +else +ACELIB = -lACEns +endif + +LIBS += -lxti -ldl + +SONAME = +SOVERSION = +# Default OCCFLAGS builds common code for all RS/6000 architectures but +# this can be set to optimize for your particular computer. The commented +# out example optimizes for RS/6000 43P. +# OCCFLAGS is not used by default. To used it, set optimize=1 +# either in this file or on the command line. +#OCCFLAGS += -qarch=ppc -qtune=604 + +# -O2 is too much for Visual Age C++ 5.0. It ends up calling +# the wrong methods in some cases (orbsvcs/tests/EC_Throughput). +# Chad Elliott 7/24/2001 +OCCFLAGS += -qlibansi -O -qarch=com |