How to set up user-config.jam properly?

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

How to set up user-config.jam properly?

Boost - Users mailing list
I am working on a user-config.jam file to build boost 1.70 against
Android NDK r19. My jam file looks like this:

```
import os ;

local ndk_cxx = [ os.environ CXX ] ;
local ndk_ar = [ os.environ AR ] ;
local ndk_ranlib = [ os.environ RANLIB ] ;
local ndk_flags = [ os.environ CXXFLAGS ] ;

using clang : x86 : "$(ndk_cxx)"
:
<cxxflags>"$(ndk_flags)"
<archiver>"$(ndk_ar)"
<ranlib>"$(ndk_ranlib)"
<architecture>x86
<address-model>32
<binary-format>x86
<abi>x86
;

using clang : armeabi-v7a : "$(ndk_cxx)"
:
<cxxflags>"$(ndk_flags)"
<archiver>"$(ndk_ar)"
<ranlib>"$(ndk_ranlib)"
<architecture>arm
<address-model>32
<binary-format>elf
<abi>aapcs
;
```

And my command line is:

```
./bootstrap.sh --prefix=$INSTALL_DIR/boost || cat bootstrap.log
./b2 -j8 \
    --without-python \
    --without-test \
    target-os=android \
    toolset=clang-${ANDROID_ABI} \
    variant=release \
    threading=multi \
    threadapi=pthread \
    link=static \
    runtime-link=shared \
    install
```

When I run the commands above I get:

```
/_build/boost_1_70_0/tools/build/src/build/feature.jam:314: in
implied-subfeature from module feature
error: "armeabi" is not a known subfeature value of <toolset>clang
/_build/boost_1_70_0/tools/build/src/build/feature.jam:497: in
feature.validate-value-string from module feature
/_build/boost_1_70_0/tools/build/src/build/property.jam:341: in
validate1 from module property
/_build/boost_1_70_0/tools/build/src/build/property.jam:367: in
validate from module property
/_build/boost_1_70_0/tools/build/src/build/property.jam:376: in
property.validate-property-sets from module property
/_build/boost_1_70_0/tools/build/src/build/toolset.jam:187: in
toolset.flags from module toolset
/_build/boost_1_70_0/tools/build/src/tools/common.jam:447: in
common.handle-options from module common
/_build/boost_1_70_0/tools/build/src/tools/clang-linux.jam:62: in
clang-linux.init from module clang-linux
/_build/boost_1_70_0/tools/build/src/build/toolset.jam:44: in
toolset.using from module toolset
/_build/boost_1_70_0/tools/build/src/tools/clang.jam:33: in clang.init
from module clang
/_build/boost_1_70_0/tools/build/src/build/toolset.jam:44: in
toolset.using from module toolset
/_build/boost_1_70_0/tools/build/src/build/project.jam:1104: in using
from module project-rules
/home/build/user-config.jam:28: in modules.load from module user-config
/_build/boost_1_70_0/tools/build/src/build-system.jam:255: in
load-config from module build-system
/_build/boost_1_70_0/tools/build/src/build-system.jam:453: in
load-configuration-files from module build-system
/_build/boost_1_70_0/tools/build/src/build-system.jam:607: in load
from module build-system
/_build/boost_1_70_0/tools/build/src/kernel/modules.jam:295: in import
from module modules
/_build/boost_1_70_0/tools/build/src/kernel/bootstrap.jam:139: in
boost-build from module
/_build/boost_1_70_0/boost-build.jam:17: in module scope from module
```

The value of `ANDROID_ABI` is either `x86` or `armeabi-v7a`. What I'm
not sure about is this syntax in the JAM file:

```
using <platform> : <subfeature> : <toolchain>
```

Why is this failing? Can someone explain this strange syntax in the
JAM file? What is "subfeature" for and what values does it accept? How
does this map to the command line arguments? How should I best set up
my user config jam file for providing different build parameters per
architecture in a cross-compilation setting (building for Android)?
_______________________________________________
Boost-users mailing list
[hidden email]
https://lists.boost.org/mailman/listinfo.cgi/boost-users
Reply | Threaded
Open this post in threaded view
|

Re: How to set up user-config.jam properly?

Boost - Users mailing list
Looks like part of this is related to:

https://github.com/boostorg/build/issues/385

However it also seems that the subfeature can't have hyphens in the
name on the command line. I guess those are delimiters. So if I use
`arm` instead of `armeabi-v7a`, it works fine, if I also have a patch
applied due to issue #385

On Wed, Jun 19, 2019 at 9:48 AM Robert Dailey <[hidden email]> wrote:

>
> I am working on a user-config.jam file to build boost 1.70 against
> Android NDK r19. My jam file looks like this:
>
> ```
> import os ;
>
> local ndk_cxx = [ os.environ CXX ] ;
> local ndk_ar = [ os.environ AR ] ;
> local ndk_ranlib = [ os.environ RANLIB ] ;
> local ndk_flags = [ os.environ CXXFLAGS ] ;
>
> using clang : x86 : "$(ndk_cxx)"
> :
> <cxxflags>"$(ndk_flags)"
> <archiver>"$(ndk_ar)"
> <ranlib>"$(ndk_ranlib)"
> <architecture>x86
> <address-model>32
> <binary-format>x86
> <abi>x86
> ;
>
> using clang : armeabi-v7a : "$(ndk_cxx)"
> :
> <cxxflags>"$(ndk_flags)"
> <archiver>"$(ndk_ar)"
> <ranlib>"$(ndk_ranlib)"
> <architecture>arm
> <address-model>32
> <binary-format>elf
> <abi>aapcs
> ;
> ```
>
> And my command line is:
>
> ```
> ./bootstrap.sh --prefix=$INSTALL_DIR/boost || cat bootstrap.log
> ./b2 -j8 \
>     --without-python \
>     --without-test \
>     target-os=android \
>     toolset=clang-${ANDROID_ABI} \
>     variant=release \
>     threading=multi \
>     threadapi=pthread \
>     link=static \
>     runtime-link=shared \
>     install
> ```
>
> When I run the commands above I get:
>
> ```
> /_build/boost_1_70_0/tools/build/src/build/feature.jam:314: in
> implied-subfeature from module feature
> error: "armeabi" is not a known subfeature value of <toolset>clang
> /_build/boost_1_70_0/tools/build/src/build/feature.jam:497: in
> feature.validate-value-string from module feature
> /_build/boost_1_70_0/tools/build/src/build/property.jam:341: in
> validate1 from module property
> /_build/boost_1_70_0/tools/build/src/build/property.jam:367: in
> validate from module property
> /_build/boost_1_70_0/tools/build/src/build/property.jam:376: in
> property.validate-property-sets from module property
> /_build/boost_1_70_0/tools/build/src/build/toolset.jam:187: in
> toolset.flags from module toolset
> /_build/boost_1_70_0/tools/build/src/tools/common.jam:447: in
> common.handle-options from module common
> /_build/boost_1_70_0/tools/build/src/tools/clang-linux.jam:62: in
> clang-linux.init from module clang-linux
> /_build/boost_1_70_0/tools/build/src/build/toolset.jam:44: in
> toolset.using from module toolset
> /_build/boost_1_70_0/tools/build/src/tools/clang.jam:33: in clang.init
> from module clang
> /_build/boost_1_70_0/tools/build/src/build/toolset.jam:44: in
> toolset.using from module toolset
> /_build/boost_1_70_0/tools/build/src/build/project.jam:1104: in using
> from module project-rules
> /home/build/user-config.jam:28: in modules.load from module user-config
> /_build/boost_1_70_0/tools/build/src/build-system.jam:255: in
> load-config from module build-system
> /_build/boost_1_70_0/tools/build/src/build-system.jam:453: in
> load-configuration-files from module build-system
> /_build/boost_1_70_0/tools/build/src/build-system.jam:607: in load
> from module build-system
> /_build/boost_1_70_0/tools/build/src/kernel/modules.jam:295: in import
> from module modules
> /_build/boost_1_70_0/tools/build/src/kernel/bootstrap.jam:139: in
> boost-build from module
> /_build/boost_1_70_0/boost-build.jam:17: in module scope from module
> ```
>
> The value of `ANDROID_ABI` is either `x86` or `armeabi-v7a`. What I'm
> not sure about is this syntax in the JAM file:
>
> ```
> using <platform> : <subfeature> : <toolchain>
> ```
>
> Why is this failing? Can someone explain this strange syntax in the
> JAM file? What is "subfeature" for and what values does it accept? How
> does this map to the command line arguments? How should I best set up
> my user config jam file for providing different build parameters per
> architecture in a cross-compilation setting (building for Android)?
_______________________________________________
Boost-users mailing list
[hidden email]
https://lists.boost.org/mailman/listinfo.cgi/boost-users