[LLVMdev] Building sanitizers for Android

Greg Fitzgerald garious at gmail.com
Wed Mar 26 18:00:12 PDT 2014


The build for the Android sanitizers is unique in that it needs to
link against the Android system libraries to create a shared object
and its test suites.  The current solution to build ASan is to drop
the compiler-rt repo into the llvm source tree and cross-compile the
llvm build for Android.  This is a bit awkward for few reasons:

1) Not all of llvm can be cross-compiled for Android.  "ninja all"
causes expected build errors.
2) The sanitizers don't depend on any LLVM libraries, only llvm-config
for its build configuration.
3) No "install" rule.  Instead, you cherry-pick files from the build directory.

Building against the LLVM install directory cleans this up nicely and
as it turns out, this mostly works today (see CMake configuration
below).  The only missing pieces are that the shared object is not
added to the install directory and the test suites are not built.  Is
this a build configuration you'd consider using?

$ cmake -G Ninja .. \
    -DCMAKE_INSTALL_PREFIX=ship \
    -DCMAKE_C_COMPILER=arm-linux-androideabi-gcc \
    -DCMAKE_CXX_COMPILER=arm-linux-androideabi-g++ \
    -DCMAKE_PREFIX_PATH=`pwd`/../../llvm/out/ship \
    -DANDROID=1 \
    -DCMAKE_SYSTEM_NAME=Linux \
    -DCMAKE_C_FLAGS=--sysroot=$(ndkDir)/platforms/android-19/arch-arm \
    -DCMAKE_CXX_FLAGS=--sysroot=$(ndkDir)/platforms/android-19/arch-arm
...
$ ninja install
...
[68/68]
-- Install configuration: "Release"
-- Installing: ship/include/sanitizer/asan_interface.h
-- Installing: ship/include/sanitizer/common_interface_defs.h
-- Installing: ship/include/sanitizer/dfsan_interface.h
-- Installing: ship/include/sanitizer/linux_syscall_hooks.h
-- Installing: ship/include/sanitizer/lsan_interface.h
-- Installing: ship/include/sanitizer/msan_interface.h
-- Installing: ship/include/sanitizer/tsan_interface_atomic.h
-- Installing: ship/asan_blacklist.txt
-- Installing: ship/bin/asan_device_setup

Thanks,
Greg



More information about the llvm-dev mailing list