• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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