mirror of
https://github.com/boostorg/build.git
synced 2026-02-14 00:32:11 +00:00
Merge pull request #82 from camorton2/xlcpp-toolset-build
Xlcpp toolset build
This commit is contained in:
@@ -57,7 +57,7 @@ my_dir="."
|
||||
if test "x$TOOLSET" = x; then
|
||||
guessed_toolset=`$my_dir/src/engine/build.sh --guess-toolset`
|
||||
case $guessed_toolset in
|
||||
acc | darwin | gcc | como | mipspro | pathscale | pgi | qcc | vacpp )
|
||||
acc | darwin | gcc | como | mipspro | pathscale | pgi | qcc | vacpp | xlcpp )
|
||||
TOOLSET=$guessed_toolset
|
||||
;;
|
||||
|
||||
|
||||
@@ -336,13 +336,22 @@ toolset tru64cxx cc : "-o " : -D
|
||||
[ opt --debug : -g -O0 -pg ]
|
||||
-I$(--python-include) -I$(--extra-include)
|
||||
: -L$(--python-lib[1]) -l$(--python-lib[2]) ;
|
||||
## IBM VisualAge C++
|
||||
## IBM VisualAge C++ or IBM XL C/C++ for Aix or IBM XL C/C++ for Linux (Big endian)
|
||||
toolset vacpp xlc : "-o " : -D
|
||||
:
|
||||
[ opt --release : -s -O3 -qstrict -qinline ]
|
||||
[ opt --debug : -g -qNOOPTimize -qnoinline -pg ]
|
||||
-I$(--python-include) -I$(--extra-include)
|
||||
: -L$(--python-lib[1]) -l$(--python-lib[2]) [ if-os AIX : -bmaxdata:0x40000000 ] ;
|
||||
|
||||
## IBM XL C/C++ for Linux (little endian)
|
||||
toolset xlcpp xlC : "-o " : -D
|
||||
: -Wno-unused -Wno-format
|
||||
[ opt --release : -s ]
|
||||
[ opt --debug : -g -qNOOPTimize -qnoinline -pg ]
|
||||
-I$(--python-include) -I$(--extra-include)
|
||||
: -L$(--python-lib[1]) -l$(--python-lib[2]) ;
|
||||
|
||||
## Microsoft Visual C++ .NET 7.x
|
||||
toolset vc7 cl : /Fe /Fe /Fd /Fo : -D
|
||||
: /nologo
|
||||
|
||||
@@ -70,6 +70,15 @@ Guess_Toolset ()
|
||||
elif test_uname IRIX64 ; then BOOST_JAM_TOOLSET=mipspro
|
||||
elif test_uname OSF1 ; then BOOST_JAM_TOOLSET=tru64cxx
|
||||
elif test_uname QNX && test_path qcc ; then BOOST_JAM_TOOLSET=qcc
|
||||
elif test_uname Linux && test_path xlc; then
|
||||
if /usr/bin/lscpu | grep Byte | grep Little > /dev/null 2>&1 ; then
|
||||
# Little endian linux
|
||||
BOOST_JAM_TOOLSET=xlcpp
|
||||
else
|
||||
#Big endian linux
|
||||
BOOST_JAM_TOOLSET=vacpp
|
||||
fi
|
||||
elif test_uname AIX && test_path xlc; then BOOST_JAM_TOOLSET=vacpp
|
||||
elif test_path gcc ; then BOOST_JAM_TOOLSET=gcc
|
||||
elif test_path icc ; then BOOST_JAM_TOOLSET=intel-linux
|
||||
elif test -r /opt/intel/cc/9.0/bin/iccvars.sh ; then
|
||||
@@ -89,7 +98,6 @@ Guess_Toolset ()
|
||||
BOOST_JAM_TOOLSET_ROOT=/opt/intel/compiler50/ia32/
|
||||
elif test_path pgcc ; then BOOST_JAM_TOOLSET=pgi
|
||||
elif test_path pathcc ; then BOOST_JAM_TOOLSET=pathscale
|
||||
elif test_path xlc ; then BOOST_JAM_TOOLSET=vacpp
|
||||
elif test_path como ; then BOOST_JAM_TOOLSET=como
|
||||
elif test_path KCC ; then BOOST_JAM_TOOLSET=kcc
|
||||
elif test_path bc++ ; then BOOST_JAM_TOOLSET=kylix
|
||||
@@ -185,6 +193,10 @@ case $BOOST_JAM_TOOLSET in
|
||||
vacpp)
|
||||
BOOST_JAM_CC=xlc
|
||||
;;
|
||||
|
||||
xlcpp)
|
||||
BOOST_JAM_CC=xlc
|
||||
;;
|
||||
|
||||
como)
|
||||
BOOST_JAM_CC="como --c"
|
||||
|
||||
151
src/tools/xlcpp.jam
Normal file
151
src/tools/xlcpp.jam
Normal file
@@ -0,0 +1,151 @@
|
||||
# Copyright Vladimir Prus 2004.
|
||||
# Copyright Toon Knapen 2004.
|
||||
# Copyright Catherine Morton 2015.
|
||||
# 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 : xlcpp ;
|
||||
toolset.inherit xlcpp : unix ;
|
||||
generators.override xlcpp.prebuilt : builtin.prebuilt ;
|
||||
generators.override xlcpp.searched-lib-generator : searched-lib-generator ;
|
||||
|
||||
# Configure the xlcpp toolset
|
||||
rule init ( version ? : command * : options * )
|
||||
{
|
||||
local condition = [
|
||||
common.check-init-parameters xlcpp : version $(version) ] ;
|
||||
|
||||
command = [ common.get-invocation-command xlcpp : xlC
|
||||
: $(command) : "/usr/xlcpp/bin/xlC" ] ;
|
||||
|
||||
common.handle-options xlcpp : $(condition) : $(command) : $(options) ;
|
||||
}
|
||||
|
||||
# Declare generators
|
||||
generators.register-c-compiler xlcpp.compile.c : C : OBJ : <toolset>xlcpp ;
|
||||
generators.register-c-compiler xlcpp.compile.c++ : CPP : OBJ : <toolset>xlcpp ;
|
||||
|
||||
# Allow C++ style comments in C files
|
||||
flags xlcpp CFLAGS : -qnoxlcompatmacros ;
|
||||
|
||||
# Declare flags
|
||||
flags xlcpp CFLAGS <optimization>off : -qNOOPTimize ;
|
||||
flags xlcpp CFLAGS <optimization>speed : ;
|
||||
flags xlcpp CFLAGS <optimization>space : -O2 -qcompact ;
|
||||
|
||||
# Discretionary inlining (not recommended)
|
||||
flags xlcpp CFLAGS <inlining>off : -qnoinline ;
|
||||
flags xlcpp CFLAGS <inlining>on : -qinline ;
|
||||
#flags xlcpp CFLAGS <inlining>full : -qinline ;
|
||||
flags xlcpp CFLAGS <inlining>full : ;
|
||||
|
||||
# Exception handling
|
||||
flags xlcpp C++FLAGS <exception-handling>off : -qnoeh ;
|
||||
flags xlcpp C++FLAGS <exception-handling>on : -qeh ;
|
||||
|
||||
# Run-time Type Identification
|
||||
flags xlcpp C++FLAGS <rtti>off : -qnortti ;
|
||||
flags xlcpp C++FLAGS <rtti>on : -qrtti ;
|
||||
|
||||
# Enable 64-bit memory addressing model
|
||||
flags xlcpp CFLAGS <address-model>64 : -q64 ;
|
||||
flags xlcpp LINKFLAGS <address-model>64 : -q64 ;
|
||||
flags xlcpp ARFLAGS <target-os>aix/<address-model>64 : -X 64 ;
|
||||
|
||||
# Use absolute path when generating debug information
|
||||
flags xlcpp CFLAGS <debug-symbols>on : -g -qfullpath ;
|
||||
flags xlcpp LINKFLAGS <debug-symbols>on : -g -qfullpath ;
|
||||
flags xlcpp LINKFLAGS <debug-symbols>off : -s ;
|
||||
|
||||
if [ os.name ] = AIX
|
||||
{
|
||||
flags xlcpp.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 xlcpp.link LINKFLAGS <link>shared : -bnoipath ;
|
||||
|
||||
# Run-time linking
|
||||
flags xlcpp.link EXE-LINKFLAGS <link>shared : -brtl ;
|
||||
}
|
||||
else
|
||||
{
|
||||
# Linux PPC
|
||||
flags xlcpp.compile CFLAGS <link>shared : -qpic=large ;
|
||||
flags xlcpp FINDLIBS : rt ;
|
||||
}
|
||||
|
||||
# Profiling
|
||||
flags xlcpp CFLAGS <profiling>on : -pg ;
|
||||
flags xlcpp LINKFLAGS <profiling>on : -pg ;
|
||||
|
||||
flags xlcpp.compile OPTIONS <cflags> ;
|
||||
flags xlcpp.compile.c++ OPTIONS <cxxflags> ;
|
||||
flags xlcpp DEFINES <define> ;
|
||||
flags xlcpp UNDEFS <undef> ;
|
||||
flags xlcpp HDRS <include> ;
|
||||
flags xlcpp STDHDRS <sysinclude> ;
|
||||
flags xlcpp.link OPTIONS <linkflags> ;
|
||||
flags xlcpp ARFLAGS <arflags> ;
|
||||
|
||||
flags xlcpp LIBPATH <library-path> ;
|
||||
flags xlcpp NEEDLIBS <library-file> ;
|
||||
flags xlcpp FINDLIBS <find-shared-library> ;
|
||||
flags xlcpp FINDLIBS <find-static-library> ;
|
||||
|
||||
# Select the compiler name according to the threading model.
|
||||
flags xlcpp VA_C_COMPILER <threading>single : xlc ;
|
||||
flags xlcpp VA_C_COMPILER <threading>multi : xlc ;
|
||||
flags xlcpp VA_CXX_COMPILER <threading>single : xlC ;
|
||||
flags xlcpp VA_CXX_COMPILER <threading>multi : xlC ;
|
||||
|
||||
SPACE = " " ;
|
||||
|
||||
flags xlcpp.link.dll HAVE_SONAME <target-os>linux : "" ;
|
||||
|
||||
actions xlcpp.link bind NEEDLIBS
|
||||
{
|
||||
$(VA_CXX_COMPILER) $(EXE-LINKFLAGS) $(LINKFLAGS) -o "$(<[1])" -L$(LIBPATH) -L$(STDLIBPATH) "$(>)" "$(NEEDLIBS)" "$(NEEDLIBS)" -l$(FINDLIBS) $(OPTIONS) $(USER_OPTIONS)
|
||||
}
|
||||
|
||||
actions xlcpp.link.dll bind NEEDLIBS
|
||||
{
|
||||
xlC -G $(LINKFLAGS) -o "$(<[1])" $(HAVE_SONAME)-Wl,-soname$(SPACE)-Wl,$(<[-1]:D=) -L$(LIBPATH) -L$(STDLIBPATH) "$(>)" "$(NEEDLIBS)" "$(NEEDLIBS)" -l$(FINDLIBS) $(OPTIONS) $(USER_OPTIONS)
|
||||
}
|
||||
|
||||
actions xlcpp.compile.c
|
||||
{
|
||||
$(VA_C_COMPILER) -c $(OPTIONS) $(USER_OPTIONS) -I$(BOOST_ROOT) -U$(UNDEFS) -D$(DEFINES) $(CFLAGS) -I"$(HDRS)" -I"$(STDHDRS)" -o "$(<)" "$(>)"
|
||||
}
|
||||
|
||||
actions xlcpp.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 xlcpp.archive
|
||||
{
|
||||
ar $(ARFLAGS) ru "$(<)" "$(>)"
|
||||
}
|
||||
Reference in New Issue
Block a user