mirror of
https://github.com/xenia-project/SPIRV-Tools.git
synced 2024-11-23 11:19:41 +00:00
9166854ac9
Add a high level version number for SPIRV-Tools, beginning with v2016.0-dev. The README describes the format of the version number. The high level version number is extracted from the CHANGES file. That works around: - stale-bait for when we don't add tags to the repository - our inability to add tags to the repository Option --version causes spirv-as, spirv-dis, and spirv-val to show the high level version number. Add spvSoftwareVersionString to return the C-string for the high level version number. Add spvSoftwareVersionDetailsString() so that clients can get more information if they want to. Also allows us to clean up the uses in the tool executables files, so now only one file includes build-version.inc. Move the update-build-version logic to the only CMakeLists file that needs it. The update build version script takes a new argument to name the output file.
151 lines
5.2 KiB
CMake
151 lines
5.2 KiB
CMake
# 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()
|
|
|
|
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})
|
|
|
|
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/)
|