mirror of
				https://github.com/android/ndk-samples
				synced 2025-11-04 14:27:06 +08:00 
			
		
		
		
	Cleanup santiizers CMakeLists.txt.
Remove all the boiler plate comments and pointless find_library indirection for liblog.
This commit is contained in:
		@@ -1,113 +1,64 @@
 | 
			
		||||
# For more information about using CMake with Android Studio, read the
 | 
			
		||||
# documentation: https://d.android.com/studio/projects/add-native-code.html
 | 
			
		||||
 | 
			
		||||
# Sets the minimum version of CMake required to build the native library.
 | 
			
		||||
 | 
			
		||||
cmake_minimum_required(VERSION 3.22.1)
 | 
			
		||||
project(sanitizers LANGUAGES CXX)
 | 
			
		||||
 | 
			
		||||
# Declares and names the project.
 | 
			
		||||
 | 
			
		||||
project("sanitizers")
 | 
			
		||||
 | 
			
		||||
# Creates and names a library, sets it as either STATIC
 | 
			
		||||
# or SHARED, and provides the relative paths to its source code.
 | 
			
		||||
# You can define multiple libraries, and CMake builds them for you.
 | 
			
		||||
# Gradle automatically packages shared libraries with your APK.
 | 
			
		||||
 | 
			
		||||
add_library( # Sets the name of the library.
 | 
			
		||||
        sanitizers
 | 
			
		||||
 | 
			
		||||
        # Sets the library as a shared library.
 | 
			
		||||
        SHARED
 | 
			
		||||
 | 
			
		||||
        # Provides a relative path to your source file(s).
 | 
			
		||||
        native-lib.cpp)
 | 
			
		||||
add_library(sanitizers SHARED native-lib.cpp)
 | 
			
		||||
target_link_libraries(sanitizers PRIVATE log)
 | 
			
		||||
 | 
			
		||||
if(SANITIZE)
 | 
			
		||||
    # For asan and ubsan, we need to copy some files from the NDK into our APK.
 | 
			
		||||
    get_filename_component(HINT_PATH ${ANDROID_C_COMPILER} DIRECTORY)
 | 
			
		||||
    set(ARCH_STR ${CMAKE_ANDROID_ARCH})
 | 
			
		||||
    if ("${CMAKE_ANDROID_ARCH_ABI}" STREQUAL "arm64-v8a")
 | 
			
		||||
    if("${CMAKE_ANDROID_ARCH_ABI}" STREQUAL "arm64-v8a")
 | 
			
		||||
        set(ARCH_STR "aarch64")
 | 
			
		||||
    elseif ("${CMAKE_ANDROID_ARCH_ABI}" STREQUAL "armeabi")
 | 
			
		||||
    elseif("${CMAKE_ANDROID_ARCH_ABI}" STREQUAL "armeabi")
 | 
			
		||||
        set(ARCH_STR "arm")
 | 
			
		||||
    elseif ("${CMAKE_ANDROID_ARCH_ABI}" STREQUAL "armeabi-v7a")
 | 
			
		||||
    elseif("${CMAKE_ANDROID_ARCH_ABI}" STREQUAL "armeabi-v7a")
 | 
			
		||||
        set(ARCH_STR "arm")
 | 
			
		||||
    elseif ("${CMAKE_ANDROID_ARCH_ABI}" STREQUAL "x86")
 | 
			
		||||
    elseif("${CMAKE_ANDROID_ARCH_ABI}" STREQUAL "x86")
 | 
			
		||||
        set(ARCH_STR "i686")
 | 
			
		||||
    elseif ("${CMAKE_ANDROID_ARCH_ABI}" STREQUAL "x86_64")
 | 
			
		||||
    elseif("${CMAKE_ANDROID_ARCH_ABI}" STREQUAL "x86_64")
 | 
			
		||||
        set(ARCH_STR "x86_64")
 | 
			
		||||
    endif()
 | 
			
		||||
 | 
			
		||||
    if(${SANITIZE} STREQUAL "hwasan")
 | 
			
		||||
        message("Using hwasan")
 | 
			
		||||
 | 
			
		||||
        target_compile_options(sanitizers PUBLIC -fsanitize=hwaddress -fno-omit-frame-pointer)
 | 
			
		||||
        target_link_options(sanitizers PUBLIC -fsanitize=hwaddress)
 | 
			
		||||
    elseif(${SANITIZE} STREQUAL "asan")
 | 
			
		||||
        message("Using asan")
 | 
			
		||||
 | 
			
		||||
        target_compile_options(sanitizers PUBLIC -fsanitize=address -fno-omit-frame-pointer)
 | 
			
		||||
        target_link_options(sanitizers PUBLIC -fsanitize=address)
 | 
			
		||||
 | 
			
		||||
        # Grab libclang_rt.asan-${ARCH_STR}-android.so from the NDK.
 | 
			
		||||
        file(GLOB ASAN_GLOB "${HINT_PATH}/../lib/clang/*/lib/linux")
 | 
			
		||||
        find_file(ASAN
 | 
			
		||||
                NAMES libclang_rt.asan-${ARCH_STR}-android.so
 | 
			
		||||
                PATHS ${ASAN_GLOB})
 | 
			
		||||
            NAMES libclang_rt.asan-${ARCH_STR}-android.so
 | 
			
		||||
            PATHS ${ASAN_GLOB})
 | 
			
		||||
        get_filename_component(ASAN_NAME ${ASAN} NAME)
 | 
			
		||||
        set(ASAN_NAME ${CMAKE_SOURCE_DIR}/../../asan/jniLibs/${CMAKE_ANDROID_ARCH_ABI}/${ASAN_NAME})
 | 
			
		||||
        add_custom_command(
 | 
			
		||||
                TARGET sanitizers PRE_BUILD
 | 
			
		||||
                COMMAND ${CMAKE_COMMAND} -E copy ${ASAN} ${ASAN_NAME})
 | 
			
		||||
            TARGET sanitizers PRE_BUILD
 | 
			
		||||
            COMMAND ${CMAKE_COMMAND} -E copy ${ASAN} ${ASAN_NAME})
 | 
			
		||||
 | 
			
		||||
        # Grab the asan wrapper script from the NDK.
 | 
			
		||||
        find_file(WRAP
 | 
			
		||||
                NAMES asan.sh
 | 
			
		||||
                HINTS ${HINT_PATH}/../../../../../wrap.sh)
 | 
			
		||||
            NAMES asan.sh
 | 
			
		||||
            HINTS ${HINT_PATH}/../../../../../wrap.sh)
 | 
			
		||||
        set(WRAP_NAME ${CMAKE_SOURCE_DIR}/../../asan/resources/lib/${CMAKE_ANDROID_ARCH_ABI}/wrap.sh)
 | 
			
		||||
        add_custom_command(
 | 
			
		||||
                TARGET sanitizers PRE_BUILD
 | 
			
		||||
                COMMAND ${CMAKE_COMMAND} -E copy ${WRAP} ${WRAP_NAME})
 | 
			
		||||
            TARGET sanitizers PRE_BUILD
 | 
			
		||||
            COMMAND ${CMAKE_COMMAND} -E copy ${WRAP} ${WRAP_NAME})
 | 
			
		||||
    elseif(${SANITIZE} STREQUAL "ubsan")
 | 
			
		||||
        message("Using ubsan")
 | 
			
		||||
 | 
			
		||||
        target_compile_options(sanitizers PUBLIC -fsanitize=undefined -fno-sanitize-recover=undefined)
 | 
			
		||||
        target_link_options(sanitizers PUBLIC -fsanitize=undefined -fno-sanitize-recover=undefined)
 | 
			
		||||
 | 
			
		||||
        # Grab libclang_rt.ubsan_standalone-${ARCH_STR}-android.so from the NDK.
 | 
			
		||||
        file(GLOB UBSAN_GLOB "${HINT_PATH}/../lib/clang/*/lib/linux")
 | 
			
		||||
        find_file(UBSAN
 | 
			
		||||
                NAMES libclang_rt.ubsan_standalone-${ARCH_STR}-android.so
 | 
			
		||||
                PATHS ${UBSAN_GLOB})
 | 
			
		||||
            NAMES libclang_rt.ubsan_standalone-${ARCH_STR}-android.so
 | 
			
		||||
            PATHS ${UBSAN_GLOB})
 | 
			
		||||
        get_filename_component(UBSAN_NAME ${UBSAN} NAME)
 | 
			
		||||
        set(UBSAN_NAME ${CMAKE_SOURCE_DIR}/../../ubsan/jniLibs/${CMAKE_ANDROID_ARCH_ABI}/${UBSAN_NAME})
 | 
			
		||||
        add_custom_command(
 | 
			
		||||
                TARGET sanitizers PRE_BUILD
 | 
			
		||||
                COMMAND ${CMAKE_COMMAND} -E copy ${UBSAN} ${UBSAN_NAME})
 | 
			
		||||
            TARGET sanitizers PRE_BUILD
 | 
			
		||||
            COMMAND ${CMAKE_COMMAND} -E copy ${UBSAN} ${UBSAN_NAME})
 | 
			
		||||
    endif()
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
# Searches for a specified prebuilt library and stores the path as a
 | 
			
		||||
# variable. Because CMake includes system libraries in the search path by
 | 
			
		||||
# default, you only need to specify the name of the public NDK library
 | 
			
		||||
# you want to add. CMake verifies that the library exists before
 | 
			
		||||
# completing its build.
 | 
			
		||||
 | 
			
		||||
find_library( # Sets the name of the path variable.
 | 
			
		||||
        log-lib
 | 
			
		||||
 | 
			
		||||
        # Specifies the name of the NDK library that
 | 
			
		||||
        # you want CMake to locate.
 | 
			
		||||
        log)
 | 
			
		||||
 | 
			
		||||
# Specifies libraries CMake should link to your target library. You
 | 
			
		||||
# can link multiple libraries, such as libraries you define in this
 | 
			
		||||
# build script, prebuilt third-party libraries, or system libraries.
 | 
			
		||||
 | 
			
		||||
target_link_libraries( # Specifies the target library.
 | 
			
		||||
        sanitizers
 | 
			
		||||
 | 
			
		||||
        # Links the target library to the log library
 | 
			
		||||
        # included in the NDK.
 | 
			
		||||
        ${log-lib})
 | 
			
		||||
		Reference in New Issue
	
	Block a user