• 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" 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