From c25b5bea352d269ce93ecb5d3c636ca67e8cf341 Mon Sep 17 00:00:00 2001 From: Andrey Tuganov Date: Mon, 25 Sep 2017 12:45:48 -0400 Subject: [PATCH] Add SPIRV_SPIRV_COMPRESSION option to cmake The option is off by default. cmake -DSPIRV_BUILD_COMPRESSION=ON .. enables the compression lib, executable, and test build. Fixes https://github.com/KhronosGroup/SPIRV-Tools/issues/834 --- .appveyor.yml | 2 +- .travis.yml | 3 ++- CHANGES | 1 + CMakeLists.txt | 4 +++- README.md | 2 ++ source/comp/CMakeLists.txt | 35 +++++++++++++++++++---------------- test/comp/CMakeLists.txt | 10 ++++++---- tools/CMakeLists.txt | 16 ++++++++++------ 8 files changed, 44 insertions(+), 29 deletions(-) diff --git a/.appveyor.yml b/.appveyor.yml index d0913227e..f8f603de7 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -36,7 +36,7 @@ build: build_script: - mkdir build && cd build - - cmake .. + - cmake -DSPIRV_BUILD_COMPRESSION=ON .. - cmake --build . --config %CONFIGURATION% test_script: diff --git a/.travis.yml b/.travis.yml index bf677c040..558e11aa9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -61,9 +61,10 @@ script: -DANDROID_NATIVE_API_LEVEL=android-9 -DCMAKE_BUILD_TYPE=Release -DANDROID_ABI="armeabi-v7a with NEON" + -DSPIRV_BUILD_COMPRESSION=ON -DSPIRV_SKIP_TESTS=ON ..; else - cmake -DCMAKE_BUILD_TYPE=${BUILD_TYPE} ..; + cmake -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DSPIRV_BUILD_COMPRESSION=ON ..; fi # Due to the limitation of Travis platform, we cannot start too many concurrent jobs. # Otherwise GCC will panic with internal error, possibility because of memory issues. diff --git a/CHANGES b/CHANGES index 6ebaef30f..d03e2cd02 100644 --- a/CHANGES +++ b/CHANGES @@ -10,6 +10,7 @@ v2017.1-dev 2017-09-01 - Fixes: #798: spirv-as should fail when given unrecognized long option #800: Inliner: Fix inlining function into header of multi-block loop + #834: Add Cmake option to build the compressing codec. Off by default. v2017.0 2017-09-01 - Update README to describe that assembler, disassembler, and binary parser support diff --git a/CMakeLists.txt b/CMakeLists.txt index 070c6da1f..4ad7b4cff 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -54,7 +54,9 @@ option(SKIP_SPIRV_TOOLS_INSTALL "Skip installation" ${SKIP_SPIRV_TOOLS_INSTALL}) if(NOT ${SKIP_SPIRV_TOOLS_INSTALL}) set(ENABLE_SPIRV_TOOLS_INSTALL ON) endif() - + +option(SPIRV_BUILD_COMPRESSION "Build SPIR-V compressing codec" OFF) + 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) diff --git a/README.md b/README.md index 902cdacec..85b60c961 100644 --- a/README.md +++ b/README.md @@ -197,6 +197,8 @@ The following CMake options are supported: the command line tools. This will prevent the tests from being built. * `SPIRV_SKIP_EXECUTABLES={ON|OFF}`, default `OFF`- Build only the library, not the command line tools and tests. +* `SPIRV_BUILD_COMPRESSION={ON|OFF}`, default `OFF`- Build SPIR-V compressing + codec. * `SPIRV_USE_SANITIZER=`, default is no sanitizing - On UNIX platforms with an appropriate version of `clang` this option enables the use of the sanitizers documented [here][clang-sanitizers]. diff --git a/source/comp/CMakeLists.txt b/source/comp/CMakeLists.txt index 86f8c4ebf..cb6be7ae3 100644 --- a/source/comp/CMakeLists.txt +++ b/source/comp/CMakeLists.txt @@ -12,23 +12,26 @@ # See the License for the specific language governing permissions and # limitations under the License. -add_library(SPIRV-Tools-comp markv_codec.cpp markv_autogen.cpp) +if(SPIRV_BUILD_COMPRESSION) + add_library(SPIRV-Tools-comp markv_codec.cpp markv_autogen.cpp) -spvtools_default_compile_options(SPIRV-Tools-comp) -target_include_directories(SPIRV-Tools-comp - PUBLIC ${spirv-tools_SOURCE_DIR}/include - PUBLIC ${SPIRV_HEADER_INCLUDE_DIR} - PRIVATE ${spirv-tools_BINARY_DIR} -) + spvtools_default_compile_options(SPIRV-Tools-comp) + target_include_directories(SPIRV-Tools-comp + PUBLIC ${spirv-tools_SOURCE_DIR}/include + PUBLIC ${SPIRV_HEADER_INCLUDE_DIR} + PRIVATE ${spirv-tools_BINARY_DIR} + ) -target_link_libraries(SPIRV-Tools-comp - PUBLIC ${SPIRV_TOOLS}) + target_link_libraries(SPIRV-Tools-comp + PUBLIC ${SPIRV_TOOLS}) -set_property(TARGET SPIRV-Tools-comp PROPERTY FOLDER "SPIRV-Tools libraries") + set_property(TARGET SPIRV-Tools-comp PROPERTY FOLDER "SPIRV-Tools libraries") -if(ENABLE_SPIRV_TOOLS_INSTALL) - install(TARGETS SPIRV-Tools-comp - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) -endif(ENABLE_SPIRV_TOOLS_INSTALL) + if(ENABLE_SPIRV_TOOLS_INSTALL) + install(TARGETS SPIRV-Tools-comp + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) + endif(ENABLE_SPIRV_TOOLS_INSTALL) + +endif(SPIRV_BUILD_COMPRESSION) diff --git a/test/comp/CMakeLists.txt b/test/comp/CMakeLists.txt index f769b8c91..80339fb15 100644 --- a/test/comp/CMakeLists.txt +++ b/test/comp/CMakeLists.txt @@ -17,7 +17,9 @@ set(VAL_TEST_COMMON_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/../unit_spirv.h ) -add_spvtools_unittest(TARGET markv_codec - SRCS markv_codec_test.cpp ${VAL_TEST_COMMON_SRCS} - LIBS SPIRV-Tools-comp ${SPIRV_TOOLS} -) +if(SPIRV_BUILD_COMPRESSION) + add_spvtools_unittest(TARGET markv_codec + SRCS markv_codec_test.cpp ${VAL_TEST_COMMON_SRCS} + LIBS SPIRV-Tools-comp ${SPIRV_TOOLS} + ) +endif(SPIRV_BUILD_COMPRESSION) diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index 4dc0f1385..052fb7770 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -42,8 +42,6 @@ if (NOT ${SPIRV_SKIP_EXECUTABLES}) add_spvtools_tool(TARGET spirv-dis SRCS dis/dis.cpp LIBS ${SPIRV_TOOLS}) add_spvtools_tool(TARGET spirv-val SRCS val/val.cpp LIBS ${SPIRV_TOOLS}) add_spvtools_tool(TARGET spirv-opt SRCS opt/opt.cpp LIBS SPIRV-Tools-opt ${SPIRV_TOOLS}) - add_spvtools_tool(TARGET spirv-markv SRCS comp/markv.cpp - LIBS SPIRV-Tools-comp ${SPIRV_TOOLS}) add_spvtools_tool(TARGET spirv-stats SRCS stats/stats.cpp stats/stats_analyzer.cpp @@ -57,11 +55,17 @@ if (NOT ${SPIRV_SKIP_EXECUTABLES}) ${SPIRV_HEADER_INCLUDE_DIR}) target_include_directories(spirv-stats PRIVATE ${spirv-tools_SOURCE_DIR} ${SPIRV_HEADER_INCLUDE_DIR}) - target_include_directories(spirv-markv PRIVATE ${spirv-tools_SOURCE_DIR} - ${SPIRV_HEADER_INCLUDE_DIR}) - set(SPIRV_INSTALL_TARGETS spirv-as spirv-dis spirv-val spirv-opt spirv-stats spirv-cfg - spirv-markv) + set(SPIRV_INSTALL_TARGETS spirv-as spirv-dis spirv-val spirv-opt spirv-stats spirv-cfg) + + if(SPIRV_BUILD_COMPRESSION) + add_spvtools_tool(TARGET spirv-markv SRCS comp/markv.cpp + LIBS SPIRV-Tools-comp ${SPIRV_TOOLS}) + target_include_directories(spirv-markv PRIVATE ${spirv-tools_SOURCE_DIR} + ${SPIRV_HEADER_INCLUDE_DIR}) + set(SPIRV_INSTALL_TARGETS ${SPIRV_INSTALL_TARGETS} spirv-markv) + endif(SPIRV_BUILD_COMPRESSION) + if(ENABLE_SPIRV_TOOLS_INSTALL) install(TARGETS ${SPIRV_INSTALL_TARGETS} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}