1*387f9dfdSAndroid Build Coastguard Worker# Copyright (c) PLUMgrid, Inc. 2*387f9dfdSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License") 3*387f9dfdSAndroid Build Coastguard Workercmake_minimum_required(VERSION 2.8.12) 4*387f9dfdSAndroid Build Coastguard Worker 5*387f9dfdSAndroid Build Coastguard Workerif(${CMAKE_VERSION} VERSION_EQUAL 3.12.0 OR ${CMAKE_VERSION} VERSION_GREATER 3.12.0) 6*387f9dfdSAndroid Build Coastguard Worker cmake_policy(SET CMP0074 NEW) 7*387f9dfdSAndroid Build Coastguard Workerendif() 8*387f9dfdSAndroid Build Coastguard Worker 9*387f9dfdSAndroid Build Coastguard Workerif(${CMAKE_VERSION} VERSION_EQUAL 3.3.0 OR ${CMAKE_VERSION} VERSION_GREATER 3.3.0) 10*387f9dfdSAndroid Build Coastguard Worker cmake_policy(SET CMP0057 NEW) 11*387f9dfdSAndroid Build Coastguard Workerendif() 12*387f9dfdSAndroid Build Coastguard Worker 13*387f9dfdSAndroid Build Coastguard Workerproject(bcc) 14*387f9dfdSAndroid Build Coastguard Workerif(NOT CMAKE_BUILD_TYPE) 15*387f9dfdSAndroid Build Coastguard Worker set(CMAKE_BUILD_TYPE Release) 16*387f9dfdSAndroid Build Coastguard Workerendif() 17*387f9dfdSAndroid Build Coastguard Worker 18*387f9dfdSAndroid Build Coastguard Workerif(CMAKE_SANITIZE_TYPE) 19*387f9dfdSAndroid Build Coastguard Worker add_compile_options(-fsanitize=${CMAKE_SANITIZE_TYPE}) 20*387f9dfdSAndroid Build Coastguard Worker add_link_options(-fsanitize=${CMAKE_SANITIZE_TYPE}) 21*387f9dfdSAndroid Build Coastguard Workerendif() 22*387f9dfdSAndroid Build Coastguard Worker 23*387f9dfdSAndroid Build Coastguard Workerif(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) 24*387f9dfdSAndroid Build Coastguard Worker set(CMAKE_INSTALL_PREFIX "/usr" CACHE PATH "path to install" FORCE) 25*387f9dfdSAndroid Build Coastguard Workerendif() 26*387f9dfdSAndroid Build Coastguard Worker 27*387f9dfdSAndroid Build Coastguard Workerenable_testing() 28*387f9dfdSAndroid Build Coastguard Worker 29*387f9dfdSAndroid Build Coastguard Workerexecute_process(COMMAND git config --global --add safe.directory ${CMAKE_CURRENT_SOURCE_DIR} 30*387f9dfdSAndroid Build Coastguard Worker WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 31*387f9dfdSAndroid Build Coastguard Worker RESULT_VARIABLE CONFIG_RESULT) 32*387f9dfdSAndroid Build Coastguard Workerif(CONFIG_RESULT AND NOT CONFIG_RESULT EQUAL 0) 33*387f9dfdSAndroid Build Coastguard Worker message(WARNING "Failed to add root source directory to safe.directory") 34*387f9dfdSAndroid Build Coastguard Workerendif() 35*387f9dfdSAndroid Build Coastguard Worker 36*387f9dfdSAndroid Build Coastguard Worker# populate submodule blazesym 37*387f9dfdSAndroid Build Coastguard Workerif(NOT NO_BLAZESYM) 38*387f9dfdSAndroid Build Coastguard Worker execute_process(COMMAND git config --global --add safe.directory ${CMAKE_CURRENT_SOURCE_DIR}/libbpf-tools/blazesym 39*387f9dfdSAndroid Build Coastguard Worker WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 40*387f9dfdSAndroid Build Coastguard Worker RESULT_VARIABLE CONFIG_RESULT) 41*387f9dfdSAndroid Build Coastguard Worker if(CONFIG_RESULT AND NOT CONFIG_RESULT EQUAL 0) 42*387f9dfdSAndroid Build Coastguard Worker message(WARNING "Failed to add blazesym source directory to safe.directory") 43*387f9dfdSAndroid Build Coastguard Worker endif() 44*387f9dfdSAndroid Build Coastguard Worker 45*387f9dfdSAndroid Build Coastguard Worker execute_process(COMMAND git submodule update --init --recursive -- libbpf-tools/blazesym 46*387f9dfdSAndroid Build Coastguard Worker WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 47*387f9dfdSAndroid Build Coastguard Worker RESULT_VARIABLE UPDATE_RESULT) 48*387f9dfdSAndroid Build Coastguard Worker if(UPDATE_RESULT AND NOT UPDATE_RESULT EQUAL 0) 49*387f9dfdSAndroid Build Coastguard Worker message(WARNING "Failed to update submodule blazesym") 50*387f9dfdSAndroid Build Coastguard Worker endif() 51*387f9dfdSAndroid Build Coastguard Workerendif() 52*387f9dfdSAndroid Build Coastguard Worker 53*387f9dfdSAndroid Build Coastguard Worker# populate submodules (libbpf) 54*387f9dfdSAndroid Build Coastguard Workerif(NOT CMAKE_USE_LIBBPF_PACKAGE) 55*387f9dfdSAndroid Build Coastguard Worker execute_process(COMMAND git config --global --add safe.directory ${CMAKE_CURRENT_SOURCE_DIR}/src/cc/libbpf 56*387f9dfdSAndroid Build Coastguard Worker WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 57*387f9dfdSAndroid Build Coastguard Worker RESULT_VARIABLE CONFIG_RESULT) 58*387f9dfdSAndroid Build Coastguard Worker if(CONFIG_RESULT AND NOT CONFIG_RESULT EQUAL 0) 59*387f9dfdSAndroid Build Coastguard Worker message(WARNING "Failed to add libbpf source directory to safe.directory") 60*387f9dfdSAndroid Build Coastguard Worker endif() 61*387f9dfdSAndroid Build Coastguard Worker execute_process(COMMAND git config --global --add safe.directory ${CMAKE_CURRENT_SOURCE_DIR}/libbpf-tools/bpftool 62*387f9dfdSAndroid Build Coastguard Worker WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 63*387f9dfdSAndroid Build Coastguard Worker RESULT_VARIABLE CONFIG_RESULT) 64*387f9dfdSAndroid Build Coastguard Worker if(CONFIG_RESULT AND NOT CONFIG_RESULT EQUAL 0) 65*387f9dfdSAndroid Build Coastguard Worker message(WARNING "Failed to add bpftool source directory to safe.directory") 66*387f9dfdSAndroid Build Coastguard Worker endif() 67*387f9dfdSAndroid Build Coastguard Worker 68*387f9dfdSAndroid Build Coastguard Worker if(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/src/cc/libbpf/src) 69*387f9dfdSAndroid Build Coastguard Worker execute_process(COMMAND git submodule update --init --recursive 70*387f9dfdSAndroid Build Coastguard Worker WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 71*387f9dfdSAndroid Build Coastguard Worker RESULT_VARIABLE UPDATE_RESULT) 72*387f9dfdSAndroid Build Coastguard Worker if(UPDATE_RESULT AND NOT UPDATE_RESULT EQUAL 0) 73*387f9dfdSAndroid Build Coastguard Worker message(WARNING "Failed to update submodule libbpf") 74*387f9dfdSAndroid Build Coastguard Worker endif() 75*387f9dfdSAndroid Build Coastguard Worker else() 76*387f9dfdSAndroid Build Coastguard Worker execute_process(COMMAND git diff --shortstat ${CMAKE_CURRENT_SOURCE_DIR}/src/cc/libbpf/ 77*387f9dfdSAndroid Build Coastguard Worker OUTPUT_VARIABLE DIFF_STATUS) 78*387f9dfdSAndroid Build Coastguard Worker if("${DIFF_STATUS}" STREQUAL "") 79*387f9dfdSAndroid Build Coastguard Worker execute_process(COMMAND git submodule update --init --recursive 80*387f9dfdSAndroid Build Coastguard Worker WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 81*387f9dfdSAndroid Build Coastguard Worker RESULT_VARIABLE UPDATE_RESULT) 82*387f9dfdSAndroid Build Coastguard Worker if(UPDATE_RESULT AND NOT UPDATE_RESULT EQUAL 0) 83*387f9dfdSAndroid Build Coastguard Worker message(WARNING "Failed to update submodule libbpf") 84*387f9dfdSAndroid Build Coastguard Worker endif() 85*387f9dfdSAndroid Build Coastguard Worker else() 86*387f9dfdSAndroid Build Coastguard Worker message(WARNING "submodule libbpf dirty, so no sync") 87*387f9dfdSAndroid Build Coastguard Worker endif() 88*387f9dfdSAndroid Build Coastguard Worker endif() 89*387f9dfdSAndroid Build Coastguard Workerendif() 90*387f9dfdSAndroid Build Coastguard Worker 91*387f9dfdSAndroid Build Coastguard Worker# It's possible to use other kernel headers with 92*387f9dfdSAndroid Build Coastguard Worker# KERNEL_INCLUDE_DIRS build variable, like: 93*387f9dfdSAndroid Build Coastguard Worker# $ cd <kernel-dir> 94*387f9dfdSAndroid Build Coastguard Worker# $ make INSTALL_HDR_PATH=/tmp/headers headers_install 95*387f9dfdSAndroid Build Coastguard Worker# $ cd <bcc-dir> 96*387f9dfdSAndroid Build Coastguard Worker# $ cmake -DKERNEL_INCLUDE_DIRS=/tmp/headers/include/ ... 97*387f9dfdSAndroid Build Coastguard Workerinclude_directories(${KERNEL_INCLUDE_DIRS}) 98*387f9dfdSAndroid Build Coastguard Worker 99*387f9dfdSAndroid Build Coastguard Workeroption(ENABLE_NO_PIE "Build bcc-lua without PIE" ON) 100*387f9dfdSAndroid Build Coastguard Worker 101*387f9dfdSAndroid Build Coastguard Workerinclude(cmake/GetGitRevisionDescription.cmake) 102*387f9dfdSAndroid Build Coastguard Workerinclude(cmake/version.cmake) 103*387f9dfdSAndroid Build Coastguard Workerinclude(CMakeDependentOption) 104*387f9dfdSAndroid Build Coastguard Workerinclude(GNUInstallDirs) 105*387f9dfdSAndroid Build Coastguard Workerinclude(CheckCXXCompilerFlag) 106*387f9dfdSAndroid Build Coastguard Workerinclude(cmake/FindCompilerFlag.cmake) 107*387f9dfdSAndroid Build Coastguard Worker 108*387f9dfdSAndroid Build Coastguard Workeroption(ENABLE_LLVM_NATIVECODEGEN "Enable use of llvm nativecodegen module (needed by rw-engine)" ON) 109*387f9dfdSAndroid Build Coastguard Workeroption(ENABLE_RTTI "Enable compiling with real time type information" OFF) 110*387f9dfdSAndroid Build Coastguard Workeroption(ENABLE_LLVM_SHARED "Enable linking LLVM as a shared library" OFF) 111*387f9dfdSAndroid Build Coastguard Workeroption(ENABLE_CLANG_JIT "Enable Loading BPF through Clang Frontend" ON) 112*387f9dfdSAndroid Build Coastguard Workeroption(ENABLE_USDT "Enable User-level Statically Defined Tracing" ON) 113*387f9dfdSAndroid Build Coastguard Workeroption(ENABLE_EXAMPLES "Build examples" ON) 114*387f9dfdSAndroid Build Coastguard Workeroption(ENABLE_MAN "Build man pages" ON) 115*387f9dfdSAndroid Build Coastguard Workeroption(ENABLE_TESTS "Build tests" ON) 116*387f9dfdSAndroid Build Coastguard Workeroption(RUN_LUA_TESTS "Run lua tests" ON) 117*387f9dfdSAndroid Build Coastguard Workeroption(ENABLE_LIBDEBUGINFOD "Use libdebuginfod as a source of debug symbols" ON) 118*387f9dfdSAndroid Build Coastguard WorkerCMAKE_DEPENDENT_OPTION(ENABLE_CPP_API "Enable C++ API" ON "ENABLE_USDT" OFF) 119*387f9dfdSAndroid Build Coastguard Worker 120*387f9dfdSAndroid Build Coastguard Workerset(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake) 121*387f9dfdSAndroid Build Coastguard Worker 122*387f9dfdSAndroid Build Coastguard Workerif(ENABLE_TESTS) 123*387f9dfdSAndroid Build Coastguard Worker find_package(KernelHeaders) 124*387f9dfdSAndroid Build Coastguard Workerendif() 125*387f9dfdSAndroid Build Coastguard Worker 126*387f9dfdSAndroid Build Coastguard Workerif(CMAKE_USE_LIBBPF_PACKAGE) 127*387f9dfdSAndroid Build Coastguard Worker find_package(LibBpf) 128*387f9dfdSAndroid Build Coastguard Workerendif() 129*387f9dfdSAndroid Build Coastguard Worker 130*387f9dfdSAndroid Build Coastguard Workerif(NOT PYTHON_ONLY) 131*387f9dfdSAndroid Build Coastguard Worker find_package(LLVM REQUIRED CONFIG) 132*387f9dfdSAndroid Build Coastguard Worker message(STATUS "Found LLVM: ${LLVM_INCLUDE_DIRS} ${LLVM_PACKAGE_VERSION} (Use LLVM_ROOT envronment variable for another version of LLVM)") 133*387f9dfdSAndroid Build Coastguard Worker 134*387f9dfdSAndroid Build Coastguard Worker if(ENABLE_CLANG_JIT) 135*387f9dfdSAndroid Build Coastguard Worker find_package(BISON) 136*387f9dfdSAndroid Build Coastguard Worker find_package(FLEX) 137*387f9dfdSAndroid Build Coastguard Worker find_package(LibElf REQUIRED) 138*387f9dfdSAndroid Build Coastguard Worker find_package(LibDebuginfod) 139*387f9dfdSAndroid Build Coastguard Worker find_package(LibLzma) 140*387f9dfdSAndroid Build Coastguard Worker if(CLANG_DIR) 141*387f9dfdSAndroid Build Coastguard Worker set(CMAKE_FIND_ROOT_PATH "${CLANG_DIR}") 142*387f9dfdSAndroid Build Coastguard Worker include_directories("${CLANG_DIR}/include") 143*387f9dfdSAndroid Build Coastguard Worker endif() 144*387f9dfdSAndroid Build Coastguard Worker 145*387f9dfdSAndroid Build Coastguard Worker # clang is linked as a library, but the library path searching is 146*387f9dfdSAndroid Build Coastguard Worker # primitively supported, unlike libLLVM 147*387f9dfdSAndroid Build Coastguard Worker set(CLANG_SEARCH "/opt/local/llvm/lib;/usr/lib/llvm-3.7/lib;${LLVM_LIBRARY_DIRS}") 148*387f9dfdSAndroid Build Coastguard Worker find_library(libclangAnalysis NAMES clangAnalysis clang-cpp HINTS ${CLANG_SEARCH}) 149*387f9dfdSAndroid Build Coastguard Worker find_library(libclangAST NAMES clangAST clang-cpp HINTS ${CLANG_SEARCH}) 150*387f9dfdSAndroid Build Coastguard Worker find_library(libclangBasic NAMES clangBasic clang-cpp HINTS ${CLANG_SEARCH}) 151*387f9dfdSAndroid Build Coastguard Worker find_library(libclangCodeGen NAMES clangCodeGen clang-cpp HINTS ${CLANG_SEARCH}) 152*387f9dfdSAndroid Build Coastguard Worker find_library(libclangDriver NAMES clangDriver clang-cpp HINTS ${CLANG_SEARCH}) 153*387f9dfdSAndroid Build Coastguard Worker find_library(libclangEdit NAMES clangEdit clang-cpp HINTS ${CLANG_SEARCH}) 154*387f9dfdSAndroid Build Coastguard Worker find_library(libclangFrontend NAMES clangFrontend clang-cpp HINTS ${CLANG_SEARCH}) 155*387f9dfdSAndroid Build Coastguard Worker find_library(libclangLex NAMES clangLex clang-cpp HINTS ${CLANG_SEARCH}) 156*387f9dfdSAndroid Build Coastguard Worker find_library(libclangParse NAMES clangParse clang-cpp HINTS ${CLANG_SEARCH}) 157*387f9dfdSAndroid Build Coastguard Worker find_library(libclangRewrite NAMES clangRewrite clang-cpp HINTS ${CLANG_SEARCH}) 158*387f9dfdSAndroid Build Coastguard Worker find_library(libclangSema NAMES clangSema clang-cpp HINTS ${CLANG_SEARCH}) 159*387f9dfdSAndroid Build Coastguard Worker find_library(libclangSerialization NAMES clangSerialization clang-cpp HINTS ${CLANG_SEARCH}) 160*387f9dfdSAndroid Build Coastguard Worker find_library(libclangASTMatchers NAMES clangASTMatchers clang-cpp HINTS ${CLANG_SEARCH}) 161*387f9dfdSAndroid Build Coastguard Worker 162*387f9dfdSAndroid Build Coastguard Worker if(${LLVM_PACKAGE_VERSION} VERSION_EQUAL 15 OR ${LLVM_PACKAGE_VERSION} VERSION_GREATER 15) 163*387f9dfdSAndroid Build Coastguard Worker find_library(libclangSupport NAMES clangSupport clang-cpp HINTS ${CLANG_SEARCH}) 164*387f9dfdSAndroid Build Coastguard Worker endif() 165*387f9dfdSAndroid Build Coastguard Worker 166*387f9dfdSAndroid Build Coastguard Worker find_library(libclang-shared libclang-cpp.so HINTS ${CLANG_SEARCH}) 167*387f9dfdSAndroid Build Coastguard Worker 168*387f9dfdSAndroid Build Coastguard Worker if(libclangBasic STREQUAL "libclangBasic-NOTFOUND") 169*387f9dfdSAndroid Build Coastguard Worker message(FATAL_ERROR "Unable to find clang libraries") 170*387f9dfdSAndroid Build Coastguard Worker endif() 171*387f9dfdSAndroid Build Coastguard Worker 172*387f9dfdSAndroid Build Coastguard Worker FOREACH(DIR ${LLVM_INCLUDE_DIRS}) 173*387f9dfdSAndroid Build Coastguard Worker include_directories("${DIR}/../tools/clang/include") 174*387f9dfdSAndroid Build Coastguard Worker ENDFOREACH() 175*387f9dfdSAndroid Build Coastguard Worker 176*387f9dfdSAndroid Build Coastguard Worker endif(ENABLE_CLANG_JIT) 177*387f9dfdSAndroid Build Coastguard Worker 178*387f9dfdSAndroid Build Coastguard Worker # Set to a string path if system places kernel lib directory in 179*387f9dfdSAndroid Build Coastguard Worker # non-default location. 180*387f9dfdSAndroid Build Coastguard Worker if(NOT DEFINED BCC_KERNEL_MODULES_DIR) 181*387f9dfdSAndroid Build Coastguard Worker set(BCC_KERNEL_MODULES_DIR "/lib/modules") 182*387f9dfdSAndroid Build Coastguard Worker endif() 183*387f9dfdSAndroid Build Coastguard Worker 184*387f9dfdSAndroid Build Coastguard Worker if(NOT DEFINED BCC_PROG_TAG_DIR) 185*387f9dfdSAndroid Build Coastguard Worker set(BCC_PROG_TAG_DIR "/var/tmp/bcc") 186*387f9dfdSAndroid Build Coastguard Worker endif() 187*387f9dfdSAndroid Build Coastguard Worker 188*387f9dfdSAndroid Build Coastguard Worker # As reported in issue #735, GCC 6 has some behavioral problems when 189*387f9dfdSAndroid Build Coastguard Worker # dealing with -isystem. Hence, skip the warning optimization 190*387f9dfdSAndroid Build Coastguard Worker # altogether on that compiler. 191*387f9dfdSAndroid Build Coastguard Worker option(USINGISYSTEM "using -isystem" ON) 192*387f9dfdSAndroid Build Coastguard Worker execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION) 193*387f9dfdSAndroid Build Coastguard Worker if(USINGISYSTEM AND GCC_VERSION VERSION_LESS 6.0) 194*387f9dfdSAndroid Build Coastguard Worker # iterate over all available directories in LLVM_INCLUDE_DIRS to 195*387f9dfdSAndroid Build Coastguard Worker # generate a correctly tokenized list of parameters 196*387f9dfdSAndroid Build Coastguard Worker foreach(ONE_LLVM_INCLUDE_DIR ${LLVM_INCLUDE_DIRS}) 197*387f9dfdSAndroid Build Coastguard Worker set(CXX_ISYSTEM_DIRS "${CXX_ISYSTEM_DIRS} -isystem ${ONE_LLVM_INCLUDE_DIR}") 198*387f9dfdSAndroid Build Coastguard Worker endforeach() 199*387f9dfdSAndroid Build Coastguard Worker endif() 200*387f9dfdSAndroid Build Coastguard Worker 201*387f9dfdSAndroid Build Coastguard Worker set(CMAKE_CXX_STANDARD_REQUIRED ON) 202*387f9dfdSAndroid Build Coastguard Worker if(${LLVM_PACKAGE_VERSION} VERSION_EQUAL 16 OR ${LLVM_PACKAGE_VERSION} VERSION_GREATER 16) 203*387f9dfdSAndroid Build Coastguard Worker set(CMAKE_CXX_STANDARD 17) 204*387f9dfdSAndroid Build Coastguard Worker else() 205*387f9dfdSAndroid Build Coastguard Worker set(CMAKE_CXX_STANDARD 14) 206*387f9dfdSAndroid Build Coastguard Worker endif() 207*387f9dfdSAndroid Build Coastguard Worker 208*387f9dfdSAndroid Build Coastguard Workerendif(NOT PYTHON_ONLY) 209*387f9dfdSAndroid Build Coastguard Worker 210*387f9dfdSAndroid Build Coastguard Workerset(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall") 211*387f9dfdSAndroid Build Coastguard Workerset(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall ${CXX_ISYSTEM_DIRS}") 212*387f9dfdSAndroid Build Coastguard Worker 213*387f9dfdSAndroid Build Coastguard Workeradd_subdirectory(src) 214*387f9dfdSAndroid Build Coastguard Workeradd_subdirectory(introspection) 215*387f9dfdSAndroid Build Coastguard Worker 216*387f9dfdSAndroid Build Coastguard Workerif(ENABLE_CLANG_JIT) 217*387f9dfdSAndroid Build Coastguard Worker if(ENABLE_EXAMPLES) 218*387f9dfdSAndroid Build Coastguard Worker add_subdirectory(examples) 219*387f9dfdSAndroid Build Coastguard Worker endif(ENABLE_EXAMPLES) 220*387f9dfdSAndroid Build Coastguard Worker 221*387f9dfdSAndroid Build Coastguard Worker if(ENABLE_MAN) 222*387f9dfdSAndroid Build Coastguard Worker add_subdirectory(man) 223*387f9dfdSAndroid Build Coastguard Worker endif(ENABLE_MAN) 224*387f9dfdSAndroid Build Coastguard Worker 225*387f9dfdSAndroid Build Coastguard Worker if(ENABLE_TESTS) 226*387f9dfdSAndroid Build Coastguard Worker add_subdirectory(tests) 227*387f9dfdSAndroid Build Coastguard Worker endif(ENABLE_TESTS) 228*387f9dfdSAndroid Build Coastguard Worker 229*387f9dfdSAndroid Build Coastguard Worker add_subdirectory(tools) 230*387f9dfdSAndroid Build Coastguard Workerendif(ENABLE_CLANG_JIT) 231*387f9dfdSAndroid Build Coastguard Worker 232*387f9dfdSAndroid Build Coastguard Workerif(NOT TARGET uninstall) 233*387f9dfdSAndroid Build Coastguard Worker configure_file( 234*387f9dfdSAndroid Build Coastguard Worker "${CMAKE_CURRENT_SOURCE_DIR}/cmake/CmakeUninstall.cmake.in" 235*387f9dfdSAndroid Build Coastguard Worker "${CMAKE_CURRENT_BINARY_DIR}/CmakeUninstall.cmake" 236*387f9dfdSAndroid Build Coastguard Worker IMMEDIATE @ONLY) 237*387f9dfdSAndroid Build Coastguard Worker 238*387f9dfdSAndroid Build Coastguard Worker add_custom_target(uninstall 239*387f9dfdSAndroid Build Coastguard Worker COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/CmakeUninstall.cmake) 240*387f9dfdSAndroid Build Coastguard Workerendif() 241