Skip to content

Commit a41cf67

Browse files
authored
Merge pull request KhronosGroup#326 from juan-lunarg/juaramos/cmake
cmake: Overally cleanup/testing update
2 parents 3834d41 + 4b5bf03 commit a41cf67

File tree

9 files changed

+199
-112
lines changed

9 files changed

+199
-112
lines changed

.github/workflows/presubmit.yml

Lines changed: 84 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ jobs:
99
matrix:
1010
os: [ubuntu-latest, macos-latest, windows-latest]
1111
steps:
12-
- uses: actions/checkout@v2
12+
- uses: actions/checkout@v3
1313
- name: Install Ubuntu packages
1414
if: matrix.os == 'ubuntu-latest'
1515
run: sudo apt install -y dos2unix
@@ -35,3 +35,86 @@ jobs:
3535
./bin/makeHeaders
3636
- name: Check generated headers
3737
run: git diff --exit-code
38+
39+
test_cmake_min_required:
40+
runs-on: ubuntu-latest
41+
steps:
42+
- uses: actions/checkout@v3
43+
- uses: lukka/get-cmake@latest
44+
with:
45+
cmakeVersion: 3.14.0
46+
- name: CMake build
47+
run: |
48+
cmake -S . -B build/ -D CMAKE_BUILD_TYPE=Debug -G "Ninja" -D CMAKE_INSTALL_PREFIX=${GITHUB_WORKSPACE}/build/install/
49+
cmake --build build --target install
50+
51+
test_cmake_latest:
52+
runs-on: ubuntu-latest
53+
steps:
54+
- uses: actions/checkout@v3
55+
- uses: lukka/get-cmake@latest
56+
- name: CMake build
57+
run: |
58+
cmake -S . -B build/ -D CMAKE_BUILD_TYPE=Debug -G "Ninja"
59+
cmake --install build/ --prefix build/install
60+
61+
add_subdirectory:
62+
runs-on: ubuntu-latest
63+
steps:
64+
- uses: actions/checkout@v3
65+
- uses: lukka/get-cmake@latest
66+
with:
67+
cmakeVersion: 3.15.0
68+
- name: Build spirv-headers with testing enabled
69+
run: |
70+
cmake -S . -B build/ -D BUILD_TESTS=ON -D CMAKE_BUILD_TYPE=Debug -G "Ninja"
71+
cmake --build build
72+
73+
find_package:
74+
runs-on: ubuntu-latest
75+
steps:
76+
- uses: actions/checkout@v3
77+
- uses: lukka/get-cmake@latest
78+
with:
79+
cmakeVersion: 3.15.0
80+
- name: Install spirv-headers
81+
run: |
82+
cmake -S . -B build/
83+
cmake --install build/ --prefix build/install
84+
- name: Check spirv-headers find_package support
85+
run: |
86+
cmake -S tests/find_package -B tests/find_package/build/ -D CMAKE_PREFIX_PATH=${GITHUB_WORKSPACE}/build/install
87+
cmake --build tests/find_package/build/
88+
89+
find_pkg_config:
90+
runs-on: ubuntu-latest
91+
steps:
92+
- uses: actions/checkout@v3
93+
- uses: lukka/get-cmake@latest
94+
with:
95+
cmakeVersion: 3.15.0
96+
- name: Install spirv-headers
97+
run: |
98+
cmake -S . -B build/ -D CMAKE_INSTALL_PREFIX=${GITHUB_WORKSPACE}/build/install/
99+
cmake --install build/
100+
- name: Check spirv-headers pkg_config support
101+
run: |
102+
cmake -S tests/pkg_config -B tests/pkg_config/build/ -D CMAKE_PREFIX_PATH=${GITHUB_WORKSPACE}/build/install
103+
cmake --build tests/pkg_config/build/
104+
105+
# https://github.com/KhronosGroup/SPIRV-Headers/issues/282
106+
find_pkg_config_absolute:
107+
runs-on: ubuntu-latest
108+
steps:
109+
- uses: actions/checkout@v3
110+
- uses: lukka/get-cmake@latest
111+
with:
112+
cmakeVersion: 3.15.0
113+
- name: Install spirv-headers with CMAKE_INSTALL_INCLUDEDIR being absolute
114+
run: |
115+
cmake -S . -B build/ -D CMAKE_INSTALL_INCLUDEDIR=${GITHUB_WORKSPACE}/build/install/include -D CMAKE_INSTALL_PREFIX=${GITHUB_WORKSPACE}/build/install/
116+
cmake --install build/
117+
- name: Check spirv-headers pkg_config support
118+
run: |
119+
cmake -S tests/pkg_config -B tests/pkg_config/build/ -D CMAKE_PREFIX_PATH=${GITHUB_WORKSPACE}/build/install
120+
cmake --build tests/pkg_config/build/

CMakeLists.txt

Lines changed: 29 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Copyright (c) 2015-2016 The Khronos Group Inc.
1+
# Copyright (c) 2015-2023 The Khronos Group Inc.
22
#
33
# Permission is hereby granted, free of charge, to any person obtaining a
44
# copy of this software and/or associated documentation files (the
@@ -23,115 +23,43 @@
2323
# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
2424
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
2525
# MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
26+
cmake_minimum_required(VERSION 3.14)
27+
project(SPIRV_HEADERS LANGUAGES CXX VERSION 1.5.5)
2628

27-
#
28-
# The SPIR-V headers from the SPIR-V Registry
29-
# https://www.khronos.org/registry/spir-v/
30-
#
31-
cmake_minimum_required(VERSION 3.0)
32-
project(SPIRV-Headers VERSION 1.5.5)
33-
34-
# There are two ways to use this project.
35-
#
36-
# Using this source tree directly from a CMake-based project:
37-
# 1. Add an add_subdirectory directive to include this sub directory.
38-
# 2. Use ${SPIRV-Headers_SOURCE_DIR}/include} in a target_include_directories
39-
# command.
40-
#
41-
# Installing the headers first, then using them with an implicit include
42-
# directory. To install the headers:
43-
# 1. mkdir build ; cd build
44-
# 2. cmake ..
45-
# 3. cmake --build . --target install
46-
47-
option(SPIRV_HEADERS_SKIP_EXAMPLES "Skip building examples"
48-
${SPIRV_HEADERS_SKIP_EXAMPLES})
49-
50-
option(SPIRV_HEADERS_SKIP_INSTALL "Skip install"
51-
${SPIRV_HEADERS_SKIP_INSTALL})
52-
53-
if(NOT ${SPIRV_HEADERS_SKIP_EXAMPLES})
54-
set(SPIRV_HEADERS_ENABLE_EXAMPLES ON)
29+
if (CMAKE_VERSION VERSION_LESS "3.21")
30+
# https://cmake.org/cmake/help/latest/variable/PROJECT_IS_TOP_LEVEL.html
31+
string(COMPARE EQUAL ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR} PROJECT_IS_TOP_LEVEL)
5532
endif()
5633

57-
if(NOT ${SPIRV_HEADERS_SKIP_INSTALL})
58-
set(SPIRV_HEADERS_ENABLE_INSTALL ON)
59-
# legacy
60-
add_custom_target(install-headers
61-
COMMAND cmake -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/include/spirv
62-
$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/include/spirv)
63-
endif()
64-
65-
if (SPIRV_HEADERS_ENABLE_EXAMPLES)
66-
message(STATUS "Building SPIRV-Header examples")
67-
add_subdirectory(example)
68-
endif()
34+
add_library(SPIRV-Headers INTERFACE)
35+
add_library(SPIRV-Headers::SPIRV-Headers ALIAS SPIRV-Headers)
36+
target_include_directories(SPIRV-Headers INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>)
6937

70-
include(GNUInstallDirs)
71-
add_library(${PROJECT_NAME} INTERFACE)
72-
target_include_directories(${PROJECT_NAME} INTERFACE
73-
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
74-
)
75-
76-
# Installation
77-
78-
if (SPIRV_HEADERS_ENABLE_INSTALL)
79-
message(STATUS "Installing SPIRV-Header")
80-
81-
set(config_install_dir "${CMAKE_INSTALL_DATADIR}/cmake/${PROJECT_NAME}")
82-
83-
set(generated_dir "${CMAKE_CURRENT_BINARY_DIR}/generated")
84-
85-
set(version_config "${generated_dir}/${PROJECT_NAME}ConfigVersion.cmake")
86-
set(project_config "${generated_dir}/${PROJECT_NAME}Config.cmake")
87-
set(TARGETS_EXPORT_NAME "${PROJECT_NAME}Targets")
88-
set(namespace "${PROJECT_NAME}::")
89-
90-
include(CMakePackageConfigHelpers)
91-
92-
if (NOT CMAKE_VERSION VERSION_LESS 3.14)
93-
set(arch_independent_str ARCH_INDEPENDENT)
38+
if (PROJECT_IS_TOP_LEVEL)
39+
option(BUILD_TESTS "Build the tests")
40+
if (BUILD_TESTS)
41+
add_subdirectory(tests)
9442
endif()
95-
write_basic_package_version_file(
96-
"${version_config}"
97-
COMPATIBILITY SameMajorVersion
98-
${arch_independent_str}
99-
)
10043

101-
configure_package_config_file(
102-
"cmake/Config.cmake.in"
103-
"${project_config}"
104-
INSTALL_DESTINATION "${config_install_dir}"
105-
)
44+
include(GNUInstallDirs)
45+
include(CMakePackageConfigHelpers)
10646

107-
install(
108-
TARGETS ${PROJECT_NAME}
109-
EXPORT "${TARGETS_EXPORT_NAME}"
110-
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
111-
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
112-
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
113-
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
114-
)
47+
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/spirv DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
11548

116-
install(
117-
DIRECTORY include/spirv
118-
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
119-
)
49+
set(cmake_install_dir "${CMAKE_INSTALL_DATADIR}/cmake/SPIRV-Headers")
50+
set(version_config "${CMAKE_CURRENT_BINARY_DIR}/generated/SPIRV-HeadersConfigVersion.cmake")
12051

121-
install(
122-
FILES "${project_config}" "${version_config}"
123-
DESTINATION "${config_install_dir}"
124-
)
52+
write_basic_package_version_file("${version_config}" COMPATIBILITY SameMajorVersion ARCH_INDEPENDENT)
53+
install(FILES "${version_config}" DESTINATION "${cmake_install_dir}")
12554

126-
install(
127-
EXPORT "${TARGETS_EXPORT_NAME}"
128-
NAMESPACE "${namespace}"
129-
DESTINATION "${config_install_dir}"
130-
)
55+
install(TARGETS SPIRV-Headers EXPORT "SPIRV-HeadersConfig" INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
56+
install(EXPORT "SPIRV-HeadersConfig" NAMESPACE "SPIRV-Headers::" DESTINATION "${cmake_install_dir}")
13157

132-
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/SPIRV-Headers.pc.in ${CMAKE_BINARY_DIR}/SPIRV-Headers.pc @ONLY)
133-
install(
134-
FILES "${CMAKE_BINARY_DIR}/SPIRV-Headers.pc"
135-
DESTINATION ${CMAKE_INSTALL_DATADIR}/pkgconfig
136-
)
58+
if (IS_ABSOLUTE ${CMAKE_INSTALL_INCLUDEDIR})
59+
set(SPIRV_HEADERS_PKGCONFIG_INCLUDE_DIR ${CMAKE_INSTALL_INCLUDEDIR})
60+
else()
61+
set(SPIRV_HEADERS_PKGCONFIG_INCLUDE_DIR ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR})
62+
endif()
63+
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/SPIRV-Headers.pc.in ${CMAKE_CURRENT_BINARY_DIR}/SPIRV-Headers.pc @ONLY)
64+
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/SPIRV-Headers.pc" DESTINATION ${CMAKE_INSTALL_DATADIR}/pkgconfig)
13765
endif()

cmake/Config.cmake.in

Lines changed: 0 additions & 4 deletions
This file was deleted.

SPIRV-Headers.pc.in renamed to cmake/SPIRV-Headers.pc.in

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
prefix=@CMAKE_INSTALL_PREFIX@
2-
includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
1+
includedir=@SPIRV_HEADERS_PKGCONFIG_INCLUDE_DIR@
32

43
Name: SPIRV-Headers
54
Description: Header files from the SPIR-V registry

example/CMakeLists.txt

Lines changed: 0 additions & 4 deletions
This file was deleted.

tests/CMakeLists.txt

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# Copyright (c) 2015-2023 The Khronos Group Inc.
2+
#
3+
# Permission is hereby granted, free of charge, to any person obtaining a
4+
# copy of this software and/or associated documentation files (the
5+
# "Materials"), to deal in the Materials without restriction, including
6+
# without limitation the rights to use, copy, modify, merge, publish,
7+
# distribute, sublicense, and/or sell copies of the Materials, and to
8+
# permit persons to whom the Materials are furnished to do so, subject to
9+
# the following conditions:
10+
#
11+
# The above copyright notice and this permission notice shall be included
12+
# in all copies or substantial portions of the Materials.
13+
#
14+
# MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS
15+
# KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS
16+
# SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT
17+
# https://www.khronos.org/registry/
18+
#
19+
# THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
20+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
22+
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
23+
# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
24+
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
25+
# MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
26+
27+
add_library(simple_test STATIC)
28+
29+
target_sources(simple_test PRIVATE
30+
${CMAKE_CURRENT_SOURCE_DIR}/example.cpp
31+
)
32+
33+
target_link_libraries(simple_test PRIVATE
34+
SPIRV-Headers::SPIRV-Headers
35+
)
36+
37+
if (NOT TARGET SPIRV-Headers)
38+
message(FATAL_ERROR "SPIRV-Headers target not defined!")
39+
endif()
File renamed without changes.

tests/find_package/CMakeLists.txt

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
cmake_minimum_required(VERSION 3.0)
2+
3+
project(TEST_FIND_PACKAGE LANGUAGES CXX)
4+
5+
add_library(find_package_example STATIC
6+
${CMAKE_CURRENT_SOURCE_DIR}/../example.cpp
7+
)
8+
9+
find_package(SPIRV-Headers REQUIRED CONFIG)
10+
11+
if (NOT TARGET SPIRV-Headers::SPIRV-Headers)
12+
message(FATAL_ERROR "SPIRV-Headers::SPIRV-Headers target not defined")
13+
endif()
14+
15+
target_link_libraries(find_package_example PRIVATE
16+
SPIRV-Headers::SPIRV-Headers
17+
)
18+
19+
if (NOT DEFINED SPIRV-Headers_VERSION)
20+
message(FATAL_ERROR "SPIRV-Headers_VERSION not provided!")
21+
endif()
22+
23+
message(STATUS "SPIRV-Headers_VERSION = ${SPIRV-Headers_VERSION}")

tests/pkg_config/CMakeLists.txt

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
cmake_minimum_required(VERSION 3.14)
2+
3+
project(TEST_PKGCONFIG LANGUAGES CXX)
4+
5+
add_library(pkgconfig_example STATIC)
6+
7+
target_sources(pkgconfig_example PRIVATE
8+
${CMAKE_CURRENT_SOURCE_DIR}/../example.cpp
9+
)
10+
11+
find_package(PkgConfig REQUIRED)
12+
13+
pkg_check_modules(SPIRV_HEADERS REQUIRED IMPORTED_TARGET SPIRV-Headers)
14+
15+
target_link_libraries(pkgconfig_example PRIVATE
16+
PkgConfig::SPIRV_HEADERS
17+
)
18+
19+
if (NOT DEFINED SPIRV_HEADERS_VERSION)
20+
message(FATAL_ERROR "SPIRV_HEADERS_VERSION not defined!")
21+
endif()
22+
23+
message(STATUS "PkgConfig::SPIRV_HEADERS version = ${SPIRV_HEADERS_VERSION}")

0 commit comments

Comments
 (0)