Cross-compiling CMake based C project for aarch64 Android

Hi,

I’m trying to create a derivation for cross-compiling a CMake based C project for aarch64 Android, and I’ve run into a snag:

Here’s a snippet of my derivation:

with import <nixpkgs> {};

pkgsCross.aarch64-android-prebuilt.stdenv.mkDerivation {
  name = "foobarLib";

  src = ./foobarLib.tar.gz;

  buildInputs = [
    python3
    rsync
  ];

  nativeBuildInputs = [
    cmake
  ];

  ...
}

The package builds just fine without the cross-compiling toolchain (just stdenv.mkDerivation), but when I try to build with nix-build ./foobar.nix, I get the following. Any good leads as to what may be wrong?

these derivations will be built:
  /nix/store/8kzgpqgc7mhwgdzs5wb7pf2qv12ds1q4-foobarLib-aarch64-unknown-linux-android.drv
building '/nix/store/8kzgpqgc7mhwgdzs5wb7pf2qv12ds1q4-foobarLib-aarch64-unknown-linux-android.drv'...
unpacking sources
unpacking source archive /nix/store/32r2fg16qxfgmxh1i4wbbglgcpjs1v9q-foobarLib.tar.gz
source root is foobarLib
setting SOURCE_DATE_EPOCH to timestamp 1612257995 of file foobarLib/.git/FETCH_HEAD
patching sources
updateAutotoolsGnuConfigScriptsPhase
configuring
fixing cmake files...
cmake flags: -DCMAKE_FIND_USE_SYSTEM_PACKAGE_REGISTRY=OFF -DCMAKE_FIND_USE_PACKAGE_REGISTRY=OFF -DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=ON -DCMAKE_BUILD_TYPE=Release -DCMAKE_SKIP_BUILD_RPATH=ON -DBUILD_TESTING=OFF -DCMAKE_INSTALL_LOCALEDIR=/nix/store/5z7dgzsab5qp52lvkjn6p40i43jig6z7-foobarLib-aarch64-unknown-linux-android/share/locale -DCMAKE_INSTALL_LIBEXECDIR=/nix/store/5z7dgzsab5qp52lvkjn6p40i43jig6z7-foobarLib-aarch64-unknown-linux-android/libexec -DCMAKE_INSTALL_LIBDIR=/nix/store/5z7dgzsab5qp52lvkjn6p40i43jig6z7-foobarLib-aarch64-unknown-linux-android/lib -DCMAKE_INSTALL_DOCDIR=/nix/store/5z7dgzsab5qp52lvkjn6p40i43jig6z7-foobarLib-aarch64-unknown-linux-android/share/doc/foobarLib-aarch64-unknown-linux-android -DCMAKE_INSTALL_INFODIR=/nix/store/5z7dgzsab5qp52lvkjn6p40i43jig6z7-foobarLib-aarch64-unknown-linux-android/share/info -DCMAKE_INSTALL_MANDIR=/nix/store/5z7dgzsab5qp52lvkjn6p40i43jig6z7-foobarLib-aarch64-unknown-linux-android/share/man -DCMAKE_INSTALL_OLDINCLUDEDIR=/nix/store/5z7dgzsab5qp52lvkjn6p40i43jig6z7-foobarLib-aarch64-unknown-linux-android/include -DCMAKE_INSTALL_INCLUDEDIR=/nix/store/5z7dgzsab5qp52lvkjn6p40i43jig6z7-foobarLib-aarch64-unknown-linux-android/include -DCMAKE_INSTALL_SBINDIR=/nix/store/5z7dgzsab5qp52lvkjn6p40i43jig6z7-foobarLib-aarch64-unknown-linux-android/sbin -DCMAKE_INSTALL_BINDIR=/nix/store/5z7dgzsab5qp52lvkjn6p40i43jig6z7-foobarLib-aarch64-unknown-linux-android/bin -DCMAKE_INSTALL_NAME_DIR=/nix/store/5z7dgzsab5qp52lvkjn6p40i43jig6z7-foobarLib-aarch64-unknown-linux-android/lib -DCMAKE_POLICY_DEFAULT_CMP0025=NEW -DCMAKE_OSX_SYSROOT= -DCMAKE_OSX_ARCHITECTURES=x86_64 -DCMAKE_FIND_FRAMEWORK=LAST -DCMAKE_STRIP=/nix/store/gmj18bnhdsn2gqx8a6rfybcvgyy7znmv-ndk-toolchain-binutils/bin/aarch64-unknown-linux-android-strip -DCMAKE_RANLIB=/nix/store/gmj18bnhdsn2gqx8a6rfybcvgyy7znmv-ndk-toolchain-binutils/bin/aarch64-unknown-linux-android-ranlib -DCMAKE_AR=/nix/store/gmj18bnhdsn2gqx8a6rfybcvgyy7znmv-ndk-toolchain-binutils/bin/aarch64-unknown-linux-android-ar -DCMAKE_C_COMPILER=aarch64-unknown-linux-android-clang -DCMAKE_CXX_COMPILER=aarch64-unknown-linux-android-clang++ -DCMAKE_INSTALL_PREFIX=/nix/store/5z7dgzsab5qp52lvkjn6p40i43jig6z7-foobarLib-aarch64-unknown-linux-android -Wno-dev
-DPython3_EXECUTABLE=/nix/store/v72cj06nk69cynckz2s12rhar25k1h7v-python3-3.8.5/bin/python3
-DCONFIG_SUFFIX=default
-DDEVICE=x86
-DSF_PLATFORM_INTERFACE_LIB_NAME=platform_interface_stub
-DSOUNDCUBE_BUILD=1
 -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=aarch64 -DCMAKE_HOST_SYSTEM_NAME=Linux -DCMAKE_HOST_SYSTEM_PROCESSOR=x86_64
-- The C compiler identification is Clang 9.0.8
-- The CXX compiler identification is Clang 9.0.8
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /nix/store/wq5cr01r8ql1b73czmzqhw8sdj4cyr08-aarch64-unknown-linux-android-ndk-toolchain-binutils-wrapper-21.0.6113669/bin/aarch64-unknown-linux-android-clang - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - failed
-- Check for working CXX compiler: /nix/store/wq5cr01r8ql1b73czmzqhw8sdj4cyr08-aarch64-unknown-linux-android-ndk-toolchain-binutils-wrapper-21.0.6113669/bin/aarch64-unknown-linux-android-clang++
-- Check for working CXX compiler: /nix/store/wq5cr01r8ql1b73czmzqhw8sdj4cyr08-aarch64-unknown-linux-android-ndk-toolchain-binutils-wrapper-21.0.6113669/bin/aarch64-unknown-linux-android-clang++ - broken
CMake Error at /nix/store/c5qrghp5r8bfkr9c9w4vmqksksm5hw8l-cmake-3.18.2/share/cmake-3.18/Modules/CMakeTestCXXCompiler.cmake:59 (message):
  The C++ compiler

    "/nix/store/wq5cr01r8ql1b73czmzqhw8sdj4cyr08-aarch64-unknown-linux-android-ndk-toolchain-binutils-wrapper-21.0.6113669/bin/aarch64-unknown-linux-android-clang++"

  is not able to compile a simple test program.

  It fails with the following output:

    Change Dir: /build/foobarLib/build/CMakeFiles/CMakeTmp

    Run Build Command(s):/nix/store/9l508y7cvrqjd1n50jbr3fm2q9smmp92-gnumake-4.3/bin/make cmTC_1a2e3/fast && /nix/store/9l508y7cvrqjd1n50jbr3fm2q9smmp92-gnumake-4.3/bin/make  -f CMakeFiles/cmTC_1a2e3.dir/build.make CMakeFiles/cmTC_1a2e3.dir/build
    make[1]: Entering directory '/build/foobarLib/build/CMakeFiles/CMakeTmp'
    Building CXX object CMakeFiles/cmTC_1a2e3.dir/testCXXCompiler.cxx.o
    /nix/store/wq5cr01r8ql1b73czmzqhw8sdj4cyr08-aarch64-unknown-linux-android-ndk-toolchain-binutils-wrapper-21.0.6113669/bin/aarch64-unknown-linux-android-clang++    -o CMakeFiles/cmTC_1a2e3.dir/testCXXCompiler.cxx.o -c /build/foobarLib/build/CMakeFiles/CMakeTmp/testCXXCompiler.cxx
    Linking CXX executable cmTC_1a2e3
    /nix/store/c5qrghp5r8bfkr9c9w4vmqksksm5hw8l-cmake-3.18.2/bin/cmake -E cmake_link_script CMakeFiles/cmTC_1a2e3.dir/link.txt --verbose=1
    /nix/store/wq5cr01r8ql1b73czmzqhw8sdj4cyr08-aarch64-unknown-linux-android-ndk-toolchain-binutils-wrapper-21.0.6113669/bin/aarch64-unknown-linux-android-clang++ -rdynamic CMakeFiles/cmTC_1a2e3.dir/testCXXCompiler.cxx.o -o cmTC_1a2e3
    /nix/store/gmj18bnhdsn2gqx8a6rfybcvgyy7znmv-ndk-toolchain-binutils/bin/aarch64-unknown-linux-android-ld: skipping incompatible /nix/store/3hfqqi7ihddyw5l9fzwdk6pqw6kjpzrg-ndk-bundle-21.0.6113669/libexec/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/../lib64/libc++.so when searching for -lc++
    /nix/store/gmj18bnhdsn2gqx8a6rfybcvgyy7znmv-ndk-toolchain-binutils/bin/aarch64-unknown-linux-android-ld: cannot find -lc++
    clang++: error: linker command failed with exit code 1 (use -v to see invocation)
    make[1]: *** [CMakeFiles/cmTC_1a2e3.dir/build.make:106: cmTC_1a2e3] Error 1
    make[1]: Leaving directory '/build/foobarLib/build/CMakeFiles/CMakeTmp'
    make: *** [Makefile:140: cmTC_1a2e3/fast] Error 2