| # Copyright (c) 2015-2016 The Khronos Group Inc. |
| # |
| # Permission is hereby granted, free of charge, to any person obtaining a |
| # copy of this software and/or associated documentation files (the |
| # "Materials"), to deal in the Materials without restriction, including |
| # without limitation the rights to use, copy, modify, merge, publish, |
| # distribute, sublicense, and/or sell copies of the Materials, and to |
| # permit persons to whom the Materials are furnished to do so, subject to |
| # the following conditions: |
| # |
| # The above copyright notice and this permission notice shall be included |
| # in all copies or substantial portions of the Materials. |
| # |
| # MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS |
| # KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS |
| # SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT |
| # https://www.khronos.org/registry/ |
| # |
| # THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
| # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
| # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY |
| # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, |
| # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE |
| # MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. |
| |
| cmake_minimum_required(VERSION 2.8.12) |
| project(spirv-tools) |
| enable_testing() |
| set(SPIRV_TOOLS "SPIRV-Tools") |
| |
| set(CMAKE_POSITION_INDEPENDENT_CODE ON) |
| |
| if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") |
| add_definitions(-DSPIRV_LINUX) |
| elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Windows") |
| add_definitions(-DSPIRV_WINDOWS) |
| elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin") |
| add_definitions(-DSPIRV_MAC) |
| elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Android") |
| add_definitions(-DSPIRV_ANDROID) |
| else() |
| message(FATAL_ERROR "Your platform '${CMAKE_SYSTEM_NAME}' is not supported!") |
| endif() |
| |
| if ("${CMAKE_BUILD_TYPE}" STREQUAL "") |
| message(STATUS "No build type selected, default to Debug") |
| set(CMAKE_BUILD_TYPE "Debug") |
| endif() |
| |
| option(SPIRV_WERROR "Enable error on warning" ON) |
| if((${CMAKE_CXX_COMPILER_ID} MATCHES "GNU") OR (${CMAKE_CXX_COMPILER_ID} MATCHES "Clang")) |
| set(COMPILER_IS_LIKE_GNU TRUE) |
| endif() |
| if(${COMPILER_IS_LIKE_GNU}) |
| set(SPIRV_WARNINGS -Wall -Wextra -Wno-missing-field-initializers) |
| |
| option(SPIRV_WARN_EVERYTHING "Enable -Weverything" ${SPIRV_WARN_EVERYTHING}) |
| if(${SPIRV_WARN_EVERYTHING}) |
| if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") |
| set(SPIRV_WARNINGS ${SPIRV_WARNINGS} |
| -Weverything -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-padded) |
| elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") |
| set(SPIRV_WARNINGS ${SPIRV_WARNINGS} -Wpedantic -pedantic-errors) |
| else() |
| message(STATUS "Unknown compiler ${CMAKE_CXX_COMPILER_ID}, " |
| "so SPIRV_WARN_EVERYTHING has no effect") |
| endif() |
| endif() |
| |
| if(${SPIRV_WERROR}) |
| set(SPIRV_WARNINGS ${SPIRV_WARNINGS} -Werror) |
| endif() |
| elseif(MSVC) |
| set(SPIRV_WARNINGS -D_CRT_SECURE_NO_WARNINGS /wd4800) |
| |
| if(${SPIRV_WERROR}) |
| set(SPIRV_WARNINGS ${SPIRV_WARNINGS} /WX) |
| endif() |
| endif() |
| |
| include_directories(${CMAKE_CURRENT_SOURCE_DIR}/source) |
| |
| option(SPIRV_COLOR_TERMINAL "Enable color terminal output" ON) |
| if(${SPIRV_COLOR_TERMINAL}) |
| add_definitions(-DSPIRV_COLOR_TERMINAL) |
| endif() |
| |
| function(spvtools_default_compile_options TARGET) |
| target_compile_options(${TARGET} PRIVATE ${SPIRV_WARNINGS}) |
| |
| if (${COMPILER_IS_LIKE_GNU}) |
| target_compile_options(${TARGET} PRIVATE |
| -std=c++11 -fno-exceptions -fno-rtti) |
| target_compile_options(${TARGET} PRIVATE |
| -Wall -Wextra -Wno-long-long -Wshadow -Wundef -Wconversion |
| -Wno-sign-conversion) |
| # For good call stacks in profiles, keep the frame pointers. |
| if(NOT "${SPIRV_PERF}" STREQUAL "") |
| target_compile_options(${TARGET} PRIVATE -fno-omit-frame-pointer) |
| endif() |
| if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") |
| set(SPIRV_USE_SANITIZER "" CACHE STRING |
| "Use the clang sanitizer [address|memory|thread|...]") |
| if(NOT "${SPIRV_USE_SANITIZER}" STREQUAL "") |
| target_compile_options(${TARGET} PRIVATE |
| -fsanitize=${SPIRV_USE_SANITIZER}) |
| endif() |
| else() |
| target_compile_options(${TARGET} PRIVATE |
| -Wno-missing-field-initializers) |
| endif() |
| endif() |
| |
| # For MinGW cross compile, statically link to the C++ runtime. |
| # But it still depends on MSVCRT.dll. |
| if (${CMAKE_SYSTEM_NAME} MATCHES "Windows") |
| if (${CMAKE_CXX_COMPILER_ID} MATCHES "GNU") |
| set_target_properties(${TARGET} PROPERTIES |
| LINK_FLAGS -static -static-libgcc -static-libstdc++) |
| endif() |
| endif() |
| endfunction() |
| |
| if(NOT COMMAND find_host_package) |
| macro(find_host_package) |
| find_package(${ARGN}) |
| endmacro() |
| endif() |
| if(NOT COMMAND find_host_program) |
| macro(find_host_program) |
| find_program(${ARGN}) |
| endmacro() |
| endif() |
| |
| find_host_package(PythonInterp) |
| |
| |
| # Defaults to OFF if the user didn't set it. |
| option(SPIRV_SKIP_EXECUTABLES |
| "Skip building the executable and tests along with the library" |
| ${SPIRV_SKIP_EXECUTABLES}) |
| option(SPIRV_SKIP_TESTS |
| "Skip building tests along with the library" ${SPIRV_SKIP_TESTS}) |
| if ("${SPIRV_SKIP_EXECUTABLES}") |
| set(SPIRV_SKIP_TESTS ON) |
| endif() |
| |
| add_subdirectory(external) |
| |
| add_subdirectory(source) |
| add_subdirectory(tools) |
| |
| add_subdirectory(test) |
| |
| install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/include/spirv-tools/libspirv.h |
| DESTINATION include/spirv-tools/) |