|
14 | 14 | #
|
15 | 15 |
|
16 | 16 | cmake_minimum_required(VERSION 3.12 FATAL_ERROR)
|
17 |
| -project(dml VERSION 0.1.3 LANGUAGES C CXX) |
| 17 | +project(Dml VERSION 0.1.4 LANGUAGES C CXX) |
18 | 18 |
|
19 |
| -set(CMAKE_EXPORT_PACKAGE_REGISTRY ON) |
| 19 | +set(PROJECT_SOVERSION 0) |
20 | 20 |
|
21 | 21 | option(DML_HW "Build hardware path or not" OFF)
|
22 |
| -# TODO: See todo below |
23 |
| -option(DML_RECORD_SWITCHES "Enables -frecord-gcc-switches flag" OFF) |
| 22 | +option(DML_SUPPRESS_WARNINGS "Suppress all compiler warnings" OFF) |
| 23 | + |
| 24 | +if (CMAKE_C_COMPILER_ID STREQUAL "GNU") |
| 25 | + option(DML_RECORD_SWITCHES "Enables -frecord-gcc-switches flag" OFF) |
| 26 | +else() |
| 27 | + set(DML_RECORD_SWITCHES OFF CACHE BOOL "Disable recording of switches for non-gnu compiler" FORCE) |
| 28 | +endif() |
| 29 | + |
| 30 | +# TODO: Remove all options below |
24 | 31 | option(LIB_ACCEL_3_2 "Use libaccel-3.2" OFF)
|
| 32 | +option(SANITIZE_MEMORY "Enables memory sanitizing" OFF) |
| 33 | +option(SANITIZE_THREADS "Enables threads sanitizing" OFF) |
25 | 34 | option(LOG_HW_INIT "Enables HW initialization log" OFF)
|
26 | 35 | option(EFFICIENT_WAIT "Enables usage of umonitor/umwait" OFF)
|
27 | 36 |
|
28 |
| -include(cmake/CompileOptions.cmake) |
29 |
| -include(cmake/git_revision.cmake) |
30 |
| -include(GenerateExportHeader) |
31 |
| -include(CMakePackageConfigHelpers) |
| 37 | +if (SANITIZE_MEMORY) |
| 38 | + message(STATUS "Memory sanitizing build is enabled") |
32 | 39 |
|
33 |
| -if ("${CMAKE_BUILD_TYPE}" STREQUAL "") |
34 |
| - message(STATUS "CMAKE_BUILD_TYPE is unset, defaulting to Release") |
35 |
| - set(CMAKE_BUILD_TYPE "Release") |
| 40 | + if (WIN32) |
| 41 | + message(FATAL_ERROR "Memory sanitizing is not supported in Windows") |
| 42 | + else () |
| 43 | + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fsanitize=leak -g") |
| 44 | + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fsanitize=leak -g") |
| 45 | + endif () |
36 | 46 | endif ()
|
37 | 47 |
|
38 |
| -if (MSVC) |
39 |
| - add_compile_options( |
40 |
| - # Security |
41 |
| - /GS |
| 48 | +if (SANITIZE_THREADS) |
| 49 | + message(STATUS "Threads sanitizing build is enabled") |
42 | 50 |
|
43 |
| - # Quality |
44 |
| -# /WX |
45 |
| - # TODO: There are several warning to consider, also MSVC warning level can be set only via CMAKE_CXX_FLAGS |
46 |
| -# /Wall |
47 |
| - ) |
48 |
| -else() |
49 |
| - add_compile_options( |
50 |
| - # Security |
51 |
| - -fPIC |
52 |
| - -Werror |
53 |
| - -fstack-protector |
54 |
| - --param=ssp-buffer-size=8 |
55 |
| - -Wl,-z,relro,-z,now |
56 |
| - -Wl,-z,noexecstack |
57 |
| - -fstack-clash-protection |
58 |
| -# -frecord-gcc-switches TODO: seems unnecessary |
59 |
| - |
60 |
| - # Quality |
61 |
| - # TODO: I can't fix all of them in one go (>100) |
62 |
| -# -Werror -Wall -Wextra -pedantic |
63 |
| - ) |
64 |
| - |
65 |
| - if ("${CMAKE_BUILD_TYPE}" STREQUAL "Release") |
66 |
| - add_compile_definitions(_FORTIFY_SOURCE=2) |
67 |
| - endif () |
68 |
| - |
69 |
| - # TODO: They were already included into SDL options, why do we have the choice? |
70 |
| - if (DML_RECORD_SWITCHES) |
71 |
| - add_compile_options(-frecord-gcc-switches) |
| 51 | + if (WIN32) |
| 52 | + message(FATAL_ERROR "Threads sanitizing is not supported in Windows") |
| 53 | + else () |
| 54 | + set(CMAKE_THREAD_PREFER_PTHREAD TRUE) |
| 55 | + set(THREADS_PREFER_PTHREAD_FLAG TRUE) |
| 56 | + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=thread -g") |
| 57 | + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread -g") |
72 | 58 | endif ()
|
73 |
| -endif() |
| 59 | +endif () |
74 | 60 |
|
75 |
| -message(STATUS "Build type: ${CMAKE_BUILD_TYPE}") |
| 61 | +include(cmake/CompileOptions.cmake) |
| 62 | +include(cmake/utils.cmake) |
| 63 | +include(CMakePackageConfigHelpers) |
| 64 | +include(GNUInstallDirs) |
76 | 65 |
|
77 |
| -# Finding Intel DML library sources |
78 |
| -file(GLOB DML_C_SRC sources/*.c) |
| 66 | +if (NOT CMAKE_BUILD_TYPE) |
| 67 | + message(STATUS "CMAKE_BUILD_TYPE is unset, defaulting to Release") |
| 68 | + set(CMAKE_BUILD_TYPE Release) |
| 69 | +endif () |
79 | 70 |
|
80 |
| -# Adding Intel DML reference library target |
81 |
| -add_library(dml ${DML_C_SRC} $<TARGET_OBJECTS:dml_core> |
82 |
| - $<TARGET_OBJECTS:sw_path> |
83 |
| - $<$<BOOL:$<TARGET_PROPERTY:ENABLE_HW_PATH>>:$<TARGET_OBJECTS:hw_path>>) |
| 71 | +if (CMAKE_C_COMPILER_ID STREQUAL "MSVC") |
| 72 | + include(cmake/msvc.cmake) |
| 73 | +elseif (CMAKE_C_COMPILER_ID STREQUAL "GNU") |
| 74 | + include(cmake/gnu.cmake) |
| 75 | +else () |
| 76 | + message(FATAL_ERROR "Unknown compiler ID: ${CMAKE_C_COMPILER_ID}") |
| 77 | +endif () |
84 | 78 |
|
85 |
| -target_link_libraries(dml ${CMAKE_DL_LIBS}) |
| 79 | +# Project-wide settings |
| 80 | +add_compile_options( |
| 81 | + ${DML_SECURITY_OPTIONS} |
| 82 | + $<$<BOOL:${DML_RECORD_SWITCHES}>:-frecord-gcc-switches>) |
| 83 | +add_compile_definitions(${DML_SECURITY_DEFINITIONS}) |
86 | 84 |
|
87 |
| -# Setting external and internal interfaces for DML reference library |
88 |
| -target_include_directories(dml |
89 |
| - PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> $<INSTALL_INTERFACE:include/dml> |
90 |
| - PRIVATE $<TARGET_PROPERTY:dml_core,INTERFACE_INCLUDE_DIRECTORIES> |
91 |
| - PRIVATE $<$<BOOL:$<TARGET_PROPERTY:ENABLE_HW_PATH>>:$<TARGET_PROPERTY:hw_path,INTERFACE_INCLUDE_DIRECTORIES>> |
92 |
| - PRIVATE sources/include) |
| 85 | +message(STATUS "Build type: ${CMAKE_BUILD_TYPE}") |
93 | 86 |
|
| 87 | +# TODO: Remove when option is removed |
94 | 88 | if (DML_HW)
|
95 | 89 | message(STATUS "HW path: ON")
|
96 | 90 | endif()
|
97 | 91 |
|
98 |
| -target_compile_features(dml PRIVATE c_std_11) |
99 |
| - |
100 |
| -set_target_properties(dml PROPERTIES ENABLE_HW_PATH ${DML_HW}) |
101 |
| - |
102 |
| -target_compile_definitions(dml PUBLIC DML |
103 |
| - PRIVATE DML_BADARG_CHECK |
104 |
| - PRIVATE $<$<BOOL:$<TARGET_PROPERTY:ENABLE_HW_PATH>>: DML_HW>) |
105 |
| - |
| 92 | +# TODO: Remove |
106 | 93 | get_git_revision()
|
107 | 94 |
|
108 |
| -# Internal libraries |
109 | 95 | add_subdirectory(sources)
|
110 |
| -add_subdirectory(middle-layer) |
111 |
| -add_subdirectory(high-level-api) |
112 |
| - |
113 |
| -# Testing |
114 | 96 | add_subdirectory(examples)
|
115 | 97 |
|
116 |
| -# Configuration files |
117 |
| -generate_export_header(dml) |
118 |
| - |
119 | 98 | # Install rules
|
120 |
| -install(TARGETS dml dml_ml dml_common dmlhl |
121 |
| - EXPORT DmlConfig |
122 |
| - ARCHIVE DESTINATION lib |
123 |
| - INCLUDES DESTINATION include) |
124 |
| - |
125 |
| -export(TARGETS dml dml_ml dml_common dmlhl |
126 |
| - NAMESPACE Dml:: |
127 |
| - FILE "${CMAKE_CURRENT_BINARY_DIR}/DmlConfig.cmake") |
128 |
| - |
129 |
| -install(EXPORT DmlConfig |
| 99 | +install(EXPORT ${PROJECT_NAME}Targets |
130 | 100 | NAMESPACE Dml::
|
131 |
| - DESTINATION ${CMAKE_INSTALL_PREFIX}/dml/cmake) |
| 101 | + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}) |
| 102 | + |
| 103 | +file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake |
| 104 | + "include(\${CMAKE_CURRENT_LIST_DIR}/${PROJECT_NAME}Targets.cmake)\n") |
132 | 105 |
|
133 | 106 | write_basic_package_version_file(
|
134 |
| - "${PROJECT_BINARY_DIR}/DmlConfigVersion.cmake" |
| 107 | + "${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" |
135 | 108 | VERSION ${PROJECT_VERSION}
|
136 | 109 | COMPATIBILITY AnyNewerVersion
|
137 | 110 | )
|
138 | 111 |
|
139 |
| -install(FILES "${PROJECT_BINARY_DIR}/DmlConfigVersion.cmake" |
140 |
| - DESTINATION ${CMAKE_INSTALL_PREFIX}/dml/cmake) |
141 |
| - |
142 |
| -install(DIRECTORY include |
143 |
| - DESTINATION ${CMAKE_INSTALL_PREFIX}/include/dml |
144 |
| - FILES_MATCHING PATTERN *.h) |
145 |
| - |
146 |
| -install(DIRECTORY high-level-api/include/dml |
147 |
| - DESTINATION ${CMAKE_INSTALL_PREFIX}/include/ |
148 |
| - FILES_MATCHING PATTERN *.hpp) |
149 |
| - |
150 |
| -install(DIRECTORY middle-layer/common/include/dml_common |
151 |
| - DESTINATION ${CMAKE_INSTALL_PREFIX}/include/ |
152 |
| - FILES_MATCHING PATTERN *.hpp) |
| 112 | +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" |
| 113 | + "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" |
| 114 | + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}) |
153 | 115 |
|
154 |
| -install(DIRECTORY middle-layer/include/dml_ml |
155 |
| - DESTINATION ${CMAKE_INSTALL_PREFIX}/include/ |
156 |
| - FILES_MATCHING PATTERN *.hpp) |
| 116 | +install(DIRECTORY include/ |
| 117 | + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} |
| 118 | + FILES_MATCHING PATTERN *.h PATTERN *.hpp) |
0 commit comments