[LLVMdev] Building sanitizers for Android

Evgeniy Stepanov eugeni.stepanov at gmail.com
Thu Mar 27 01:14:39 PDT 2014


I'd prefer something based on Alexey's approach with CMake
sub-projects. I think it already copies compiler-rt build products to
the parent build directory, right?

Requiring that llvm is installed complicates things.

On Thu, Mar 27, 2014 at 5:00 AM, Greg Fitzgerald <garious at gmail.com> wrote:
> 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.

This should not be too hard to fix.

> 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