--- tools/build/v2/tools/vacpp.jam.orig 2009-11-24 06:48:06.000000000 -0500 +++ tools/build/v2/tools/vacpp.jam 2012-07-27 18:54:10.413628463 -0400 @@ -13,9 +13,30 @@ import common ; import generators ; import os ; +if [ os.name ] = LINUX +{ + import gcc ; +} feature.extend toolset : vacpp ; toolset.inherit vacpp : unix ; +if [ os.name ] = LINUX +{ + rule link ( targets * : sources * : properties * ) + { + gcc.quote-rpath $(targets) ; + } + + rule link.dll ( targets * : sources * : properties * ) + { + gcc.quote-rpath $(targets) ; + } + + rule archive ( targets * : sources * : properties * ) + { + gcc.archive $(targets) : $(sources) : $(properties) ; + } +} generators.override vacpp.prebuilt : builtin.prebuilt ; generators.override vacpp.searched-lib-generator : searched-lib-generator ; @@ -25,10 +46,15 @@ local condition = [ common.check-init-parameters vacpp : version $(version) ] ; - command = [ common.get-invocation-command vacpp : xlC + local tool-command = [ common.get-invocation-command vacpp : xlC : $(command) : "/usr/vacpp/bin/xlC" ] ; - common.handle-options vacpp : $(condition) : $(command) : $(options) ; + common.handle-options vacpp : $(condition) : $(tool-command) : $(options) ; + + if [ os.name ] = LINUX + { + gcc.init-link-flags vacpp gnu $(condition) ; + } } # Declare generators @@ -43,11 +69,10 @@ flags vacpp CFLAGS speed : -O3 -qstrict ; flags vacpp CFLAGS space : -O2 -qcompact ; -# Discretionary inlining (not recommended) +# Inlining flags vacpp CFLAGS off : -qnoinline ; -flags vacpp CFLAGS on : -qinline ; -#flags vacpp CFLAGS full : -qinline ; -flags vacpp CFLAGS full : ; +flags vacpp CFLAGS on : -qinline=noauto ; +flags vacpp CFLAGS full : -qinline=auto ; # Exception handling flags vacpp C++FLAGS off : -qnoeh ; @@ -59,18 +84,21 @@ # Enable 64-bit memory addressing model flags vacpp CFLAGS 64 : -q64 ; -flags vacpp LINKFLAGS 64 : -q64 ; -flags vacpp ARFLAGS aix/64 : -X 64 ; +flags vacpp.link OPTIONS 64 : -q64 ; +flags vacpp AIX_OBJ_MODE 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 ; +flags vacpp.link OPTIONS on : -g -qfullpath ; +flags vacpp.link OPTIONS aix/off/on : -s ; if [ os.name ] = AIX { flags vacpp.compile C++FLAGS : -qfuncsect ; + # Enable 32-bit Very Large Address-Space + flags vacpp.link OPTIONS 32 : -bmaxdata:0xAFFFFFFF/dsa ; + # 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 @@ -84,7 +112,7 @@ # 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 ; + flags vacpp.link OPTIONS shared : -bnoipath ; # Run-time linking flags vacpp.link EXE-LINKFLAGS shared : -brtl ; @@ -93,12 +121,13 @@ { # Linux PPC flags vacpp.compile CFLAGS shared : -qpic=large ; - flags vacpp FINDLIBS : rt ; + flags vacpp.link OPTIONS shared : -qpic=large ; + flags vacpp.link FINDLIBS-SA multi : rt ; } # Profiling flags vacpp CFLAGS on : -pg ; -flags vacpp LINKFLAGS on : -pg ; +flags vacpp.link OPTIONS on : -pg ; flags vacpp.compile OPTIONS ; flags vacpp.compile.c++ OPTIONS ; @@ -106,45 +135,71 @@ flags vacpp UNDEFS ; flags vacpp HDRS ; flags vacpp STDHDRS ; -flags vacpp.link OPTIONS ; + flags vacpp ARFLAGS ; +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 ; +flags vacpp.link USER_OPTIONS ; +flags vacpp.link LINKPATH ; +flags vacpp.link LIBRARIES ; +flags vacpp.link FINDLIBS-ST ; +flags vacpp.link FINDLIBS-SA ; + +# Select the compiler configuration stanza according to the threading model. +flags vacpp VA_C_COMPILER_CFG single : -F:xlc ; +flags vacpp VA_C_COMPILER_CFG multi : -F:xlc_r ; +flags vacpp VA_CXX_COMPILER_CFG single : -F:xlC ; +flags vacpp VA_CXX_COMPILER_CFG multi : -F:xlC_r ; SPACE = " " ; -flags vacpp.link.dll HAVE_SONAME linux : "" ; - -actions vacpp.link bind NEEDLIBS +if [ os.name ] = AIX { - $(VA_CXX_COMPILER) $(EXE-LINKFLAGS) $(LINKFLAGS) -o "$(<[1])" -L$(LIBPATH) -L$(STDLIBPATH) "$(>)" "$(NEEDLIBS)" "$(NEEDLIBS)" -l$(FINDLIBS) $(OPTIONS) $(USER_OPTIONS) + actions vacpp.link bind LIBRARIES + { + $(CONFIG_COMMAND) $(VA_CXX_COMPILER_CFG) $(EXE-LINKFLAGS) -o "$(<[1])" -L$(LINKPATH) "$(>)" "$(LIBRARIES)" "$(LIBRARIES)" -l$(FINDLIBS-ST) -l$(FINDLIBS-SA) $(OPTIONS) $(USER_OPTIONS) + } + + actions vacpp.link.dll bind LIBRARIES + { + $(CONFIG_COMMAND) $(VA_CXX_COMPILER_CFG) -G -o "$(<[1])" $(HAVE_SONAME)-Wl,-soname$(SPACE)-Wl,$(<[-1]:D=) -L$(LINKPATH) "$(>)" "$(LIBRARIES)" "$(LIBRARIES)" -l$(FINDLIBS-ST) -l$(FINDLIBS-SA) $(OPTIONS) $(USER_OPTIONS) + } } - -actions vacpp.link.dll bind NEEDLIBS +else { - 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 link bind LIBRARIES + { + $(CONFIG_COMMAND) $(VA_CXX_COMPILER_CFG) -L"$(LINKPATH)" -Wl,-R,$(RPATH) -Wl,-rpath-link,"$(RPATH_LINK)" -o "$(<[1])" $(START-GROUP) "$(>)" "$(LIBRARIES)" $(FINDLIBS-ST-PFX) -l$(FINDLIBS-ST) $(FINDLIBS-SA-PFX) -l$(FINDLIBS-SA) $(END-GROUP) $(OPTIONS) $(USER_OPTIONS) + } + actions link.dll bind LIBRARIES + { + $(CONFIG_COMMAND) $(VA_CXX_COMPILER_CFG) -G -L"$(LINKPATH)" -Wl,-R,$(RPATH) -o "$(<[1])" -Wl,-h,$(<[-1]:D=) $(START-GROUP) "$(>)" "$(LIBRARIES)" $(FINDLIBS-ST-PFX) -l$(FINDLIBS-ST) $(FINDLIBS-SA-PFX) -l$(FINDLIBS-SA) $(END-GROUP) $(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 "$(<)" "$(>)" + $(CONFIG_COMMAND) $(VA_C_COMPILER_CFG) -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 "$(<)" "$(>)" + $(CONFIG_COMMAND) $(VA_CXX_COMPILER_CFG) -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 +if [ os.name ] = AIX +{ + actions updated together piecemeal vacpp.archive + { + ar $(AIX_OBJ_MODE) $(ARFLAGS) rcu "$(<)" "$(>)" + ranlib $(AIX_OBJ_MODE) "$(<)" + } +} +else { - ar $(ARFLAGS) ru "$(<)" "$(>)" + actions piecemeal archive + { + ar $(ARFLAGS) rc "$(<)" "$(>)" + ranlib "$(<)" + } }