/usr/share/boost-build/src/tools
Edit: /usr/share/boost-build/src/tools/vacpp.jam (5725B)
# 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)
#| tag::doc[]
[[bbv2.reference.tools.compiler.vacpp]]
= IBM Visual Age
The `vacpp` module supports the http://www.ibm.com/software/ad/vacpp[IBM
Visual Age] C++ Compiler, for the AIX operating system. Versions 7.1 and
8.0 are known to work.
The module is initialized using the following syntax:
----
using vacpp ;
----
The module does not accept any initialization options. The compiler
should be installed in the `/usr/vacpp/bin` directory.
Later versions of Visual Age are known as XL C/C++. They were not tested
with the the `vacpp` module.
|# # end::doc[]
#
# B2 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 definitely 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 "$(<)" "$(>)"
}