1#
2# Copyright (C) 2024 Huawei Technologies Co, Ltd.
3#
4
5cmake_minimum_required(VERSION 3.18)
6project(Util LANGUAGES CXX)
7
8set(target_name RuntimeUtil)
9
10find_package(AGPBaseAPI REQUIRED)
11find_package(AGPEngineAPI REQUIRED)
12
13include(${BASE_ROOT_DIRECTORY}/cmake/cmake_tools.cmake)
14
15#
16# Library target.
17#
18add_library(${target_name} STATIC)
19
20set(sources
21    include/util/core_library_loader.h
22    include/util/io_util.h
23    include/util/json.h
24    include/util/json_util.h
25    include/util/namespace.h
26    include/util/path_util.h
27
28    src/util/io_util.cpp
29    src/util/json.cpp
30    src/util/path_util.cpp
31)
32source_group(TREE ${CMAKE_CURRENT_LIST_DIR} FILES ${sources})
33
34target_sources(${target_name} PRIVATE
35    ${sources}
36)
37
38target_include_directories(${target_name} PUBLIC include PRIVATE src)
39
40target_link_libraries(${target_name} PRIVATE
41    AGPBase::AGPBaseAPI
42    AGPEngine::AGPEngineAPI
43)
44
45set_property(TARGET ${target_name} PROPERTY CXX_STANDARD 17)
46set_property(TARGET ${target_name} PROPERTY CXX_EXTENSIONS OFF)
47
48setup_warnings(${target_name})
49
50# Fix for min/max macro conflicts on windows.
51if(WIN32)
52    target_compile_definitions(${target_name} PRIVATE NOMINMAX)
53endif()
54
55# Disable RTTI
56if(MSVC)
57    target_compile_options(${target_name} PRIVATE /GR-)
58elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
59    target_compile_options(${target_name} PRIVATE -fno-rtti)
60endif()
61
62#
63# Clang format target
64#
65set(formatTarget "Format${target_name}")
66add_custom_target(${formatTarget}
67    COMMAND clang-format -verbose -i ${src}
68    WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
69)
70set_target_properties(${formatTarget} PROPERTIES FOLDER Formatting)
71