blob: 69a4cdd51f374b0b88f7b5dbfd0e619eee518206 [file] [log] [blame]
Jakub Sujakdf5d9872023-05-22 17:38:56 +01001# Copyright (c) 2023 Arm Limited.
2#
3# SPDX-License-Identifier: MIT
4#
5# Permission is hereby granted, free of charge, to any person obtaining a copy
6# of this software and associated documentation files (the "Software"), to
7# deal in the Software without restriction, including without limitation the
8# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
9# sell copies of the Software, and to permit persons to whom the Software is
10# furnished to do so, subject to the following conditions:
11#
12# The above copyright notice and this permission notice shall be included in all
13# copies or substantial portions of the Software.
14#
15# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21# SOFTWARE.
22
23cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
24
25#---------------------------------------------------------------------
26# Compute Kernel Writer Project
27
28project(ComputeKernelWriter
29 VERSION 1.0.0
30 LANGUAGES CXX
Jakub Sujak7a698a32023-06-21 09:45:41 +010031)
Jakub Sujakdf5d9872023-05-22 17:38:56 +010032
33set(CMAKE_CXX_STANDARD 14)
34set(CMAKE_CXX_STANDARD_REQUIRED ON)
Jakub Sujakdf5d9872023-05-22 17:38:56 +010035
36include(GNUInstallDirs)
37
38message(STATUS "${CMAKE_PROJECT_NAME} ${CMAKE_PROJECT_VERSION}")
Jakub Sujakdf5d9872023-05-22 17:38:56 +010039
40#---------------------------------------------------------------------
41# Options
42
Jakub Sujakdf5d9872023-05-22 17:38:56 +010043option(CKW_ENABLE_OPENCL "Enable OpenCL code generation" OFF)
44option(CKW_ENABLE_ASSERTS "Enable assertions. Always enabled in Debug builds" OFF)
45option(CKW_BUILD_TESTING "Build the Compute Kernel Writer validation test suite" OFF)
Jakub Sujake86f9922023-07-05 17:30:02 +010046option(CKW_BUILD_PROTOTYPE "Build the prototype implementation of kernel writer." OFF)
Jakub Sujak7a698a32023-06-21 09:45:41 +010047option(CKW_CCACHE "Use compiler cache for faster recompilation" OFF)
Jakub Sujakdf5d9872023-05-22 17:38:56 +010048
49#---------------------------------------------------------------------
50# Build configuration
51
52get_property(CKW_IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
53
Jakub Sujakbec9b032023-06-09 14:13:30 +010054# Allow only Release or Debug builds
55if(NOT CKW_IS_MULTI_CONFIG) # Single-config generators
Jakub Sujakdf5d9872023-05-22 17:38:56 +010056 if(NOT CMAKE_BUILD_TYPE)
Jakub Sujakbec9b032023-06-09 14:13:30 +010057 set(CMAKE_BUILD_TYPE Release CACHE STRING "Options: Release (default) or Debug" FORCE)
Jakub Sujakdf5d9872023-05-22 17:38:56 +010058 endif()
Jakub Sujakbec9b032023-06-09 14:13:30 +010059else() # Multi-config generators
60 list(REMOVE_ITEM CMAKE_CONFIGURATION_TYPES RelWithDebInfo MinSizeRel)
Jakub Sujakdf5d9872023-05-22 17:38:56 +010061endif()
62
63# Simplistic CCache setup
64if(CKW_CCACHE)
65 find_program(CCACHE_FOUND ccache)
66 if(CCACHE_FOUND)
67 set(CMAKE_C_COMPILER_LAUNCHER ${CACHE_FOUND})
68 set(CMAKE_CXX_COMPILER_LAUNCHER ${CACHE_FOUND})
69 endif()
70endif()
71
72#---------------------------------------------------------------------
73# Library targets
74
Jakub Sujak7a698a32023-06-21 09:45:41 +010075set(CKW_CXX_FLAGS
76 -Wall
77 -Werror
78 -Wextra
79 -Wdisabled-optimization
80 -Wformat=2
81 -Winit-self
82 -Wstrict-overflow=2
83 -Wswitch-default
84 -Woverloaded-virtual
85 -Wformat-security
86 -Wctor-dtor-privacy
87 -Wsign-promo
88 -Weffc++
89 -pedantic
90)
91set(GNU_WARNINGS
92 -Wlogical-op
93 -Wstrict-null-sentinel
94)
95set(CKW_ASSERTS_OPTS
96 -fstack-protector-strong
97)
Jakub Sujakdf5d9872023-05-22 17:38:56 +010098
Jakub Sujak7a698a32023-06-21 09:45:41 +010099add_library(ckw)
100target_compile_options(ckw
101 PUBLIC
102 ${CKW_CXX_FLAGS}
103 "$<$<CXX_COMPILER_ID:GNU>:${GNU_WARNINGS}>"
104 "$<$<CONFIG:Debug>:${CKW_ASSERTS_OPTS}>"
Jakub Sujake1c96e72023-07-31 13:36:58 +0100105 "$<$<BOOL:${CKW_ENABLE_ASSERTS}>:${CKW_ASSERTS_OPTS}>"
Jakub Sujak7a698a32023-06-21 09:45:41 +0100106 # Set CMAKE_CXX_FLAGS last so user can overwrite options
107 ${CMAKE_CXX_FLAGS}
108 PRIVATE
Jakub Sujake86f9922023-07-05 17:30:02 +0100109 # Always optimize for binary size
Jakub Sujak7a698a32023-06-21 09:45:41 +0100110 $<$<CONFIG:Release>:-Os>
111)
Jakub Sujakdf5d9872023-05-22 17:38:56 +0100112
Jakub Sujak7a698a32023-06-21 09:45:41 +0100113target_compile_definitions(ckw PUBLIC
Jakub Sujakdf5d9872023-05-22 17:38:56 +0100114 $<$<CONFIG:Debug>:COMPUTE_KERNEL_WRITER_DEBUG_ENABLED>
115 $<$<CONFIG:Debug>:COMPUTE_KERNEL_WRITER_ASSERTS_ENABLED>
Jakub Sujake1c96e72023-07-31 13:36:58 +0100116 $<$<BOOL:${CKW_ENABLE_ASSERTS}>:COMPUTE_KERNEL_WRITER_ASSERTS_ENABLED>
Jakub Sujakdf5d9872023-05-22 17:38:56 +0100117 $<$<BOOL:${CKW_ENABLE_OPENCL}>:COMPUTE_KERNEL_WRITER_OPENCL_ENABLED>
Jakub Sujak7a698a32023-06-21 09:45:41 +0100118)
Jakub Sujakdf5d9872023-05-22 17:38:56 +0100119
120target_sources(ckw PRIVATE
Gunes Bayir806b8e82023-08-23 23:28:31 +0100121 src/types/ConstantData.cpp
Viet-Hoa Doe1c3b462023-07-31 17:13:34 +0100122 src/types/DataTypeHelpers.cpp
Jakub Sujakdf5d9872023-05-22 17:38:56 +0100123 src/Error.cpp
124 src/Helpers.cpp
Viet-Hoa Do2d0c2f52023-08-24 11:48:19 +0100125 src/ITile.cpp
Gunes Bayir3c776062023-07-12 14:50:56 +0100126 src/Kernel.cpp
Viet-Hoa Do1df9f6e2023-07-24 17:57:12 +0100127 src/KernelArgument.cpp
Gunes Bayir3c776062023-07-12 14:50:56 +0100128 src/KernelWriter.cpp
Gunes Bayir5e842512023-07-25 22:32:05 +0100129 src/Tensor3dMapper.cpp
Jakub Sujakdf5d9872023-05-22 17:38:56 +0100130 src/TensorInfo.cpp
Viet-Hoa Do0b23e0e2023-07-25 14:00:46 +0100131 src/TensorOperand.cpp
Gunes Bayire4211672023-07-25 10:37:13 +0100132 src/TensorSampler.cpp
Jakub Sujakdf5d9872023-05-22 17:38:56 +0100133 src/TensorUtils.cpp
134 src/TileInfo.cpp
Gunes Bayir3c776062023-07-12 14:50:56 +0100135 src/TileOperand.cpp
Viet-Hoa Docd1f03e2023-09-19 16:41:34 +0100136 src/TileView.cpp
Viet-Hoa Dobd4f6b92023-05-30 09:34:32 +0100137)
138
Jakub Sujakdf5d9872023-05-22 17:38:56 +0100139if(CKW_ENABLE_OPENCL)
140 target_sources(ckw PRIVATE
Gian Marco Iodiceebfdb5a2023-07-07 11:25:57 +0100141 src/cl/CLTensorArgument.cpp
Viet-Hoa Do0b23e0e2023-07-25 14:00:46 +0100142 src/cl/CLTensorComponent.cpp
Jakub Sujakdf5d9872023-05-22 17:38:56 +0100143 src/cl/CLHelpers.cpp
144 src/cl/CLTile.cpp
Viet-Hoa Do3389f532023-07-05 17:36:40 +0100145 src/cl/CLKernelWriter.cpp
Gunes Bayirc4117a32023-08-07 16:52:33 +0100146 src/cl/helpers/CLMemoryOpBufferHelper.cpp
Gunes Bayir038fe912023-08-11 12:50:31 +0100147 src/cl/helpers/CLMemoryOpImage2dHelper.cpp
Jakub Sujak7a698a32023-06-21 09:45:41 +0100148 )
Jakub Sujakdf5d9872023-05-22 17:38:56 +0100149endif()
150
Jakub Sujakdf5d9872023-05-22 17:38:56 +0100151target_include_directories(ckw
152 PUBLIC ${CMAKE_CURRENT_LIST_DIR}/include
153 PRIVATE ${CMAKE_CURRENT_LIST_DIR}
Viet-Hoa Doce3c48c2023-07-03 13:44:43 +0100154)
Jakub Sujakdf5d9872023-05-22 17:38:56 +0100155
Jakub Sujakdf5d9872023-05-22 17:38:56 +0100156#---------------------------------------------------------------------
157# Validation tests
158
159if(CKW_BUILD_TESTING)
160 add_executable(ckw_validation
Jakub Sujakdf5d9872023-05-22 17:38:56 +0100161 validation/Validation.cpp
Jakub Sujak7a698a32023-06-21 09:45:41 +0100162 )
Jakub Sujakdf5d9872023-05-22 17:38:56 +0100163
164 target_link_libraries(ckw_validation PRIVATE ckw)
165 target_include_directories(ckw_validation
166 PRIVATE ${CMAKE_CURRENT_LIST_DIR}
Jakub Sujak7a698a32023-06-21 09:45:41 +0100167 )
Jakub Sujakdf5d9872023-05-22 17:38:56 +0100168endif()
169
170#---------------------------------------------------------------------
Viet-Hoa Doce3c48c2023-07-03 13:44:43 +0100171# Prototype
Jakub Sujak7a698a32023-06-21 09:45:41 +0100172
Viet-Hoa Doce3c48c2023-07-03 13:44:43 +0100173if(CKW_BUILD_PROTOTYPE)
174 add_subdirectory(prototype)
Viet-Hoa Dobd4f6b92023-05-30 09:34:32 +0100175endif()
176
177#---------------------------------------------------------------------
Jakub Sujakdf5d9872023-05-22 17:38:56 +0100178# Installing
179
180install(TARGETS ckw
181 CONFIGURATIONS Release
182 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
183 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
184 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
Jakub Sujak7a698a32023-06-21 09:45:41 +0100185)
Jakub Sujakdf5d9872023-05-22 17:38:56 +0100186
187install(DIRECTORY include/ckw
188 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
Jakub Sujak7a698a32023-06-21 09:45:41 +0100189)