1# ------------------------------------------------------------------- 2# ffrt CMake 3# 4# To enable thread sanitizer: 5# -DCMAKE_CXX_FLAGS="-fsanitize=thread -g" 6# 7# To enable address and leak sanitizers 8# -DCMAKE_CXX_FLAGS="-fsanitize=address -fsanitize=leak -g" 9# ------------------------------------------------------------------- 10 11# CMake version 12cmake_minimum_required (VERSION 3.10) 13 14# build options 15option(FFRT_BBOX_ENABLE "Enables ffrt black box" ON) 16option(FFRT_EXAMPLE "Enables ffrt examples compile" ON) 17option(FFRT_BENCHMARKS "Enables ffrt Benchmarks" OFF) 18option(FFRT_TEST_ENABLE "Enables ffrt test" OFF) 19option(FFRT_CLANG_COMPILE "use clang/clang++ for compiling" ON) 20option(FFRT_SANITIZE "enable address or thread sanitizer" OFF) 21option(FFRT_IO_TASK_SCHEDULER "enalbe io task scheduler" OFF) 22 23# set compiler clang or gcc, must before project(ffrt) 24if(FFRT_CLANG_COMPILE STREQUAL ON) 25 set(CMAKE_C_COMPILER clang) 26 set(CMAKE_CXX_COMPILER clang++) 27else() 28 set(CMAKE_C_COMPILER gcc) 29 set(CMAKE_CXX_COMPILER g++) 30endif() 31 32# Project name 33project(ffrt) 34 35#cmake build type settings,release or debug 36if(CMAKE_BUILD_TYPE STREQUAL Release) 37 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DFFRT_RELEASE -DFFRT_LOG_LEVEL=0") 38else() 39 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DFFRT_LOG_LEVEL=3") 40endif() 41 42# project-specific variables 43set(FFRT_CODE_PATH ${PROJECT_SOURCE_DIR}/src) 44set(FFRT_INNER_API_PATH ${PROJECT_SOURCE_DIR}/interfaces/inner_api) 45set(FFRT_API_PATH ${PROJECT_SOURCE_DIR}/interfaces/kits) 46set(FFRT_BUILD_PATH ${PROJECT_SOURCE_DIR}/build) 47set(ROOT_PATH ${PROJECT_SOURCE_DIR}/../../../../) 48set(TRACE_PATH ${FFRT_CODE_PATH}/dfx/trace) 49set(QOS_PATH ${FFRT_CODE_PATH}/sched/) 50 51#compiler flags 52if(FFRT_SANITIZE STREQUAL address) 53 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fsanitize-recover=address,all -fno-omit-frame-pointer") 54elseif(FFRT_SANITIZE STREQUAL thread) 55 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread -fno-omit-frame-pointer") 56endif() 57 58set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden") 59if(CMAKE_BUILD_TYPE STREQUAL Release) 60set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -g -O2 -fPIC") 61else() 62set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -g -O0 -fPIC") 63endif() 64 65# add the binary tree to the search path for include files 66include_directories(${FFRT_API_PATH}) 67include_directories(${FFRT_INNER_API_PATH}) 68include_directories(${FFRT_CODE_PATH}) 69include_directories(${TRACE_PATH}) 70include_directories(${QOS_PATH}) 71 72message(STATUS "CMAKE_BUILD_TYPE: " ${CMAKE_BUILD_TYPE}) 73message(STATUS "FFRT_BBOX_ENABLE: " ${FFRT_BBOX_ENABLE}) 74message(STATUS "FFRT_EXAMPLE: " ${FFRT_EXAMPLE}) 75message(STATUS "FFRT_BENCHMARKS: " ${FFRT_BENCHMARKS}) 76message(STATUS "FFRT_TEST_ENABLE: " ${FFRT_TEST_ENABLE}) 77message(STATUS "FFRT_CLANG_COMPILE: " ${FFRT_CLANG_COMPILE}) 78message(STATUS "FFRT_SANITIZE: " ${FFRT_SANITIZE}) 79 80add_definitions("-DFFRT_IO_TASK_SCHEDULER") 81add_definitions("-DFFRT_PTHREAD_ENABLE") 82 83# ffrt qos 84add_definitions(-DUSE_OHOS_QOS) 85 86# ffrt BBOX 87if(FFRT_BBOX_ENABLE STREQUAL ON) 88 add_definitions("-DFFRT_BBOX_ENABLE") 89endif() 90 91#ffrt io task scheduler 92if(FFRT_IO_TASK_SCHEDULER STREQUAL ON) 93 add_definitions(-DFFRT_IO_TASK_SCHEDULER) 94endif() 95 96# libffrt.so 97add_subdirectory(src) 98LINK_DIRECTORIES(${FFRT_BUILD_PATH}/src) 99 100# ffrt Examples 101if(FFRT_EXAMPLE STREQUAL ON) 102 add_subdirectory(examples) 103endif() 104 105# ffrt Benchmarks 106if(FFRT_BENCHMARKS STREQUAL ON) 107 add_subdirectory(benchmarks) 108endif() 109