# Copyright (c) 2023 Huawei Device Co., Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import("//build/ohos.gni")
import("ffrt.gni")
defines = []
config("ffrt_config") {
visibility = [ ":*" ]
include_dirs = [
"include",
"interfaces/kits",
"interfaces/inner_api"
]
ffrt_defaults_cflags = [
"-fstack-protector-all",
"-Wno-unused-variable",
"-Wno-unused-function",
"-Wno-unused-value",
"-Wno-unused-private-field",
"-Wno-tautological-constant-out-of-range-compare",
"-Wno-shadow",
"-Wno-float-equal",
"-Wno-unused-parameter",
"-fno-common",
]
cflags = ffrt_defaults_cflags
cflags_c = [
"-fstack-protector-all",
"-fno-common",
]
cflags_cc = ffrt_defaults_cflags
#ffrt_release_defines = [
# "FFRT_LOG_LEVEL=0",
# "FFRT_RELEASE",
#]
if (target_cpu == "arm") {
defines += [ "APP_USE_ARM" ]
}
if (use_hwasan) {
defines += [ "HWASAN_MODE" ]
}
#defines += ffrt_release_defines
}
config("ffrt_inner_config") {
include_dirs = [
"include",
"include/sched",
"src",
"src/dfx/log",
"src_ext",
"src/sched",
]
if (is_ohos && is_clang && (target_cpu == "arm" || target_cpu == "arm64")) {
cflags = [
"-flto=thin",
"-fsplit-lto-unit",
]
}
ffrt_inner_cflags = [
"-std=c++17",
"-g",
"-D_FORTIFY_SOURCE=2",
"-O2",
"-fPIC",
"-DFFRT_PTHREAD_ENABLE",
"-DFFRT_OH_WATCHDOG_ENABLE",
"-DQOS_WORKER_FRAME_RTG",
"-DUSE_OHOS_QOS",
"-DOHOS_STANDARD_SYSTEM",
"-DTASKSTAT_LOG_ENABLE=0",
"-fvisibility=hidden",
]
cflags_cc = ffrt_inner_cflags
defines = [
"FFRT_LOG_LEVEL=3",
"FFRT_BBOX_ENABLE",
"FFRT_OH_EVENT_RECORD",
"FFRT_CO_BACKTRACE_OH_ENABLE",
"FFRT_OH_TRACE_ENABLE",
"FFRT_TRACE_LEVEL=1",
"FFRT_WORKER_MONITOR",
"FFRT_TRACE_RECORD_LEVEL=1",
"FFRT_SEND_EVENT",
"FFRT_ALLOCATOR_MMAP_SIZE=${ffrt_allocator_mmap_size}",
"FFRT_STACK_SIZE=${ffrt_stack_size}",
]
if (is_asan && !use_hwasan) {
defines += [ "FFRT_ASAN_MODE" ]
}
if (is_tsan) {
defines += [ "FFRT_CLOSE_COROUTINE_MODE" ]
}
if (is_ohos && !ffrt_task_local_enable) {
defines += [ "FFRT_TASK_LOCAL_ENABLE" ]
}
#build_variant is root/user, default user
if (build_variant == "root") {
defines += [ "FFRT_ENG_DEBUG" ]
}
}
ohos_shared_library("libffrt") {
if (ffrt_support_enable) {
branch_protector_ret = "pac_ret"
public_configs = [ ":ffrt_config" ]
configs = [ ":ffrt_inner_config" ]
ldflags = [
"-Wl,-z,nodelete",
"-Wl,-Bsymbolic-functions",
]
sources = [
"src/core/entity.cpp",
"src/core/task.cpp",
"src/core/task_io.cpp",
"src/core/loop_api.cpp",
"src/core/poller_api.cpp",
"src/core/timer_api.cpp",
"src/core/version_ctx.cpp",
"src/dfx/bbox/bbox.cpp",
"src/dfx/bbox/fault_logger_fd_manager.cpp",
"src/dfx/dump/dump.cpp",
"src/dfx/log/ffrt_log.cpp",
"src/dfx/sysevent/sysevent.cpp",
"src/dfx/trace/ffrt_trace.cpp",
"src/dfx/trace/ffrt_trace_chain.cpp",
"src/dfx/trace_record/ffrt_trace_record.cpp",
"src/dfx/watchdog/watchdog_util.cpp",
"src/dm/dependence_manager.cpp",
"src/dm/sdependence_manager.cpp",
"src/eu/co2_context.c",
"src/eu/co_routine.cpp",
"src/eu/co_routine_factory.cpp",
"src/eu/cpu_worker.cpp",
"src/eu/execute_unit.cpp",
"src/eu/base_poller.cpp",
"src/eu/io_poller.cpp",
"src/eu/loop_poller.cpp",
"src/eu/loop.cpp",
"src/eu/osattr_manager.cpp",
"src/eu/qos_convert.cpp",
"src/eu/qos_interface.cpp",
"src/eu/rtg_ioctl.cpp",
"src/eu/rtg_perf_ctrl.cpp",
"src/eu/sexecute_unit.cpp",
"src/eu/worker_thread.cpp",
"src/ipc/ipc.cpp",
"src/queue/base_queue.cpp",
"src/queue/concurrent_queue.cpp",
"src/queue/eventhandler_adapter_queue.cpp",
"src/queue/eventhandler_interactive_queue.cpp",
"src/queue/queue_api.cpp",
"src/queue/queue_handler.cpp",
"src/queue/queue_monitor.cpp",
"src/queue/serial_queue.cpp",
"src/queue/traffic_record.cpp",
"src/sched/deadline.cpp",
"src/sched/execute_ctx.cpp",
"src/sched/frame_interval.cpp",
"src/sched/interval.cpp",
"src/sched/load_tracking.cpp",
"src/sched/multi_workgroup.cpp",
"src/sched/qos.cpp",
"src/sched/sched_deadline.cpp",
"src/sched/scheduler.cpp",
"src/sched/task_scheduler.cpp",
"src/sync/condition_variable.cpp",
"src/sync/delayed_worker.cpp",
"src/sync/timer_manager.cpp",
"src/sync/mutex.cpp",
"src/sync/perf_counter.cpp",
"src/sync/record_mutex.cpp",
"src/sync/shared_mutex.cpp",
"src/sync/sleep.cpp",
"src/sync/sync.cpp",
"src/sync/thread.cpp",
"src/sync/wait_queue.cpp",
"src/tm/cpu_task.cpp",
"src/tm/io_task.cpp",
"src/tm/queue_task.cpp",
"src/tm/scpu_task.cpp",
"src/tm/task_base.cpp",
"src/tm/task_factory.cpp",
"src/tm/uv_task.cpp",
"src/util/capability.cpp",
"src/util/cpu_boost_wrapper.cpp",
"src/util/ffrt_cpu_boost.cpp",
"src/util/ffrt_facade.cpp",
"src/util/graph_check.cpp",
"src/util/init.cpp",
"src/util/spmc_queue.cpp",
"src/util/time_format.cpp",
"src/util/white_list.cpp",
"src/util/worker_monitor.cpp",
]
external_deps = [
"bounds_checking_function:libsec_shared",
"c_utils:utils",
"faultloggerd:libbacktrace_local",
"faultloggerd:libdfx_dumpcatcher",
"faultloggerd:libfaultloggerd",
"faultloggerd:libunwinder",
"hilog:libhilog",
"hisysevent:libhisysevent",
"faultloggerd:libasync_stack"
]
defines = []
if (ffrt_async_stack_enable) {
defines += [ "FFRT_ASYNC_STACKTRACE" ]
sources += [ "src/dfx/async_stack/ffrt_async_stack.cpp" ]
}
defines += [ "FFRT_ENABLE_HITRACE_CHAIN" ]
#defines += [ "FFRT_ENABLE_PERF_TRACE_SCOPED" ]
output_extension = "so"
symlink_target_name = [ "libffrt.z.so" ]
part_name = "ffrt"
subsystem_name = "resourceschedule"
install_images = [
"system",
"updater",
]
innerapi_tags = [
"llndk",
"ndk",
"sasdk",
]
}
}
ohos_prebuilt_etc("whitelist_cfg") {
relative_install_dir = "ffrt"
source = "ffrt_whitelist.conf"
part_name = "ffrt"
subsystem_name = "resourceschedule"
install_enable = true
install_images = [
"system",
"updater",
]
}
group("ffrt_ndk") {
deps = [
":libffrt",
":whitelist_cfg",
]
}