1# Copyright Vladimir Prus 2004. 2# Copyright Toon Knapen 2004. 3# Distributed under the Boost Software License, Version 1.0. 4# (See accompanying file LICENSE_1_0.txt 5# or copy at http://www.boost.org/LICENSE_1_0.txt) 6 7# 8# Boost.Build V2 toolset for the IBM XL C++ compiler 9# 10 11import toolset : flags ; 12import feature ; 13import common ; 14import generators ; 15import os ; 16 17feature.extend toolset : vacpp ; 18toolset.inherit vacpp : unix ; 19generators.override vacpp.prebuilt : builtin.prebuilt ; 20generators.override vacpp.searched-lib-generator : searched-lib-generator ; 21 22# Configure the vacpp toolset 23rule init ( version ? : command * : options * ) 24{ 25 local condition = [ 26 common.check-init-parameters vacpp : version $(version) ] ; 27 28 command = [ common.get-invocation-command vacpp : xlC 29 : $(command) : "/usr/vacpp/bin/xlC" ] ; 30 31 common.handle-options vacpp : $(condition) : $(command) : $(options) ; 32} 33 34# Declare generators 35generators.register-c-compiler vacpp.compile.c : C : OBJ : <toolset>vacpp ; 36generators.register-c-compiler vacpp.compile.c++ : CPP : OBJ : <toolset>vacpp ; 37 38# Allow C++ style comments in C files 39flags vacpp CFLAGS : -qcpluscmt ; 40 41# Declare flags 42flags vacpp CFLAGS <optimization>off : -qNOOPTimize ; 43flags vacpp CFLAGS <optimization>speed : -O3 -qstrict ; 44flags vacpp CFLAGS <optimization>space : -O2 -qcompact ; 45 46# Discretionary inlining (not recommended) 47flags vacpp CFLAGS <inlining>off : -qnoinline ; 48flags vacpp CFLAGS <inlining>on : -qinline ; 49#flags vacpp CFLAGS <inlining>full : -qinline ; 50flags vacpp CFLAGS <inlining>full : ; 51 52# Exception handling 53flags vacpp C++FLAGS <exception-handling>off : -qnoeh ; 54flags vacpp C++FLAGS <exception-handling>on : -qeh ; 55 56# Run-time Type Identification 57flags vacpp C++FLAGS <rtti>off : -qnortti ; 58flags vacpp C++FLAGS <rtti>on : -qrtti ; 59 60# Enable 64-bit memory addressing model 61flags vacpp CFLAGS <address-model>64 : -q64 ; 62flags vacpp LINKFLAGS <address-model>64 : -q64 ; 63flags vacpp ARFLAGS <target-os>aix/<address-model>64 : -X 64 ; 64 65# Use absolute path when generating debug information 66flags vacpp CFLAGS <debug-symbols>on : -g -qfullpath ; 67flags vacpp LINKFLAGS <debug-symbols>on : -g -qfullpath ; 68flags vacpp LINKFLAGS <debug-symbols>off : -s ; 69 70if [ os.name ] = AIX 71{ 72 flags vacpp.compile C++FLAGS : -qfuncsect ; 73 74 # The -bnoipath strips the prepending (relative) path of libraries from 75 # the loader section in the target library or executable. Hence, during 76 # load-time LIBPATH (identical to LD_LIBRARY_PATH) or a hard-coded 77 # -blibpath (*similar* to -lrpath/-lrpath-link) is searched. Without 78 # this option, the prepending (relative) path + library name is 79 # hard-coded in the loader section, causing *only* this path to be 80 # searched during load-time. Note that the AIX linker does not have an 81 # -soname equivalent, this is as close as it gets. 82 # 83 # The above options are definately for AIX 5.x, and most likely also for 84 # AIX 4.x and AIX 6.x. For details about the AIX linker see: 85 # http://download.boulder.ibm.com/ibmdl/pub/software/dw/aix/es-aix_ll.pdf 86 # 87 flags vacpp.link LINKFLAGS <link>shared : -bnoipath ; 88 89 # Run-time linking 90 flags vacpp.link EXE-LINKFLAGS <link>shared : -brtl ; 91} 92else 93{ 94 # Linux PPC 95 flags vacpp.compile CFLAGS <link>shared : -qpic=large ; 96 flags vacpp FINDLIBS : rt ; 97} 98 99# Profiling 100flags vacpp CFLAGS <profiling>on : -pg ; 101flags vacpp LINKFLAGS <profiling>on : -pg ; 102 103flags vacpp.compile OPTIONS <cflags> ; 104flags vacpp.compile.c++ OPTIONS <cxxflags> ; 105flags vacpp DEFINES <define> ; 106flags vacpp UNDEFS <undef> ; 107flags vacpp HDRS <include> ; 108flags vacpp STDHDRS <sysinclude> ; 109flags vacpp.link OPTIONS <linkflags> ; 110flags vacpp ARFLAGS <arflags> ; 111 112flags vacpp LIBPATH <library-path> ; 113flags vacpp NEEDLIBS <library-file> ; 114flags vacpp FINDLIBS <find-shared-library> ; 115flags vacpp FINDLIBS <find-static-library> ; 116 117# Select the compiler name according to the threading model. 118flags vacpp VA_C_COMPILER <threading>single : xlc ; 119flags vacpp VA_C_COMPILER <threading>multi : xlc_r ; 120flags vacpp VA_CXX_COMPILER <threading>single : xlC ; 121flags vacpp VA_CXX_COMPILER <threading>multi : xlC_r ; 122 123SPACE = " " ; 124 125flags vacpp.link.dll HAVE_SONAME <target-os>linux : "" ; 126 127actions vacpp.link bind NEEDLIBS 128{ 129 $(VA_CXX_COMPILER) $(EXE-LINKFLAGS) $(LINKFLAGS) -o "$(<[1])" -L$(LIBPATH) -L$(STDLIBPATH) "$(>)" "$(NEEDLIBS)" "$(NEEDLIBS)" -l$(FINDLIBS) $(OPTIONS) $(USER_OPTIONS) 130} 131 132actions vacpp.link.dll bind NEEDLIBS 133{ 134 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) 135} 136 137actions vacpp.compile.c 138{ 139 $(VA_C_COMPILER) -c $(OPTIONS) $(USER_OPTIONS) -I$(BOOST_ROOT) -U$(UNDEFS) -D$(DEFINES) $(CFLAGS) -I"$(HDRS)" -I"$(STDHDRS)" -o "$(<)" "$(>)" 140} 141 142actions vacpp.compile.c++ 143{ 144 $(VA_CXX_COMPILER) -c $(OPTIONS) $(USER_OPTIONS) -I$(BOOST_ROOT) -U$(UNDEFS) -D$(DEFINES) $(CFLAGS) $(C++FLAGS) -I"$(HDRS)" -I"$(STDHDRS)" -o "$(<)" "$(>)" 145} 146 147actions updated together piecemeal vacpp.archive 148{ 149 ar $(ARFLAGS) ru "$(<)" "$(>)" 150} 151