# Copyright Vladimir Prus 2004. # Copyright Toon Knapen 2004. # Distributed under the Boost Software License, Version 1.0. # (See accompanying file LICENSE_1_0.txt # or copy at http://www.boost.org/LICENSE_1_0.txt) # # Boost.Build V2 toolset for the IBM XL C++ compiler # import toolset : flags ; import feature ; import common ; import generators ; import os ; feature.extend toolset : vacpp ; toolset.inherit vacpp : unix ; generators.override vacpp.prebuilt : builtin.prebuilt ; generators.override vacpp.searched-lib-generator : searched-lib-generator ; # Configure the vacpp toolset rule init ( version ? : command * : options * ) { local condition = [ common.check-init-parameters vacpp : version $(version) ] ; command = [ common.get-invocation-command vacpp : xlC : $(command) : "/usr/vacpp/bin/xlC" ] ; common.handle-options vacpp : $(condition) : $(command) : $(options) ; } # Declare generators generators.register-c-compiler vacpp.compile.c : C : OBJ : vacpp ; generators.register-c-compiler vacpp.compile.c++ : CPP : OBJ : vacpp ; # Allow C++ style comments in C files flags vacpp CFLAGS : -qcpluscmt ; # Declare flags flags vacpp CFLAGS off : -qNOOPTimize ; flags vacpp CFLAGS speed : -O3 -qstrict ; flags vacpp CFLAGS space : -O2 -qcompact ; # Discretionary inlining (not recommended) flags vacpp CFLAGS off : -qnoinline ; flags vacpp CFLAGS on : -qinline ; #flags vacpp CFLAGS full : -qinline ; flags vacpp CFLAGS full : ; # Exception handling flags vacpp C++FLAGS off : -qnoeh ; flags vacpp C++FLAGS on : -qeh ; # Run-time Type Identification flags vacpp C++FLAGS off : -qnortti ; flags vacpp C++FLAGS on : -qrtti ; # Enable 64-bit memory addressing model flags vacpp CFLAGS 64 : -q64 ; flags vacpp LINKFLAGS 64 : -q64 ; flags vacpp ARFLAGS aix/64 : -X 64 ; # Use absolute path when generating debug information flags vacpp CFLAGS on : -g -qfullpath ; flags vacpp LINKFLAGS on : -g -qfullpath ; flags vacpp LINKFLAGS off : -s ; if [ os.name ] = AIX { flags vacpp.compile C++FLAGS : -qfuncsect ; # The -bnoipath strips the prepending (relative) path of libraries from # the loader section in the target library or executable. Hence, during # load-time LIBPATH (identical to LD_LIBRARY_PATH) or a hard-coded # -blibpath (*similar* to -lrpath/-lrpath-link) is searched. Without # this option, the prepending (relative) path + library name is # hard-coded in the loader section, causing *only* this path to be # searched during load-time. Note that the AIX linker does not have an # -soname equivalent, this is as close as it gets. # # The above options are definately for AIX 5.x, and most likely also for # AIX 4.x and AIX 6.x. For details about the AIX linker see: # http://download.boulder.ibm.com/ibmdl/pub/software/dw/aix/es-aix_ll.pdf # flags vacpp.link LINKFLAGS shared : -bnoipath ; # Run-time linking flags vacpp.link EXE-LINKFLAGS shared : -brtl ; } else { # Linux PPC flags vacpp.compile CFLAGS shared : -qpic=large ; flags vacpp FINDLIBS : rt ; } # Profiling flags vacpp CFLAGS on : -pg ; flags vacpp LINKFLAGS on : -pg ; flags vacpp.compile OPTIONS ; flags vacpp.compile.c++ OPTIONS ; flags vacpp DEFINES ; flags vacpp UNDEFS ; flags vacpp HDRS ; flags vacpp STDHDRS ; flags vacpp.link OPTIONS ; flags vacpp ARFLAGS ; flags vacpp LIBPATH ; flags vacpp NEEDLIBS ; flags vacpp FINDLIBS ; flags vacpp FINDLIBS ; # Select the compiler name according to the threading model. flags vacpp VA_C_COMPILER single : xlc ; flags vacpp VA_C_COMPILER multi : xlc_r ; flags vacpp VA_CXX_COMPILER single : xlC ; flags vacpp VA_CXX_COMPILER multi : xlC_r ; SPACE = " " ; flags vacpp.link.dll HAVE_SONAME linux : "" ; actions vacpp.link bind NEEDLIBS { $(VA_CXX_COMPILER) $(EXE-LINKFLAGS) $(LINKFLAGS) -o "$(<[1])" -L$(LIBPATH) -L$(STDLIBPATH) "$(>)" "$(NEEDLIBS)" "$(NEEDLIBS)" -l$(FINDLIBS) $(OPTIONS) $(USER_OPTIONS) } actions vacpp.link.dll bind NEEDLIBS { xlC_r -G $(LINKFLAGS) -o "$(<[1])" $(HAVE_SONAME)-Wl,-soname$(SPACE)-Wl,$(<[-1]:D=) -L$(LIBPATH) -L$(STDLIBPATH) "$(>)" "$(NEEDLIBS)" "$(NEEDLIBS)" -l$(FINDLIBS) $(OPTIONS) $(USER_OPTIONS) } actions vacpp.compile.c { $(VA_C_COMPILER) -c $(OPTIONS) $(USER_OPTIONS) -I$(BOOST_ROOT) -U$(UNDEFS) -D$(DEFINES) $(CFLAGS) -I"$(HDRS)" -I"$(STDHDRS)" -o "$(<)" "$(>)" } actions vacpp.compile.c++ { $(VA_CXX_COMPILER) -c $(OPTIONS) $(USER_OPTIONS) -I$(BOOST_ROOT) -U$(UNDEFS) -D$(DEFINES) $(CFLAGS) $(C++FLAGS) -I"$(HDRS)" -I"$(STDHDRS)" -o "$(<)" "$(>)" } actions updated together piecemeal vacpp.archive { ar $(ARFLAGS) ru "$(<)" "$(>)" }