Dejan Mircevski | b6fe02f | 2016-01-07 13:44:22 -0500 | [diff] [blame] | 1 | # Copyright (c) 2015-2016 The Khronos Group Inc. |
Kenneth Benzie (Benie) | 83e5a29 | 2015-05-22 18:26:19 +0100 | [diff] [blame] | 2 | # |
David Neto | 9fc8658 | 2016-09-01 15:33:59 -0400 | [diff] [blame] | 3 | # Licensed under the Apache License, Version 2.0 (the "License"); |
| 4 | # you may not use this file except in compliance with the License. |
| 5 | # You may obtain a copy of the License at |
Kenneth Benzie (Benie) | 83e5a29 | 2015-05-22 18:26:19 +0100 | [diff] [blame] | 6 | # |
David Neto | 9fc8658 | 2016-09-01 15:33:59 -0400 | [diff] [blame] | 7 | # http://www.apache.org/licenses/LICENSE-2.0 |
Kenneth Benzie (Benie) | 83e5a29 | 2015-05-22 18:26:19 +0100 | [diff] [blame] | 8 | # |
David Neto | 9fc8658 | 2016-09-01 15:33:59 -0400 | [diff] [blame] | 9 | # Unless required by applicable law or agreed to in writing, software |
| 10 | # distributed under the License is distributed on an "AS IS" BASIS, |
| 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 12 | # See the License for the specific language governing permissions and |
| 13 | # limitations under the License. |
Kenneth Benzie (Benie) | 83e5a29 | 2015-05-22 18:26:19 +0100 | [diff] [blame] | 14 | |
Daniel Robertson | c31d7cb | 2016-03-14 08:41:32 -0400 | [diff] [blame] | 15 | cmake_minimum_required(VERSION 2.8.12) |
Tim Diekmann | c26778f | 2017-10-10 14:23:42 +0200 | [diff] [blame] | 16 | if (POLICY CMP0048) |
| 17 | cmake_policy(SET CMP0048 NEW) |
| 18 | endif() |
Lei Zhang | 190b0d3 | 2016-08-07 22:49:00 -0400 | [diff] [blame] | 19 | if (POLICY CMP0054) |
| 20 | # Avoid dereferencing variables or interpret keywords that have been |
| 21 | # quoted or bracketed. |
| 22 | # https://cmake.org/cmake/help/v3.1/policy/CMP0054.html |
| 23 | cmake_policy(SET CMP0054 NEW) |
| 24 | endif() |
Lei Zhang | 5c3c054 | 2017-04-05 17:32:39 -0400 | [diff] [blame] | 25 | set_property(GLOBAL PROPERTY USE_FOLDERS ON) |
Lei Zhang | 190b0d3 | 2016-08-07 22:49:00 -0400 | [diff] [blame] | 26 | |
Lei Zhang | e3800df | 2015-07-29 15:22:09 -0400 | [diff] [blame] | 27 | project(spirv-tools) |
Dejan Mircevski | 6428933 | 2016-02-02 14:41:35 -0500 | [diff] [blame] | 28 | enable_testing() |
Lei Zhang | 8bd75d6 | 2015-11-18 09:22:10 -0500 | [diff] [blame] | 29 | set(SPIRV_TOOLS "SPIRV-Tools") |
Kenneth Benzie (Benie) | 83e5a29 | 2015-05-22 18:26:19 +0100 | [diff] [blame] | 30 | |
d3x0r | fd70a1d | 2017-07-04 06:11:40 -0700 | [diff] [blame] | 31 | include(GNUInstallDirs) |
| 32 | |
Chris Forbes | d03c0a1 | 2016-04-04 10:21:35 +1200 | [diff] [blame] | 33 | set(CMAKE_POSITION_INDEPENDENT_CODE ON) |
alan-baker | a78fa09 | 2018-09-27 09:44:01 -0400 | [diff] [blame] | 34 | set(CMAKE_CXX_STANDARD 11) |
Chris Forbes | d03c0a1 | 2016-04-04 10:21:35 +1200 | [diff] [blame] | 35 | |
Chia-I Wu | 3a68a72 | 2021-07-16 13:30:04 -0700 | [diff] [blame] | 36 | option(ENABLE_RTTI "Enables RTTI" OFF) |
Baldur Karlsson | 9e71de1 | 2018-11-23 16:47:37 +0000 | [diff] [blame] | 37 | option(SPIRV_ALLOW_TIMERS "Allow timers via clock_gettime on supported platforms" ON) |
| 38 | |
Kenneth Benzie (Benie) | 83e5a29 | 2015-05-22 18:26:19 +0100 | [diff] [blame] | 39 | if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") |
| 40 | add_definitions(-DSPIRV_LINUX) |
Baldur Karlsson | 9e71de1 | 2018-11-23 16:47:37 +0000 | [diff] [blame] | 41 | set(SPIRV_TIMER_ENABLED ${SPIRV_ALLOW_TIMERS}) |
Corentin Wallez | df15a4a | 2019-10-09 17:45:11 +0200 | [diff] [blame] | 42 | elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Emscripten") |
| 43 | add_definitions(-DSPIRV_EMSCRIPTEN) |
Vladimir Davidovich | 18ba3d9 | 2020-05-19 18:43:35 +0300 | [diff] [blame] | 44 | elseif("${CMAKE_SYSTEM_NAME}" MATCHES "Windows") |
Kenneth Benzie (Benie) | 83e5a29 | 2015-05-22 18:26:19 +0100 | [diff] [blame] | 45 | add_definitions(-DSPIRV_WINDOWS) |
David Neto | 37422e9 | 2016-12-19 13:26:42 -0500 | [diff] [blame] | 46 | elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "CYGWIN") |
| 47 | add_definitions(-DSPIRV_WINDOWS) |
Kenneth Benzie (Benie) | 83e5a29 | 2015-05-22 18:26:19 +0100 | [diff] [blame] | 48 | elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin") |
| 49 | add_definitions(-DSPIRV_MAC) |
Steven Perron | cdee051 | 2019-11-01 13:46:25 -0400 | [diff] [blame] | 50 | elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "iOS") |
| 51 | add_definitions(-DSPIRV_IOS) |
Assiduous | 74e8105 | 2021-06-29 12:14:38 -0700 | [diff] [blame] | 52 | elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "tvOS") |
| 53 | add_definitions(-DSPIRV_TVOS) |
Derek Sollenberger | 009c435 | 2016-04-18 10:59:47 -0400 | [diff] [blame] | 54 | elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Android") |
| 55 | add_definitions(-DSPIRV_ANDROID) |
Baldur Karlsson | 9e71de1 | 2018-11-23 16:47:37 +0000 | [diff] [blame] | 56 | set(SPIRV_TIMER_ENABLED ${SPIRV_ALLOW_TIMERS}) |
rdb | ddf4de6 | 2017-05-28 23:19:58 +0200 | [diff] [blame] | 57 | elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "FreeBSD") |
| 58 | add_definitions(-DSPIRV_FREEBSD) |
David Turner | 03957e8 | 2019-11-26 22:22:59 +0100 | [diff] [blame] | 59 | elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Fuchsia") |
| 60 | add_definitions(-DSPIRV_FUCHSIA) |
Kenneth Benzie (Benie) | 83e5a29 | 2015-05-22 18:26:19 +0100 | [diff] [blame] | 61 | else() |
| 62 | message(FATAL_ERROR "Your platform '${CMAKE_SYSTEM_NAME}' is not supported!") |
| 63 | endif() |
| 64 | |
Jaebaek Seo | 3b594e1 | 2018-03-07 09:25:51 -0500 | [diff] [blame] | 65 | if (${SPIRV_TIMER_ENABLED}) |
| 66 | add_definitions(-DSPIRV_TIMER_ENABLED) |
| 67 | endif() |
David Neto | d9129f0 | 2017-11-22 17:03:55 -0500 | [diff] [blame] | 68 | |
Lei Zhang | 8bd75d6 | 2015-11-18 09:22:10 -0500 | [diff] [blame] | 69 | if ("${CMAKE_BUILD_TYPE}" STREQUAL "") |
Kenneth Benzie (Benie) | 83e5a29 | 2015-05-22 18:26:19 +0100 | [diff] [blame] | 70 | message(STATUS "No build type selected, default to Debug") |
| 71 | set(CMAKE_BUILD_TYPE "Debug") |
| 72 | endif() |
| 73 | |
d3x0r | fd70a1d | 2017-07-04 06:11:40 -0700 | [diff] [blame] | 74 | option(SKIP_SPIRV_TOOLS_INSTALL "Skip installation" ${SKIP_SPIRV_TOOLS_INSTALL}) |
| 75 | if(NOT ${SKIP_SPIRV_TOOLS_INSTALL}) |
| 76 | set(ENABLE_SPIRV_TOOLS_INSTALL ON) |
| 77 | endif() |
Andrey Tuganov | c25b5be | 2017-09-25 12:45:48 -0400 | [diff] [blame] | 78 | |
| 79 | option(SPIRV_BUILD_COMPRESSION "Build SPIR-V compressing codec" OFF) |
dan sinclair | 42abaa0 | 2019-05-24 15:43:59 -0400 | [diff] [blame] | 80 | if(SPIRV_BUILD_COMPRESSION) |
| 81 | message(FATAL_ERROR "SPIR-V compression codec has been removed from SPIR-V tools. " |
| 82 | "Please remove SPIRV_BUILD_COMPRESSION from your build options.") |
| 83 | endif(SPIRV_BUILD_COMPRESSION) |
Andrey Tuganov | c25b5be | 2017-09-25 12:45:48 -0400 | [diff] [blame] | 84 | |
Paul Thomson | a715b1b | 2020-09-09 09:56:32 +0100 | [diff] [blame] | 85 | option(SPIRV_BUILD_FUZZER "Build spirv-fuzz" OFF) |
| 86 | |
Alastair Donaldson | 789de0d | 2021-09-02 23:55:30 +0100 | [diff] [blame] | 87 | set(SPIRV_LIB_FUZZING_ENGINE_LINK_OPTIONS "" CACHE STRING "Used by OSS-Fuzz to control, via link options, which fuzzing engine should be used") |
| 88 | |
Alastair Donaldson | 3ab6fb9 | 2021-08-05 09:11:21 +0100 | [diff] [blame] | 89 | option(SPIRV_BUILD_LIBFUZZER_TARGETS "Build libFuzzer targets" OFF) |
| 90 | |
Andrew Woloszyn | 3a4bc7e | 2015-11-19 09:22:53 -0500 | [diff] [blame] | 91 | option(SPIRV_WERROR "Enable error on warning" ON) |
shartte | 6fea402 | 2018-08-07 15:15:20 +0200 | [diff] [blame] | 92 | if(("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU") OR (("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") AND (NOT CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC"))) |
David Neto | 7c58c1d | 2016-02-29 01:01:04 -0500 | [diff] [blame] | 93 | set(COMPILER_IS_LIKE_GNU TRUE) |
| 94 | endif() |
| 95 | if(${COMPILER_IS_LIKE_GNU}) |
dan sinclair | c8e7bb1 | 2018-08-03 08:06:07 -0400 | [diff] [blame] | 96 | set(SPIRV_WARNINGS -Wall -Wextra -Wnon-virtual-dtor -Wno-missing-field-initializers) |
| 97 | |
| 98 | if("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") |
| 99 | set(SPIRV_WARNINGS ${SPIRV_WARNINGS} -Wno-self-assign) |
| 100 | endif() |
David Neto | 005a11a | 2015-10-15 16:43:14 -0400 | [diff] [blame] | 101 | |
David Neto | 411de16 | 2015-12-09 11:40:56 -0500 | [diff] [blame] | 102 | option(SPIRV_WARN_EVERYTHING "Enable -Weverything" ${SPIRV_WARN_EVERYTHING}) |
Lei Zhang | 8bd75d6 | 2015-11-18 09:22:10 -0500 | [diff] [blame] | 103 | if(${SPIRV_WARN_EVERYTHING}) |
David Neto | 411de16 | 2015-12-09 11:40:56 -0500 | [diff] [blame] | 104 | if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") |
| 105 | set(SPIRV_WARNINGS ${SPIRV_WARNINGS} |
| 106 | -Weverything -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-padded) |
| 107 | elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") |
| 108 | set(SPIRV_WARNINGS ${SPIRV_WARNINGS} -Wpedantic -pedantic-errors) |
| 109 | else() |
| 110 | message(STATUS "Unknown compiler ${CMAKE_CXX_COMPILER_ID}, " |
| 111 | "so SPIRV_WARN_EVERYTHING has no effect") |
| 112 | endif() |
David Neto | 005a11a | 2015-10-15 16:43:14 -0400 | [diff] [blame] | 113 | endif() |
| 114 | |
Lei Zhang | 8bd75d6 | 2015-11-18 09:22:10 -0500 | [diff] [blame] | 115 | if(${SPIRV_WERROR}) |
| 116 | set(SPIRV_WARNINGS ${SPIRV_WARNINGS} -Werror) |
Kenneth Benzie (Benie) | 83e5a29 | 2015-05-22 18:26:19 +0100 | [diff] [blame] | 117 | endif() |
David Neto | 7c58c1d | 2016-02-29 01:01:04 -0500 | [diff] [blame] | 118 | elseif(MSVC) |
Minmin Gong | 8fda47c | 2022-01-11 08:11:06 -0800 | [diff] [blame] | 119 | set(SPIRV_WARNINGS -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS /wd4800 /wd4819) |
Andrew Woloszyn | 3a4bc7e | 2015-11-19 09:22:53 -0500 | [diff] [blame] | 120 | |
| 121 | if(${SPIRV_WERROR}) |
| 122 | set(SPIRV_WARNINGS ${SPIRV_WARNINGS} /WX) |
| 123 | endif() |
Kenneth Benzie (Benie) | 83e5a29 | 2015-05-22 18:26:19 +0100 | [diff] [blame] | 124 | endif() |
| 125 | |
dan sinclair | e70a412 | 2018-07-11 10:27:34 -0400 | [diff] [blame] | 126 | include_directories(${CMAKE_CURRENT_SOURCE_DIR}/) |
Umar Arshad | 90a4252 | 2016-06-02 18:51:05 -0400 | [diff] [blame] | 127 | |
David Neto | 9a5ac08 | 2015-11-12 11:44:42 -0500 | [diff] [blame] | 128 | option(SPIRV_COLOR_TERMINAL "Enable color terminal output" ON) |
| 129 | if(${SPIRV_COLOR_TERMINAL}) |
| 130 | add_definitions(-DSPIRV_COLOR_TERMINAL) |
Kenneth Benzie (Benie) | 83e5a29 | 2015-05-22 18:26:19 +0100 | [diff] [blame] | 131 | endif() |
| 132 | |
Lei Zhang | bfd7cd6 | 2016-09-08 11:43:48 -0400 | [diff] [blame] | 133 | option(SPIRV_LOG_DEBUG "Enable excessive debug output" OFF) |
| 134 | if(${SPIRV_LOG_DEBUG}) |
| 135 | add_definitions(-DSPIRV_LOG_DEBUG) |
| 136 | endif() |
| 137 | |
Lei Zhang | 768d9b4 | 2017-08-16 16:42:50 -0400 | [diff] [blame] | 138 | if (DEFINED SPIRV_TOOLS_EXTRA_DEFINITIONS) |
| 139 | add_definitions(${SPIRV_TOOLS_EXTRA_DEFINITIONS}) |
| 140 | endif() |
| 141 | |
Ben Clayton | 7403dfa | 2020-10-29 13:25:26 +0000 | [diff] [blame] | 142 | # Library build setting definitions: |
| 143 | # |
| 144 | # * SPIRV_TOOLS_BUILD_STATIC - ON or OFF - Defaults to ON. |
| 145 | # If enabled the following targets will be created: |
| 146 | # ${SPIRV_TOOLS}-static - STATIC library. |
| 147 | # Has full public symbol visibility. |
| 148 | # ${SPIRV_TOOLS}-shared - SHARED library. |
| 149 | # Has default-hidden symbol visibility. |
| 150 | # ${SPIRV_TOOLS} - will alias to one of above, based on BUILD_SHARED_LIBS. |
| 151 | # If disabled the following targets will be created: |
| 152 | # ${SPIRV_TOOLS} - either STATIC or SHARED based on SPIRV_TOOLS_LIBRARY_TYPE. |
| 153 | # Has full public symbol visibility. |
| 154 | # ${SPIRV_TOOLS}-shared - SHARED library. |
| 155 | # Has default-hidden symbol visibility. |
| 156 | # |
| 157 | # * SPIRV_TOOLS_LIBRARY_TYPE - SHARED or STATIC. |
| 158 | # Specifies the library type used for building SPIRV-Tools libraries. |
| 159 | # Defaults to SHARED when BUILD_SHARED_LIBS=1, otherwise STATIC. |
| 160 | # |
| 161 | # * SPIRV_TOOLS_FULL_VISIBILITY - "${SPIRV_TOOLS}-static" or "${SPIRV_TOOLS}" |
| 162 | # Evaluates to the SPIRV_TOOLS target library name that has no hidden symbols. |
| 163 | # This is used by internal targets for accessing symbols that are non-public. |
| 164 | # Note this target provides no API stability guarantees. |
| 165 | # |
| 166 | # Ideally, all of these will go away - see https://github.com/KhronosGroup/SPIRV-Tools/issues/3909. |
timlyeee | e3a373f | 2021-10-30 02:04:59 +0800 | [diff] [blame] | 167 | option(ENABLE_EXCEPTIONS_ON_MSVC "Build SPIRV-TOOLS with c++ exceptions enabled in MSVC" ON) |
Ben Clayton | 7403dfa | 2020-10-29 13:25:26 +0000 | [diff] [blame] | 168 | option(SPIRV_TOOLS_BUILD_STATIC "Build ${SPIRV_TOOLS}-static target. ${SPIRV_TOOLS} will alias to ${SPIRV_TOOLS}-static or ${SPIRV_TOOLS}-shared based on BUILD_SHARED_LIBS" ON) |
| 169 | if(SPIRV_TOOLS_BUILD_STATIC) |
| 170 | set(SPIRV_TOOLS_FULL_VISIBILITY ${SPIRV_TOOLS}-static) |
| 171 | set(SPIRV_TOOLS_LIBRARY_TYPE "STATIC") |
| 172 | else(SPIRV_TOOLS_BUILD_STATIC) |
| 173 | set(SPIRV_TOOLS_FULL_VISIBILITY ${SPIRV_TOOLS}) |
| 174 | if (NOT DEFINED SPIRV_TOOLS_LIBRARY_TYPE) |
| 175 | if(BUILD_SHARED_LIBS) |
| 176 | set(SPIRV_TOOLS_LIBRARY_TYPE "SHARED") |
| 177 | else() |
| 178 | set(SPIRV_TOOLS_LIBRARY_TYPE "STATIC") |
| 179 | endif() |
| 180 | endif() |
| 181 | endif(SPIRV_TOOLS_BUILD_STATIC) |
| 182 | |
Lei Zhang | 3fade33 | 2016-01-26 18:04:55 -0500 | [diff] [blame] | 183 | function(spvtools_default_compile_options TARGET) |
Lei Zhang | 8bd75d6 | 2015-11-18 09:22:10 -0500 | [diff] [blame] | 184 | target_compile_options(${TARGET} PRIVATE ${SPIRV_WARNINGS}) |
David Neto | 7c58c1d | 2016-02-29 01:01:04 -0500 | [diff] [blame] | 185 | |
| 186 | if (${COMPILER_IS_LIKE_GNU}) |
Chia-I Wu | 3a68a72 | 2021-07-16 13:30:04 -0700 | [diff] [blame] | 187 | target_compile_options(${TARGET} PRIVATE -std=c++11 -fno-exceptions) |
Andrew Woloszyn | 7a35473 | 2016-01-11 10:54:20 -0500 | [diff] [blame] | 188 | target_compile_options(${TARGET} PRIVATE |
| 189 | -Wall -Wextra -Wno-long-long -Wshadow -Wundef -Wconversion |
| 190 | -Wno-sign-conversion) |
Chia-I Wu | 3a68a72 | 2021-07-16 13:30:04 -0700 | [diff] [blame] | 191 | |
| 192 | if(NOT ENABLE_RTTI) |
| 193 | add_compile_options(-fno-rtti) |
| 194 | endif() |
Lei Zhang | 8bd75d6 | 2015-11-18 09:22:10 -0500 | [diff] [blame] | 195 | # For good call stacks in profiles, keep the frame pointers. |
| 196 | if(NOT "${SPIRV_PERF}" STREQUAL "") |
| 197 | target_compile_options(${TARGET} PRIVATE -fno-omit-frame-pointer) |
| 198 | endif() |
| 199 | if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") |
Lei Zhang | 8bd75d6 | 2015-11-18 09:22:10 -0500 | [diff] [blame] | 200 | set(SPIRV_USE_SANITIZER "" CACHE STRING |
| 201 | "Use the clang sanitizer [address|memory|thread|...]") |
| 202 | if(NOT "${SPIRV_USE_SANITIZER}" STREQUAL "") |
| 203 | target_compile_options(${TARGET} PRIVATE |
| 204 | -fsanitize=${SPIRV_USE_SANITIZER}) |
Steven Perron | 2b46521 | 2019-04-11 16:33:26 -0400 | [diff] [blame] | 205 | set_target_properties(${TARGET} PROPERTIES |
| 206 | LINK_FLAGS -fsanitize=${SPIRV_USE_SANITIZER}) |
Lei Zhang | 8bd75d6 | 2015-11-18 09:22:10 -0500 | [diff] [blame] | 207 | endif() |
Steven Perron | c5a6d25 | 2018-10-19 11:59:01 -0400 | [diff] [blame] | 208 | target_compile_options(${TARGET} PRIVATE |
| 209 | -ftemplate-depth=1024) |
Andrew Woloszyn | 7a35473 | 2016-01-11 10:54:20 -0500 | [diff] [blame] | 210 | else() |
| 211 | target_compile_options(${TARGET} PRIVATE |
| 212 | -Wno-missing-field-initializers) |
Lei Zhang | 8bd75d6 | 2015-11-18 09:22:10 -0500 | [diff] [blame] | 213 | endif() |
Kenneth Benzie (Benie) | 83e5a29 | 2015-05-22 18:26:19 +0100 | [diff] [blame] | 214 | endif() |
David Neto | 7c58c1d | 2016-02-29 01:01:04 -0500 | [diff] [blame] | 215 | |
Lei Zhang | ad3b082 | 2017-04-03 13:41:20 -0400 | [diff] [blame] | 216 | if (MSVC) |
| 217 | # Specify /EHs for exception handling. This makes using SPIRV-Tools as |
| 218 | # dependencies in other projects easier. |
timlyeee | e3a373f | 2021-10-30 02:04:59 +0800 | [diff] [blame] | 219 | if(ENABLE_EXCEPTIONS_ON_MSVC) |
| 220 | target_compile_options(${TARGET} PRIVATE /EHs) |
| 221 | endif() |
Lei Zhang | ad3b082 | 2017-04-03 13:41:20 -0400 | [diff] [blame] | 222 | endif() |
| 223 | |
David Neto | 7c58c1d | 2016-02-29 01:01:04 -0500 | [diff] [blame] | 224 | # For MinGW cross compile, statically link to the C++ runtime. |
| 225 | # But it still depends on MSVCRT.dll. |
| 226 | if (${CMAKE_SYSTEM_NAME} MATCHES "Windows") |
| 227 | if (${CMAKE_CXX_COMPILER_ID} MATCHES "GNU") |
Lei Zhang | 71fac5a | 2016-08-05 13:46:45 -0400 | [diff] [blame] | 228 | set_target_properties(${TARGET} PROPERTIES |
| 229 | LINK_FLAGS -static -static-libgcc -static-libstdc++) |
David Neto | 7c58c1d | 2016-02-29 01:01:04 -0500 | [diff] [blame] | 230 | endif() |
| 231 | endif() |
Lei Zhang | 8bd75d6 | 2015-11-18 09:22:10 -0500 | [diff] [blame] | 232 | endfunction() |
Kenneth Benzie (Benie) | 83e5a29 | 2015-05-22 18:26:19 +0100 | [diff] [blame] | 233 | |
Andrew Woloszyn | 1d52555 | 2016-02-24 10:11:07 -0500 | [diff] [blame] | 234 | if(NOT COMMAND find_host_package) |
| 235 | macro(find_host_package) |
| 236 | find_package(${ARGN}) |
| 237 | endmacro() |
| 238 | endif() |
| 239 | if(NOT COMMAND find_host_program) |
| 240 | macro(find_host_program) |
| 241 | find_program(${ARGN}) |
| 242 | endmacro() |
| 243 | endif() |
| 244 | |
David Neto | 07ac7de | 2019-04-12 08:23:19 -0400 | [diff] [blame] | 245 | # Tests require Python3 |
| 246 | find_host_package(PythonInterp 3 REQUIRED) |
Andrew Woloszyn | 1d52555 | 2016-02-24 10:11:07 -0500 | [diff] [blame] | 247 | |
David Neto | ba40400 | 2018-07-19 10:27:12 -0400 | [diff] [blame] | 248 | # Check for symbol exports on Linux. |
| 249 | # At the moment, this check will fail on the OSX build machines for the Android NDK. |
| 250 | # It appears they don't have objdump. |
| 251 | if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") |
David Neto | d9129f0 | 2017-11-22 17:03:55 -0500 | [diff] [blame] | 252 | macro(spvtools_check_symbol_exports TARGET) |
Lei Zhang | 4926f29 | 2018-07-04 14:20:52 -0400 | [diff] [blame] | 253 | if (NOT "${SPIRV_SKIP_TESTS}") |
| 254 | add_test(NAME spirv-tools-symbol-exports-${TARGET} |
| 255 | COMMAND ${PYTHON_EXECUTABLE} |
| 256 | ${spirv-tools_SOURCE_DIR}/utils/check_symbol_exports.py "$<TARGET_FILE:${TARGET}>") |
| 257 | endif() |
David Neto | d9129f0 | 2017-11-22 17:03:55 -0500 | [diff] [blame] | 258 | endmacro() |
| 259 | else() |
| 260 | macro(spvtools_check_symbol_exports TARGET) |
Lei Zhang | 4926f29 | 2018-07-04 14:20:52 -0400 | [diff] [blame] | 261 | if (NOT "${SPIRV_SKIP_TESTS}") |
| 262 | message("Skipping symbol exports test for ${TARGET}") |
| 263 | endif() |
David Neto | d9129f0 | 2017-11-22 17:03:55 -0500 | [diff] [blame] | 264 | endmacro() |
| 265 | endif() |
qining | 4e797f8 | 2016-02-22 16:07:19 -0500 | [diff] [blame] | 266 | |
Aaron Barany | 9c0ae6b | 2019-10-17 08:36:55 -0700 | [diff] [blame] | 267 | if(ENABLE_SPIRV_TOOLS_INSTALL) |
| 268 | if(WIN32) |
| 269 | macro(spvtools_config_package_dir TARGET PATH) |
| 270 | set(${PATH} ${TARGET}/cmake) |
| 271 | endmacro() |
| 272 | else() |
| 273 | macro(spvtools_config_package_dir TARGET PATH) |
Matt Turner | 85f3e93 | 2019-11-22 11:02:25 -0500 | [diff] [blame] | 274 | set(${PATH} ${CMAKE_INSTALL_LIBDIR}/cmake/${TARGET}) |
Aaron Barany | 9c0ae6b | 2019-10-17 08:36:55 -0700 | [diff] [blame] | 275 | endmacro() |
| 276 | endif() |
| 277 | |
| 278 | macro(spvtools_generate_config_file TARGET) |
| 279 | file(WRITE ${CMAKE_BINARY_DIR}/${TARGET}Config.cmake |
| 280 | "include(CMakeFindDependencyMacro)\n" |
| 281 | "find_dependency(${SPIRV_TOOLS})\n" |
| 282 | "include(\${CMAKE_CURRENT_LIST_DIR}/${TARGET}Targets.cmake)\n" |
| 283 | "set(${TARGET}_LIBRARIES ${TARGET})\n" |
| 284 | "get_target_property(${TARGET}_INCLUDE_DIRS ${TARGET} INTERFACE_INCLUDE_DIRECTORIES)\n") |
| 285 | endmacro() |
| 286 | endif() |
| 287 | |
David Neto | 411de16 | 2015-12-09 11:40:56 -0500 | [diff] [blame] | 288 | # Defaults to OFF if the user didn't set it. |
Lei Zhang | 8bd75d6 | 2015-11-18 09:22:10 -0500 | [diff] [blame] | 289 | option(SPIRV_SKIP_EXECUTABLES |
Lei Zhang | 71fac5a | 2016-08-05 13:46:45 -0400 | [diff] [blame] | 290 | "Skip building the executable and tests along with the library" |
| 291 | ${SPIRV_SKIP_EXECUTABLES}) |
| 292 | option(SPIRV_SKIP_TESTS |
| 293 | "Skip building tests along with the library" ${SPIRV_SKIP_TESTS}) |
| 294 | if ("${SPIRV_SKIP_EXECUTABLES}") |
| 295 | set(SPIRV_SKIP_TESTS ON) |
| 296 | endif() |
Kenneth Benzie (Benie) | 83e5a29 | 2015-05-22 18:26:19 +0100 | [diff] [blame] | 297 | |
Steven Perron | efe12ff | 2017-11-09 11:24:41 -0500 | [diff] [blame] | 298 | # Defaults to ON. The checks can be time consuming. |
| 299 | # Turn off if they take too long. |
| 300 | option(SPIRV_CHECK_CONTEXT "In a debug build, check if the IR context is in a valid state." ON) |
| 301 | if (${SPIRV_CHECK_CONTEXT}) |
Lei Zhang | 702e6af | 2021-08-30 09:39:40 -0400 | [diff] [blame] | 302 | add_compile_options($<$<CONFIG:Debug>:-DSPIRV_CHECK_CONTEXT>) |
Steven Perron | efe12ff | 2017-11-09 11:24:41 -0500 | [diff] [blame] | 303 | endif() |
| 304 | |
Jeff Bolz | 60fac96 | 2018-11-06 08:26:23 -0600 | [diff] [blame] | 305 | # Precompiled header macro. Parameters are source file list and filename for pch cpp file. |
Jeff Bolz | c06a35b | 2018-11-07 08:15:04 -0600 | [diff] [blame] | 306 | macro(spvtools_pch SRCS PCHPREFIX) |
Malacath-92 | d0490ef | 2020-04-09 20:46:08 +0200 | [diff] [blame] | 307 | if(MSVC AND CMAKE_GENERATOR MATCHES "^Visual Studio" AND NOT "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") |
Jeff Bolz | 60fac96 | 2018-11-06 08:26:23 -0600 | [diff] [blame] | 308 | set(PCH_NAME "$(IntDir)\\${PCHPREFIX}.pch") |
| 309 | # make source files use/depend on PCH_NAME |
| 310 | set_source_files_properties(${${SRCS}} PROPERTIES COMPILE_FLAGS "/Yu${PCHPREFIX}.h /FI${PCHPREFIX}.h /Fp${PCH_NAME} /Zm300" OBJECT_DEPENDS "${PCH_NAME}") |
| 311 | # make PCHPREFIX.cpp file compile and generate PCH_NAME |
| 312 | set_source_files_properties("${PCHPREFIX}.cpp" PROPERTIES COMPILE_FLAGS "/Yc${PCHPREFIX}.h /Fp${PCH_NAME} /Zm300" OBJECT_OUTPUTS "${PCH_NAME}") |
| 313 | list(APPEND ${SRCS} "${PCHPREFIX}.cpp") |
| 314 | endif() |
Jeff Bolz | c06a35b | 2018-11-07 08:15:04 -0600 | [diff] [blame] | 315 | endmacro(spvtools_pch) |
Jeff Bolz | 60fac96 | 2018-11-06 08:26:23 -0600 | [diff] [blame] | 316 | |
Lei Zhang | eb6fc51 | 2016-03-16 22:43:31 -0400 | [diff] [blame] | 317 | add_subdirectory(external) |
qining | 4e797f8 | 2016-02-22 16:07:19 -0500 | [diff] [blame] | 318 | |
Ryan Harrison | 370375d | 2019-08-07 11:09:55 -0400 | [diff] [blame] | 319 | # Warning about extra semi-colons. |
| 320 | # |
| 321 | # This is not supported on all compilers/versions. so enabling only |
| 322 | # for clang, since that works for all versions that our bots run. |
| 323 | # |
| 324 | # This is intentionally done after adding the external subdirectory, |
| 325 | # so we don't enforce this flag on our dependencies, some of which do |
| 326 | # not pass it. |
| 327 | # |
| 328 | # If the minimum version of CMake supported is updated to 3.0 or |
| 329 | # later, then check_cxx_compiler_flag could be used instead. |
| 330 | if("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") |
| 331 | add_compile_options("-Wextra-semi") |
| 332 | endif() |
| 333 | |
Lei Zhang | eb6fc51 | 2016-03-16 22:43:31 -0400 | [diff] [blame] | 334 | add_subdirectory(source) |
| 335 | add_subdirectory(tools) |
Kenneth Benzie (Benie) | 83e5a29 | 2015-05-22 18:26:19 +0100 | [diff] [blame] | 336 | |
Lei Zhang | eb6fc51 | 2016-03-16 22:43:31 -0400 | [diff] [blame] | 337 | add_subdirectory(test) |
Lei Zhang | 689df65 | 2016-09-28 10:50:43 -0400 | [diff] [blame] | 338 | add_subdirectory(examples) |
Kenneth Benzie (Benie) | 83e5a29 | 2015-05-22 18:26:19 +0100 | [diff] [blame] | 339 | |
d3x0r | fd70a1d | 2017-07-04 06:11:40 -0700 | [diff] [blame] | 340 | if(ENABLE_SPIRV_TOOLS_INSTALL) |
| 341 | install( |
| 342 | FILES |
| 343 | ${CMAKE_CURRENT_SOURCE_DIR}/include/spirv-tools/libspirv.h |
| 344 | ${CMAKE_CURRENT_SOURCE_DIR}/include/spirv-tools/libspirv.hpp |
| 345 | ${CMAKE_CURRENT_SOURCE_DIR}/include/spirv-tools/optimizer.hpp |
Pierre Moreau | 86627f7 | 2017-07-13 02:16:51 +0200 | [diff] [blame] | 346 | ${CMAKE_CURRENT_SOURCE_DIR}/include/spirv-tools/linker.hpp |
greg-lunarg | 1e9fc1a | 2018-11-08 11:54:54 -0700 | [diff] [blame] | 347 | ${CMAKE_CURRENT_SOURCE_DIR}/include/spirv-tools/instrument.hpp |
d3x0r | fd70a1d | 2017-07-04 06:11:40 -0700 | [diff] [blame] | 348 | DESTINATION |
| 349 | ${CMAKE_INSTALL_INCLUDEDIR}/spirv-tools/) |
| 350 | endif(ENABLE_SPIRV_TOOLS_INSTALL) |
David Neto | 881816f | 2016-09-02 09:29:52 -0400 | [diff] [blame] | 351 | |
Lei Zhang | d7ea99b | 2017-09-27 21:22:05 -0400 | [diff] [blame] | 352 | if (NOT "${SPIRV_SKIP_TESTS}") |
| 353 | add_test(NAME spirv-tools-copyrights |
| 354 | COMMAND ${PYTHON_EXECUTABLE} utils/check_copyright.py |
| 355 | WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) |
David Neto | d9129f0 | 2017-11-22 17:03:55 -0500 | [diff] [blame] | 356 | endif() |
Pierre Moreau | 8c05012 | 2017-11-25 18:58:50 +0100 | [diff] [blame] | 357 | |
Danilo Spinella | 03794b8 | 2020-02-20 16:54:54 +0100 | [diff] [blame] | 358 | set(SPIRV_LIBRARIES "-lSPIRV-Tools-opt -lSPIRV-Tools -lSPIRV-Tools-link") |
Józef Kucia | 3013897 | 2018-02-02 23:37:14 +0100 | [diff] [blame] | 359 | set(SPIRV_SHARED_LIBRARIES "-lSPIRV-Tools-shared") |
Pierre Moreau | 8c05012 | 2017-11-25 18:58:50 +0100 | [diff] [blame] | 360 | |
| 361 | # Build pkg-config file |
| 362 | # Use a first-class target so it's regenerated when relevant files are updated. |
| 363 | add_custom_target(spirv-tools-pkg-config ALL |
David Neto | d2c0fce | 2018-02-14 18:27:22 -0500 | [diff] [blame] | 364 | COMMAND ${CMAKE_COMMAND} |
| 365 | -DCHANGES_FILE=${CMAKE_CURRENT_SOURCE_DIR}/CHANGES |
Pierre Moreau | 8c05012 | 2017-11-25 18:58:50 +0100 | [diff] [blame] | 366 | -DTEMPLATE_FILE=${CMAKE_CURRENT_SOURCE_DIR}/cmake/SPIRV-Tools.pc.in |
| 367 | -DOUT_FILE=${CMAKE_CURRENT_BINARY_DIR}/SPIRV-Tools.pc |
| 368 | -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} |
Józef Kucia | 4e4a254 | 2018-02-09 12:30:08 +0100 | [diff] [blame] | 369 | -DCMAKE_INSTALL_LIBDIR=${CMAKE_INSTALL_LIBDIR} |
| 370 | -DCMAKE_INSTALL_INCLUDEDIR=${CMAKE_INSTALL_INCLUDEDIR} |
Pierre Moreau | 8c05012 | 2017-11-25 18:58:50 +0100 | [diff] [blame] | 371 | -DSPIRV_LIBRARIES=${SPIRV_LIBRARIES} |
| 372 | -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/write_pkg_config.cmake |
| 373 | DEPENDS "CHANGES" "cmake/SPIRV-Tools.pc.in" "cmake/write_pkg_config.cmake") |
Józef Kucia | 3013897 | 2018-02-02 23:37:14 +0100 | [diff] [blame] | 374 | add_custom_target(spirv-tools-shared-pkg-config ALL |
David Neto | d2c0fce | 2018-02-14 18:27:22 -0500 | [diff] [blame] | 375 | COMMAND ${CMAKE_COMMAND} |
| 376 | -DCHANGES_FILE=${CMAKE_CURRENT_SOURCE_DIR}/CHANGES |
Józef Kucia | 3013897 | 2018-02-02 23:37:14 +0100 | [diff] [blame] | 377 | -DTEMPLATE_FILE=${CMAKE_CURRENT_SOURCE_DIR}/cmake/SPIRV-Tools-shared.pc.in |
| 378 | -DOUT_FILE=${CMAKE_CURRENT_BINARY_DIR}/SPIRV-Tools-shared.pc |
| 379 | -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} |
Józef Kucia | 4e4a254 | 2018-02-09 12:30:08 +0100 | [diff] [blame] | 380 | -DCMAKE_INSTALL_LIBDIR=${CMAKE_INSTALL_LIBDIR} |
| 381 | -DCMAKE_INSTALL_INCLUDEDIR=${CMAKE_INSTALL_INCLUDEDIR} |
Józef Kucia | 3013897 | 2018-02-02 23:37:14 +0100 | [diff] [blame] | 382 | -DSPIRV_SHARED_LIBRARIES=${SPIRV_SHARED_LIBRARIES} |
| 383 | -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/write_pkg_config.cmake |
| 384 | DEPENDS "CHANGES" "cmake/SPIRV-Tools-shared.pc.in" "cmake/write_pkg_config.cmake") |
Pierre Moreau | 8c05012 | 2017-11-25 18:58:50 +0100 | [diff] [blame] | 385 | |
| 386 | # Install pkg-config file |
| 387 | if (ENABLE_SPIRV_TOOLS_INSTALL) |
| 388 | install( |
| 389 | FILES |
| 390 | ${CMAKE_CURRENT_BINARY_DIR}/SPIRV-Tools.pc |
Józef Kucia | 3013897 | 2018-02-02 23:37:14 +0100 | [diff] [blame] | 391 | ${CMAKE_CURRENT_BINARY_DIR}/SPIRV-Tools-shared.pc |
Pierre Moreau | 8c05012 | 2017-11-25 18:58:50 +0100 | [diff] [blame] | 392 | DESTINATION |
| 393 | ${CMAKE_INSTALL_LIBDIR}/pkgconfig) |
| 394 | endif() |