Boost.jam and 32 vs. 64 bit compilations

View: New views
3 Messages — Rating Filter:   Alert me  

Boost.jam and 32 vs. 64 bit compilations

by Anthony Foglia-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

        We primarily compile in 64 bit, but sometimes need 32 bit compilations.
  We used to have custom-made rules for the boost libraries, but I'm
working on switching to using the boost.jam distributed in contrib.

        Is there a way to configure the rules in there so the library search
path correctly finds either the 32- or 64-bit libraries as needed.

        I tried lines like :

using boost
    : 1.38
    : <include>boost_1_38_0/include/boost-1_38
      <address-model>64:<library>boost_1_38_0/lib
      <address-model>32:<library>boost_1_38_0/lib32
    ;

But the conditional parameter logic confuses boost.jam into thinking
boost isn't configured.

        I tried looking at the functions in property and property-set, but
couldn't find anything to evaluate the rules to collapse the library
property to just one.  I'm guessing it's not even possible, because the
address-model feature prints as "16 32 64" even though I'm explicitly
passing in on the command-line.

        Is there some other simple way to add this ability?


--
Anthony Foglia
Princeton Consultants
(609) 987-8787 x233

_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost-build

Re: Boost.jam and 32 vs. 64 bit compilations

by Ian Emmons :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Anthony:  I've been able to do this sort of conditional on searched-
lib targets.

A related question for the list in general:  Why isn't the address  
model part of the name of the libraries compiled from Boost?  If it  
were, the conditional <library> feature would not be necessary.


On Jun 15, 2009, at 6:29 PM, Anthony Foglia wrote:

        We primarily compile in 64 bit, but sometimes need 32 bit  
compilations.  We used to have custom-made rules for the boost  
libraries, but I'm working on switching to using the boost.jam  
distributed in contrib.

        Is there a way to configure the rules in there so the library search  
path correctly finds either the 32- or 64-bit libraries as needed.

        I tried lines like :

using boost
   : 1.38
   : <include>boost_1_38_0/include/boost-1_38
     <address-model>64:<library>boost_1_38_0/lib
     <address-model>32:<library>boost_1_38_0/lib32
   ;

But the conditional parameter logic confuses boost.jam into thinking  
boost isn't configured.

        I tried looking at the functions in property and property-set, but  
couldn't find anything to evaluate the rules to collapse the library  
property to just one.  I'm guessing it's not even possible, because  
the address-model feature prints as "16 32 64" even though I'm  
explicitly passing in on the command-line.

        Is there some other simple way to add this ability?


--
Anthony Foglia
Princeton Consultants
(609) 987-8787 x233

_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost-build

smime.p7s (5K) Download Attachment

Re: Boost.jam and 32 vs. 64 bit compilations

by Anthony Foglia-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Ian Emmons wrote:
> Anthony:  I've been able to do this sort of conditional on searched-lib
> targets.

        Yes.  Originally we had defined lib targets explicitly for each of the
Boost libraries that needed linking, and through conditionals on those
boost-build would find the correct version.

        My mistake was trying to switch to the "boost.jam" file, which is the
suggested way of include boost libraries in a boost-build project.  That
you configure by passing it <include> and <library> properties.  But the
logic isn't smart enough to determine if one of them is set via a
conditional.

        It looks like what I need to do is go through all the options, look to
see if any are conditional, and if so, if they define the library path,
and then, use that library path as the <search> property for the boost
project defined within.  Which is way more advanced than my weak
boost-build skills are capable of.
        (That, or get the final address-model and context at the point
boost.use-project is called, but I don't think that's possible.)

> On Jun 15, 2009, at 6:29 PM, Anthony Foglia wrote:
>
>     We primarily compile in 64 bit, but sometimes need 32 bit
> compilations.  We used to have custom-made rules for the boost
> libraries, but I'm working on switching to using the boost.jam
> distributed in contrib.
>
>     Is there a way to configure the rules in there so the library search
> path correctly finds either the 32- or 64-bit libraries as needed.
>
>     I tried lines like :
>
> using boost
>   : 1.38
>   : <include>boost_1_38_0/include/boost-1_38
>     <address-model>64:<library>boost_1_38_0/lib
>     <address-model>32:<library>boost_1_38_0/lib32
>   ;
>
> But the conditional parameter logic confuses boost.jam into thinking
> boost isn't configured.


--
Anthony Foglia
Princeton Consultants
(609) 987-8787 x233

_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost-build