Boost logo

Boost-Build :

From: Markus Schöpflin (markus.schoepflin_at_[hidden])
Date: 2006-02-08 07:43:09


Vladimir Prus wrote:

> I've just ported the Tru64 toolset from V1 to V2, and added it to CVS. For
> convenienve, the file is also attached.
>
> Since I don't have the compiler, I can't test it. I've verified that it
> produces some command lines, but have no idea if those command lines are 100%
> correct.
>
> If you could do initial testing of the toolset, I'd be very gratefull. I
> believe you're the only one in Boost with access to that compiler.
>
> I've put together instructions for testing a new toolset at
>
> http://zigzag.cs.msu.su/boost.build/wiki/TestingNewToolset
>
> Overall, it should take no more that 5 mins to either work though all steps
> and verify that toolset works, or run into an error.

I just had a look at the new toolset. First a thing about it's name. The
compiler is named cxx, the platform is Tru64, so shouldn't the toolset be
named cxx-tru64 or tru64-cxx or something similar?

The simple example seems to work:

> bjam -a -d+2 tru64
tru64.compile.c++ bin/tru64/debug/hello.o

     cxx -c -std strict_ansi -nopure_cname -noimplicit_include
-timplicit_local -ptr "bin/tru64/debug/cxx_repository" -msg_display_number
-msg_disable 186,450,1115 -D__CNAME_OVERLOADS -g3 -O0 -inline none -o
"bin/tru64/debug/hello.o" "hello.cpp"

But I'm missing -gall, and -model ansi on the compiler command line.
Looking at the jam file, the model feature has been disabled explicitly.
Here is an excerpt from the compiler man page about this feature:

<quote>
-model [ansi | arm]
[Tru64] Determines the layout of C++ classes, name mangling, and
exception handling. On Tru64 UNIX, the default is -model arm; on
Linux Alpha, the default is -model ansi. The -model arm option is not
supported on Linux Alpha.

The -model arm option is the default and generates objects that are
link compatible with all HP C++ releases prior to Version 6.3, and
with all objects compiled using the -model arm option in HP C++ Ver-
sion 6.3 or later. Specifying this option defines the macro
__MODEL_ARM.

The -model ansi option supports the complete ISO/ANSI C++ specifica-
tion, including distinct name mangling for templates. The ANSI model
also reduces the size of C++ non-POD class objects. Note that this
option generates objects that are not compatible with prior releases
of HP C++, or with objects compiled using the -model arm option.

If you specify the -model ansi option, you must recompile your entire
application, including libraries. Specifying this option defines the
macro __MODEL_ANSI.
</quote>

tru64.link bin/tru64/debug/hello

     cxx -noimplicit_include -g -o "bin/tru64/debug/hello"
"bin/tru64/debug/hello.o" -lrt -lm

Here the model flag is missing as well.

The next example fails:

> bjam -a -d+2 tru64
tru64.compile.c++ app/bin/tru64/debug/app.o

     cxx -c -std strict_ansi -nopure_cname -noimplicit_include
-timplicit_local -ptr "app/bin/tru64/debug/cxx_repository"
-msg_display_number -msg_disable 186,450,1115 -D__CNAME_OVERLOADS -g3 -O0
-inline none -I"util/foo/include" -o "app/bin/tru64/debug/app.o" "app/app.cpp"

tru64.compile.c++ util/foo/bin/tru64/debug/bar.o

     cxx -c -std strict_ansi -nopure_cname -noimplicit_include
-timplicit_local -ptr "util/foo/bin/tru64/debug/cxx_repository"
-msg_display_number -msg_disable 186,450,1115 -D__CNAME_OVERLOADS -g3 -O0
-inline none -o "util/foo/bin/tru64/debug/bar.o" "util/foo/bar.cpp"

cxx: Warning: util/foo/bar.cpp, line 13: #381-D extra ";" ignored
void foo() {};
-------------^
tru64.link.dll util/foo/bin/tru64/debug/libbar.so

     cxx -qrtti -noimplicit_include -g -o
"util/foo/bin/tru64/debug/libbar.so" "util/foo/bin/tru64/debug/bar.o" -lm

ld (prelink):
-qrtti: Unknown flag
ld: Usage: ld [options] file [...]
ld:
-qrtti: Unknown flag
ld: Usage: ld [options] file [...]
...skipped <papp/bin/tru64/debug>app for lack of
<putil/foo/bin/tru64/debug>libbar.so...
...failed updating 1 target...

I have no idea where the -qrtti flag comes from in the original V1 toolset,
but it seems that the corresponding rule is never used because building
shared libs works on Tru64 in V1. So using the regular link rule should
instead should work, I guess.

About the C compiler, I don't think there are any flags that will help you
here. You have to invoke cc and not cxx, as is the case in the V1 toolset.

I don't have time for more right now, but I will try to address the other
FIXME comments in the toolset file this week.

Regards, Markus


Boost-Build list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk