# $Id$ # This file is for use with AIX 5.x and up, using either of the IBM # compilers (Visual Age C++ 6 or newer compiler). debug ?= 1 distrib ?= 0 exceptions ?= 1 optimize ?= 0 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 , 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 SOEXT = so SOFLAGS += -G LDFLAGS += -brtl #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 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 ifeq ($(XLCVERSION),0x0800) 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 ifeq ($(XLCVERSION),0x0900) 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 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 # 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 CCFLAGS += -qrtti=all 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 OCCFLAGS += -qlibansi -O2 -qarch=com