Skip to content

Commit 93a8e06

Browse files
committed
Add build options to CMake for XDSP and SHMath
1 parent b09f268 commit 93a8e06

File tree

4 files changed

+279
-25
lines changed

4 files changed

+279
-25
lines changed
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
name: approver_count
2+
description: Approver count policy for mscodehub/DirectXMath/DirectXMath repository
3+
resource: repository
4+
where:
5+
configuration:
6+
approverCountPolicySettings:
7+
isBlocking: true
8+
requireMinimumApproverCount: 1
9+
creatorVoteCounts: false
10+
allowDownvotes: false
11+
sourcePushOptions:
12+
resetOnSourcePush: false
13+
requireVoteOnLastIteration: true
14+
requireVoteOnEachIteration: false
15+
resetRejectionsOnSourcePush: false
16+
blockLastPusherVote: true
17+
branchNames:
18+
- refs/heads/release
19+
- refs/heads/main
20+
displayName: mscodehub/DirectXMath/DirectXMath Approver Count Policy

CMakeLists.txt

Lines changed: 11 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ project(DirectXMath
1515
HOMEPAGE_URL "https://go.microsoft.com/fwlink/?LinkID=615560"
1616
LANGUAGES CXX)
1717

18+
option(BUILD_XDSP "Build XDSP math" OFF)
19+
20+
option(BUILD_SHMATH "Build Spherical Harmonics math" OFF)
21+
1822
include(GNUInstallDirs)
1923

2024
#--- Library
@@ -86,31 +90,13 @@ configure_file(
8690
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/DirectXMath.pc"
8791
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
8892

89-
#--- Test suite
90-
if(DEFINED VCPKG_TARGET_ARCHITECTURE)
91-
set(DXMATH_ARCHITECTURE ${VCPKG_TARGET_ARCHITECTURE})
92-
elseif(CMAKE_GENERATOR_PLATFORM MATCHES "^[Ww][Ii][Nn]32$")
93-
set(DXMATH_ARCHITECTURE x86)
94-
elseif(CMAKE_GENERATOR_PLATFORM MATCHES "^[Xx]64$")
95-
set(DXMATH_ARCHITECTURE x64)
96-
elseif(CMAKE_GENERATOR_PLATFORM MATCHES "^[Aa][Rr][Mm]$")
97-
set(DXMATH_ARCHITECTURE arm)
98-
elseif(CMAKE_GENERATOR_PLATFORM MATCHES "^[Aa][Rr][Mm]64$")
99-
set(DXMATH_ARCHITECTURE arm64)
100-
elseif(CMAKE_GENERATOR_PLATFORM MATCHES "^[Aa][Rr][Mm]64EC$")
101-
set(DXMATH_ARCHITECTURE arm64ec)
102-
elseif(CMAKE_VS_PLATFORM_NAME_DEFAULT MATCHES "^[Ww][Ii][Nn]32$")
103-
set(DXMATH_ARCHITECTURE x86)
104-
elseif(CMAKE_VS_PLATFORM_NAME_DEFAULT MATCHES "^[Xx]64$")
105-
set(DXMATH_ARCHITECTURE x64)
106-
elseif(CMAKE_VS_PLATFORM_NAME_DEFAULT MATCHES "^[Aa][Rr][Mm]$")
107-
set(DXMATH_ARCHITECTURE arm)
108-
elseif(CMAKE_VS_PLATFORM_NAME_DEFAULT MATCHES "^[Aa][Rr][Mm]64$")
109-
set(DXMATH_ARCHITECTURE arm64)
110-
elseif(CMAKE_VS_PLATFORM_NAME_DEFAULT MATCHES "^[Aa][Rr][Mm]64EC$")
111-
set(DXMATH_ARCHITECTURE arm64ec)
112-
elseif(NOT (DEFINED DXMATH_ARCHITECTURE))
113-
set(DXMATH_ARCHITECTURE "x64")
93+
#--- Optional extension libraries
94+
if(BUILD_XDSP)
95+
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/XDSP)
96+
endif()
97+
98+
if(BUILD_SHMATH)
99+
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/SHMath)
114100
endif()
115101

116102
#--- Test suite

SHMath/CMakeLists.txt

Lines changed: 188 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,188 @@
1+
# Copyright (c) Microsoft Corporation.
2+
# Licensed under the MIT License.
3+
4+
cmake_minimum_required (VERSION 3.20)
5+
6+
if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
7+
message(FATAL_ERROR "SHMath should be built by the main CMakeLists using BUILD_SHMATH")
8+
endif()
9+
10+
project(DirectXSH
11+
VERSION ${DIRECTXMATH_VERSION}
12+
DESCRIPTION "C++ Spherical Harmonics Math Library"
13+
HOMEPAGE_URL "https://go.microsoft.com/fwlink/?LinkID=615560"
14+
LANGUAGES CXX)
15+
16+
option(BUILD_DX11 "Build with DirectX11 support" OFF)
17+
18+
option(BUILD_DX12 "Build with DirectX12 support" OFF)
19+
20+
set(CMAKE_CXX_STANDARD 17)
21+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
22+
set(CMAKE_CXX_EXTENSIONS OFF)
23+
24+
if(DEFINED VCPKG_TARGET_ARCHITECTURE)
25+
set(DXMATH_ARCHITECTURE ${VCPKG_TARGET_ARCHITECTURE})
26+
elseif(CMAKE_GENERATOR_PLATFORM MATCHES "^[Ww][Ii][Nn]32$")
27+
set(DXMATH_ARCHITECTURE x86)
28+
elseif(CMAKE_GENERATOR_PLATFORM MATCHES "^[Xx]64$")
29+
set(DXMATH_ARCHITECTURE x64)
30+
elseif(CMAKE_GENERATOR_PLATFORM MATCHES "^[Aa][Rr][Mm]$")
31+
set(DXMATH_ARCHITECTURE arm)
32+
elseif(CMAKE_GENERATOR_PLATFORM MATCHES "^[Aa][Rr][Mm]64$")
33+
set(DXMATH_ARCHITECTURE arm64)
34+
elseif(CMAKE_GENERATOR_PLATFORM MATCHES "^[Aa][Rr][Mm]64EC$")
35+
set(DXMATH_ARCHITECTURE arm64ec)
36+
elseif(CMAKE_VS_PLATFORM_NAME_DEFAULT MATCHES "^[Ww][Ii][Nn]32$")
37+
set(DXMATH_ARCHITECTURE x86)
38+
elseif(CMAKE_VS_PLATFORM_NAME_DEFAULT MATCHES "^[Xx]64$")
39+
set(DXMATH_ARCHITECTURE x64)
40+
elseif(CMAKE_VS_PLATFORM_NAME_DEFAULT MATCHES "^[Aa][Rr][Mm]$")
41+
set(DXMATH_ARCHITECTURE arm)
42+
elseif(CMAKE_VS_PLATFORM_NAME_DEFAULT MATCHES "^[Aa][Rr][Mm]64$")
43+
set(DXMATH_ARCHITECTURE arm64)
44+
elseif(CMAKE_VS_PLATFORM_NAME_DEFAULT MATCHES "^[Aa][Rr][Mm]64EC$")
45+
set(DXMATH_ARCHITECTURE arm64ec)
46+
elseif(NOT (DEFINED DXMATH_ARCHITECTURE))
47+
if(CMAKE_SYSTEM_PROCESSOR MATCHES "[Aa][Rr][Mm]64|aarch64|arm64")
48+
set(DXMATH_ARCHITECTURE arm64)
49+
else()
50+
set(DXMATH_ARCHITECTURE x64)
51+
endif()
52+
endif()
53+
54+
#--- Library
55+
set(LIBRARY_HEADERS DirectXSH.h)
56+
set(LIBRARY_SOURCES DirectXSH.cpp)
57+
58+
if(WIN32 AND BUILD_DX11)
59+
set(LIBRARY_SOURCES ${LIBRARY_SOURCES} DirectXSHD3D11.cpp)
60+
endif()
61+
62+
if(BUILD_DX12)
63+
set(LIBRARY_SOURCES ${LIBRARY_SOURCES} DirectXSHD3D12.cpp)
64+
endif()
65+
66+
add_library(${PROJECT_NAME} STATIC ${LIBRARY_SOURCES} ${LIBRARY_HEADERS})
67+
68+
target_include_directories(${PROJECT_NAME} PUBLIC
69+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
70+
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
71+
72+
target_compile_features(${PROJECT_NAME} INTERFACE cxx_std_11)
73+
74+
#--- Package
75+
include(CMakePackageConfigHelpers)
76+
77+
string(TOLOWER ${PROJECT_NAME} PACKAGE_NAME)
78+
cmake_path(GET CMAKE_CURRENT_LIST_DIR PARENT_PATH DIRECTXMATH_PATH)
79+
80+
write_basic_package_version_file(
81+
${PACKAGE_NAME}-config-version.cmake
82+
VERSION ${DIRECTXMATH_VERSION}
83+
COMPATIBILITY AnyNewerVersion
84+
ARCH_INDEPENDENT)
85+
86+
install(TARGETS ${PROJECT_NAME}
87+
EXPORT ${PROJECT_NAME}-targets
88+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
89+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
90+
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
91+
92+
configure_package_config_file(${DIRECTXMATH_PATH}/build/DirectXMath-config.cmake.in
93+
${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE_NAME}-config.cmake
94+
INSTALL_DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PACKAGE_NAME})
95+
96+
install(EXPORT ${PROJECT_NAME}-targets
97+
FILE ${PROJECT_NAME}-targets.cmake
98+
NAMESPACE Microsoft::
99+
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PACKAGE_NAME})
100+
101+
install(FILES ${LIBRARY_HEADERS}
102+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
103+
104+
install(FILES
105+
${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE_NAME}-config.cmake
106+
${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE_NAME}-config-version.cmake
107+
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PACKAGE_NAME})
108+
109+
#--- Compiler switches
110+
if(MSVC)
111+
target_compile_options(${PROJECT_NAME} PRIVATE /Wall /EHsc /GR "$<$<NOT:$<CONFIG:DEBUG>>:/guard:cf>")
112+
113+
if((MSVC_VERSION GREATER_EQUAL 1928)
114+
AND (CMAKE_SIZEOF_VOID_P EQUAL 8)
115+
AND ((NOT (CMAKE_CXX_COMPILER_ID MATCHES "Clang|IntelLLVM")) OR (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 13.0)))
116+
target_compile_options(${PROJECT_NAME} PRIVATE "$<$<NOT:$<CONFIG:DEBUG>>:/guard:ehcont>")
117+
endif()
118+
else()
119+
target_compile_definitions(${PROJECT_NAME} PRIVATE $<IF:$<CONFIG:DEBUG>,_DEBUG,NDEBUG>)
120+
endif()
121+
122+
if(NOT (${DXMATH_ARCHITECTURE} MATCHES "^arm"))
123+
if(CMAKE_SIZEOF_VOID_P EQUAL 4)
124+
set(ARCH_SSE2 $<$<CXX_COMPILER_ID:MSVC,Intel>:/arch:SSE2> $<$<NOT:$<CXX_COMPILER_ID:MSVC,Intel>>:-msse2>)
125+
else()
126+
set(ARCH_SSE2 $<$<NOT:$<CXX_COMPILER_ID:MSVC,Intel>>:-msse2>)
127+
endif()
128+
129+
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
130+
list(APPEND ARCH_SSE2 -mfpmath=sse)
131+
endif()
132+
133+
target_compile_options(${PROJECT_NAME} PRIVATE ${ARCH_SSE2})
134+
endif()
135+
136+
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang|IntelLLVM")
137+
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 16.0)
138+
target_compile_options(${PROJECT_NAME} PRIVATE /ZH:SHA_256 "-Wno-unsafe-buffer-usage")
139+
endif()
140+
elseif(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
141+
target_compile_options(${PROJECT_NAME} PRIVATE -Wno-ignored-attributes)
142+
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
143+
target_compile_options(${PROJECT_NAME} PRIVATE /Zc:__cplusplus /Zc:inline /fp:fast /Qdiag-disable:161)
144+
elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
145+
target_compile_options(${PROJECT_NAME} PRIVATE
146+
/sdl /Zc:inline /fp:fast
147+
"/wd4061" "/wd4365" "/wd4514" "/wd4571" "/wd4668" "/wd4710" "/wd4820" "/wd5039" "/wd5045")
148+
149+
if(CMAKE_INTERPROCEDURAL_OPTIMIZATION)
150+
target_compile_options(${PROJECT_NAME} PRIVATE $<$<NOT:$<CONFIG:DEBUG>>:/Gy /Gw>)
151+
endif()
152+
153+
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.10)
154+
target_compile_options(${PROJECT_NAME} PRIVATE /permissive-)
155+
endif()
156+
157+
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.14)
158+
target_compile_options(${PROJECT_NAME} PRIVATE /Zc:__cplusplus)
159+
endif()
160+
161+
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.24)
162+
target_compile_options(${PROJECT_NAME} PRIVATE /ZH:SHA_256)
163+
endif()
164+
165+
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.26)
166+
target_compile_options(${PROJECT_NAME} PRIVATE /Zc:preprocessor /wd5105)
167+
endif()
168+
169+
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.28)
170+
target_compile_options(${PROJECT_NAME} PRIVATE /Zc:lambda)
171+
endif()
172+
173+
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.29)
174+
target_compile_options(${PROJECT_NAME} PRIVATE /external:W4)
175+
endif()
176+
177+
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.34)
178+
target_compile_options(${PROJECT_NAME} PRIVATE /wd5262 /wd5264)
179+
endif()
180+
181+
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.35)
182+
if(CMAKE_INTERPROCEDURAL_OPTIMIZATION)
183+
target_compile_options(${PROJECT_NAME} PRIVATE $<$<NOT:$<CONFIG:DEBUG>>:/Zc:checkGwOdr>)
184+
endif()
185+
186+
target_compile_options(${PROJECT_NAME} PRIVATE $<$<VERSION_GREATER_EQUAL:${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION},10.0.22000>:/Zc:templateScope>)
187+
endif()
188+
endif()

XDSP/CMakeLists.txt

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
# Copyright (c) Microsoft Corporation.
2+
# Licensed under the MIT License.
3+
4+
cmake_minimum_required (VERSION 3.20)
5+
6+
if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
7+
message(FATAL_ERROR "XSDP should be built by the main CMakeLists using BUILD_XDSP")
8+
endif()
9+
10+
project(XDSP
11+
VERSION ${DIRECTXMATH_VERSION}
12+
DESCRIPTION "XDSP Digital Signal Processing (DSP) for DirectXMath"
13+
HOMEPAGE_URL "https://go.microsoft.com/fwlink/?LinkID=615560"
14+
LANGUAGES CXX)
15+
16+
#--- Library
17+
set(LIBRARY_HEADERS XDSP.h)
18+
19+
add_library(${PROJECT_NAME} INTERFACE)
20+
21+
target_include_directories(${PROJECT_NAME} INTERFACE
22+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
23+
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
24+
25+
target_compile_features(${PROJECT_NAME} INTERFACE cxx_std_11)
26+
27+
#--- Package
28+
include(CMakePackageConfigHelpers)
29+
30+
string(TOLOWER ${PROJECT_NAME} PACKAGE_NAME)
31+
cmake_path(GET CMAKE_CURRENT_LIST_DIR PARENT_PATH DIRECTXMATH_PATH)
32+
33+
write_basic_package_version_file(
34+
${PACKAGE_NAME}-config-version.cmake
35+
VERSION ${DIRECTXMATH_VERSION}
36+
COMPATIBILITY AnyNewerVersion
37+
ARCH_INDEPENDENT)
38+
39+
install(TARGETS ${PROJECT_NAME}
40+
EXPORT ${PROJECT_NAME}-targets
41+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
42+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
43+
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
44+
45+
configure_package_config_file(${DIRECTXMATH_PATH}/build/DirectXMath-config.cmake.in
46+
${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE_NAME}-config.cmake
47+
INSTALL_DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PACKAGE_NAME})
48+
49+
install(EXPORT ${PROJECT_NAME}-targets
50+
FILE ${PROJECT_NAME}-targets.cmake
51+
NAMESPACE Microsoft::
52+
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PACKAGE_NAME})
53+
54+
install(FILES ${LIBRARY_HEADERS}
55+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
56+
57+
install(FILES
58+
${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE_NAME}-config.cmake
59+
${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE_NAME}-config-version.cmake
60+
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PACKAGE_NAME})

0 commit comments

Comments
 (0)