Boost logo

Boost Users :

From: Robert Dailey (rcdailey.lists_at_[hidden])
Date: 2019-06-19 14:48:54


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 list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net