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" OFF) 20option(FFRT_SANITIZE "enable address or thread sanitizer" OFF) 21 22# set compiler clang or gcc, must before project(ffrt) 23if(FFRT_CLANG_COMPILE STREQUAL ON) 24 set(CMAKE_C_COMPILER clang) 25 set(CMAKE_CXX_COMPILER clang++) 26else() 27 set(CMAKE_C_COMPILER gcc) 28 set(CMAKE_CXX_COMPILER g++) 29endif() 30 31# Project name 32project(ffrt) 33 34set(CMAKE_EXPORT_COMPILE_COMMANDS ON) 35 36#cmake build type settings,release or debug 37if(CMAKE_BUILD_TYPE STREQUAL Release) 38 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DFFRT_RELEASE -DFFRT_LOG_LEVEL=0") 39else() 40 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DFFRT_LOG_LEVEL=3") 41endif() 42 43# project-specific variables 44set(FFRT_CODE_PATH ${PROJECT_SOURCE_DIR}/src) 45set(FFRT_INNER_INCLUDE_PATH ${PROJECT_SOURCE_DIR}/include) 46set(FFRT_INNER_API_PATH ${PROJECT_SOURCE_DIR}/interfaces/inner_api) 47set(FFRT_API_PATH ${PROJECT_SOURCE_DIR}/interfaces/kits) 48set(FFRT_BUILD_PATH ${PROJECT_SOURCE_DIR}/build) 49set(ROOT_PATH ${PROJECT_SOURCE_DIR}/../) 50set(SECUREC_PATH ${ROOT_PATH}/third_party/bounds_checking_function CACHE PATH 51 "Path to securec") 52set(TRACE_PATH ${FFRT_CODE_PATH}/dfx/trace) 53set(QOS_PATH ${FFRT_CODE_PATH}/sched/) 54set(securec_includes ${SECUREC_PATH}/include) 55aux_source_directory(${SECUREC_PATH}/src securec_srcs) 56add_library(securec SHARED ${securec_srcs}) 57target_include_directories(securec PRIVATE ${securec_includes}) 58include_directories(${securec_includes}) 59 60#compiler flags 61if(FFRT_SANITIZE STREQUAL address) 62 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fsanitize-recover=address,all -fno-omit-frame-pointer -DASAN_MODE") 63elseif(FFRT_SANITIZE STREQUAL thread) 64 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread -fno-omit-frame-pointer -DTSAN_MODE") 65endif() 66 67if(FFRT_UT_ENABLE STREQUAL OFF AND FFRT_ST_ENABLE STREQUAL OFF) 68 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden") 69endif() 70if(CMAKE_BUILD_TYPE STREQUAL Release) 71 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -g -O2 -fPIC") 72else() 73 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -g -O0 -fPIC") 74endif() 75 76# add the binary tree to the search path for include files 77include_directories(${FFRT_API_PATH}) 78include_directories(${FFRT_INNER_API_PATH}) 79include_directories(${FFRT_INNER_INCLUDE_PATH}) 80include_directories(${FFRT_CODE_PATH}) 81include_directories(${TRACE_PATH}) 82include_directories(${QOS_PATH}) 83 84message(STATUS "CMAKE_BUILD_TYPE: " ${CMAKE_BUILD_TYPE}) 85message(STATUS "FFRT_BBOX_ENABLE: " ${FFRT_BBOX_ENABLE}) 86message(STATUS "FFRT_EXAMPLE: " ${FFRT_EXAMPLE}) 87message(STATUS "FFRT_BENCHMARKS: " ${FFRT_BENCHMARKS}) 88message(STATUS "FFRT_TEST_ENABLE: " ${FFRT_TEST_ENABLE}) 89message(STATUS "FFRT_CLANG_COMPILE: " ${FFRT_CLANG_COMPILE}) 90message(STATUS "FFRT_SANITIZE: " ${FFRT_SANITIZE}) 91 92add_definitions("-DFFRT_PTHREAD_ENABLE") 93add_definitions("-DFFRT_ENABLE_TRAFFIC_MONITOR") 94 95# ffrt qos 96add_definitions(-DUSE_OHOS_QOS) 97 98# ffrt BBOX 99if(FFRT_BBOX_ENABLE STREQUAL ON) 100 add_definitions("-DFFRT_BBOX_ENABLE") 101endif() 102 103# ffrt trace record level 104add_definitions("-DFFRT_TRACE_RECORD_LEVEL=1") 105 106# libffrt.so 107add_subdirectory(src) 108LINK_DIRECTORIES(${FFRT_BUILD_PATH}/src) 109 110# ffrt Examples 111if(FFRT_EXAMPLE STREQUAL ON) 112 add_subdirectory(examples) 113endif() 114 115# ffrt Benchmarks 116if(FFRT_BENCHMARKS STREQUAL ON) 117 add_subdirectory(benchmarks) 118endif() 119 120# ffrt unit tests 121if(FFRT_TEST_ENABLE STREQUAL ON) 122 add_subdirectory(test) 123endif() 124