Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions .github/workflows/shmath.yml
Original file line number Diff line number Diff line change
Expand Up @@ -63,10 +63,10 @@ jobs:
arch: amd64_arm64

steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- name: Clone test repository
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
repository: walbourn/directxmathtest
path: Tests
Expand All @@ -84,7 +84,7 @@ jobs:
working-directory: ${{ github.workspace }}
run: >
cmake --preset=${{ matrix.build_type }}
-DBUILD_SHMATH=ON -DBUILD_DX11=ON -DBUILD_DX12=ON
-DBUILD_SHMATH=ON -DBUILD_SIMPLEMATH=ON -DBUILD_DX11=ON -DBUILD_DX12=ON

- name: 'Build'
working-directory: ${{ github.workspace }}
Expand Down Expand Up @@ -116,10 +116,10 @@ jobs:
arch: amd64_arm64

steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- name: Clone test repository
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
repository: walbourn/directxmathtest
path: Tests
Expand All @@ -136,7 +136,7 @@ jobs:
working-directory: ${{ github.workspace }}
run: >
cmake --preset=${{ matrix.build_type }}
-DBUILD_SHMATH=ON -DBUILD_DX11=ON -DBUILD_DX12=ON
-DBUILD_SHMATH=ON -DBUILD_SIMPLEMATH=ON -DBUILD_DX11=ON -DBUILD_DX12=ON

- name: 'Build'
working-directory: ${{ github.workspace }}
Expand Down
38 changes: 38 additions & 0 deletions .github/workflows/simplemath_consumer.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
name: 'CMake (SimpleMath Consumer Test)'

on:
push:
branches: "auto-fix-327"

jobs:
build:
runs-on: windows-2022
steps:
- uses: actions/checkout@v3

- name: Configure and Install DirectXMath
run: |
cmake -B out/build/install_test -DBUILD_SIMPLEMATH=ON -DBUILD_SHARED_LIBS=ON
cmake --build out/build/install_test --config Release
cmake --install out/build/install_test --config Release --prefix out/installed

- name: Create Consumer Project
run: |
mkdir consumer
cd consumer
echo 'cmake_minimum_required(VERSION 3.21)' > CMakeLists.txt
echo 'project(ConsumerTest)' >> CMakeLists.txt
echo 'find_package(directxmath CONFIG REQUIRED)' >> CMakeLists.txt
echo 'find_package(SimpleMath CONFIG REQUIRED)' >> CMakeLists.txt
echo 'add_executable(Consumer main.cpp)' >> CMakeLists.txt
echo 'target_link_libraries(Consumer PRIVATE Microsoft::SimpleMath)' >> CMakeLists.txt

echo '#include <SimpleMath.h>' > main.cpp
echo 'using namespace DirectX::SimpleMath;' >> main.cpp
echo 'int main() { Vector3 v(1, 2, 3); return 0; }' >> main.cpp

- name: Build Consumer Project
run: |
cd consumer
cmake -B build -DCMAKE_PREFIX_PATH="$env:GITHUB_WORKSPACE/out/installed"
cmake --build build --config Release
7 changes: 7 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ option(BUILD_XDSP "Build XDSP math" OFF)

option(BUILD_SHMATH "Build Spherical Harmonics math" OFF)

option(BUILD_SIMPLEMATH "Build SimpleMath" OFF)

include(GNUInstallDirs)

#--- Library
Expand Down Expand Up @@ -104,6 +106,11 @@ if(BUILD_SHMATH)
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/SHMath)
endif()

if(BUILD_SIMPLEMATH)
message(STATUS "Including SimpleMath")
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/SimpleMath)
endif()

#--- Test suite
if((NOT WINDOWS_STORE) AND (NOT (DEFINED XBOX_CONSOLE_TARGET)))
include(CTest)
Expand Down
133 changes: 12 additions & 121 deletions SHMath/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -27,35 +27,8 @@ set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

if(DEFINED VCPKG_TARGET_ARCHITECTURE)
set(DXMATH_ARCHITECTURE ${VCPKG_TARGET_ARCHITECTURE})
elseif(CMAKE_GENERATOR_PLATFORM MATCHES "^[Ww][Ii][Nn]32$")
set(DXMATH_ARCHITECTURE x86)
elseif(CMAKE_GENERATOR_PLATFORM MATCHES "^[Xx]64$")
set(DXMATH_ARCHITECTURE x64)
elseif(CMAKE_GENERATOR_PLATFORM MATCHES "^[Aa][Rr][Mm]$")
set(DXMATH_ARCHITECTURE arm)
elseif(CMAKE_GENERATOR_PLATFORM MATCHES "^[Aa][Rr][Mm]64$")
set(DXMATH_ARCHITECTURE arm64)
elseif(CMAKE_GENERATOR_PLATFORM MATCHES "^[Aa][Rr][Mm]64EC$")
set(DXMATH_ARCHITECTURE arm64ec)
elseif(CMAKE_VS_PLATFORM_NAME_DEFAULT MATCHES "^[Ww][Ii][Nn]32$")
set(DXMATH_ARCHITECTURE x86)
elseif(CMAKE_VS_PLATFORM_NAME_DEFAULT MATCHES "^[Xx]64$")
set(DXMATH_ARCHITECTURE x64)
elseif(CMAKE_VS_PLATFORM_NAME_DEFAULT MATCHES "^[Aa][Rr][Mm]$")
set(DXMATH_ARCHITECTURE arm)
elseif(CMAKE_VS_PLATFORM_NAME_DEFAULT MATCHES "^[Aa][Rr][Mm]64$")
set(DXMATH_ARCHITECTURE arm64)
elseif(CMAKE_VS_PLATFORM_NAME_DEFAULT MATCHES "^[Aa][Rr][Mm]64EC$")
set(DXMATH_ARCHITECTURE arm64ec)
elseif(NOT (DEFINED DXMATH_ARCHITECTURE))
if(CMAKE_SYSTEM_PROCESSOR MATCHES "[Aa][Rr][Mm]64|aarch64|arm64")
set(DXMATH_ARCHITECTURE arm64)
else()
set(DXMATH_ARCHITECTURE x64)
endif()
endif()
include(${CMAKE_CURRENT_LIST_DIR}/../build/CompilerAndLinker.cmake)


#--- Library
set(LIBRARY_HEADERS DirectXSH.h)
Expand All @@ -73,6 +46,16 @@ add_library(${PROJECT_NAME} STATIC)

target_sources(${PROJECT_NAME} PRIVATE ${LIBRARY_HEADERS} ${LIBRARY_SOURCES})

if(COMPILER_DEFINES)
target_compile_definitions(${PROJECT_NAME} PRIVATE ${COMPILER_DEFINES})
endif()
if(COMPILER_SWITCHES)
target_compile_options(${PROJECT_NAME} PRIVATE ${COMPILER_SWITCHES})
endif()
if(LINKER_SWITCHES)
target_link_options(${PROJECT_NAME} PRIVATE ${LINKER_SWITCHES})
endif()

target_include_directories(${PROJECT_NAME} PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
Expand Down Expand Up @@ -129,98 +112,6 @@ install(FILES
${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE_NAME}-config-version.cmake
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PACKAGE_NAME})

#--- Compiler switches
if(MSVC)
target_compile_options(${PROJECT_NAME} PRIVATE /Wall /EHsc /GR /Gd /GS /Zc:forScope /Zc:inline /Zc:wchar_t "$<$<NOT:$<CONFIG:DEBUG>>:/guard:cf>")

if((MSVC_VERSION GREATER_EQUAL 1928)
AND (CMAKE_SIZEOF_VOID_P EQUAL 8)
AND ((NOT (CMAKE_CXX_COMPILER_ID MATCHES "Clang|IntelLLVM")) OR (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 13.0)))
target_compile_options(${PROJECT_NAME} PRIVATE "$<$<NOT:$<CONFIG:DEBUG>>:/guard:ehcont>")
endif()
else()
target_compile_definitions(${PROJECT_NAME} PRIVATE $<IF:$<CONFIG:DEBUG>,_DEBUG,NDEBUG>)
endif()

if(NOT (${DXMATH_ARCHITECTURE} MATCHES "^arm"))
if(CMAKE_SIZEOF_VOID_P EQUAL 4)
set(ARCH_SSE2 $<$<CXX_COMPILER_ID:MSVC,Intel>:/arch:SSE2> $<$<NOT:$<CXX_COMPILER_ID:MSVC,Intel>>:-msse2>)
else()
set(ARCH_SSE2 $<$<NOT:$<CXX_COMPILER_ID:MSVC,Intel>>:-msse2>)
endif()

if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
list(APPEND ARCH_SSE2 -mfpmath=sse)
endif()

target_compile_options(${PROJECT_NAME} PRIVATE ${ARCH_SSE2})
endif()

if(CMAKE_CXX_COMPILER_ID MATCHES "Clang|IntelLLVM")
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 16.0)
target_compile_options(${PROJECT_NAME} PRIVATE /ZH:SHA_256 "-Wno-unsafe-buffer-usage")
endif()
elseif(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
target_compile_options(${PROJECT_NAME} PRIVATE -Wno-ignored-attributes)
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
target_compile_options(${PROJECT_NAME} PRIVATE /Zc:__cplusplus /Zc:inline /fp:fast /Qdiag-disable:161)
elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
target_compile_options(${PROJECT_NAME} PRIVATE
/sdl /fp:fast
/wd4061 /wd4365 /wd4514 /wd4571 /wd4668 /wd4710 /wd4820 /wd5039 /wd5045)

if(CMAKE_INTERPROCEDURAL_OPTIMIZATION)
target_compile_options(${PROJECT_NAME} PRIVATE $<$<NOT:$<CONFIG:DEBUG>>:/Gy /Gw>)
endif()

if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.10)
target_compile_options(${PROJECT_NAME} PRIVATE /permissive-)
endif()

if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.14)
target_compile_options(${PROJECT_NAME} PRIVATE /Zc:__cplusplus)
endif()

if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.15)
target_compile_options(${PROJECT_NAME} PRIVATE /JMC-)
endif()

if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.24)
target_compile_options(${PROJECT_NAME} PRIVATE /ZH:SHA_256)
endif()

if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.26)
target_compile_options(${PROJECT_NAME} PRIVATE /Zc:preprocessor /wd5105)
endif()

if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.28)
target_compile_options(${PROJECT_NAME} PRIVATE /Zc:lambda)
endif()

if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.29)
target_compile_options(${PROJECT_NAME} PRIVATE /external:W4)
endif()

if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.34)
target_compile_options(${PROJECT_NAME} PRIVATE /wd5262 /wd5264)
endif()

if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.50)
target_compile_options(${PROJECT_NAME} PRIVATE /wd4865)
endif()

if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.35)
if(CMAKE_INTERPROCEDURAL_OPTIMIZATION)
target_compile_options(${PROJECT_NAME} PRIVATE $<$<NOT:$<CONFIG:DEBUG>>:/Zc:checkGwOdr>)
endif()

target_compile_options(${PROJECT_NAME} PRIVATE $<$<VERSION_GREATER_EQUAL:${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION},10.0.22000>:/Zc:templateScope>)
endif()

if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.50)
target_compile_options(${PROJECT_NAME} PRIVATE /Zc:u8EscapeEncoding)
endif()
endif()

if((NOT WIN32) AND (NOT EXISTS "${CMAKE_CURRENT_BINARY_DIR}/sal/sal.h"))
file(DOWNLOAD
Expand Down
102 changes: 102 additions & 0 deletions SimpleMath/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.

cmake_minimum_required (VERSION 3.21)

if(DEFINED DIRECTXMATH_VERSION)
set(SIMPLEMATH_VERSION ${DIRECTXMATH_VERSION})
else()
set(SIMPLEMATH_VERSION 1.0.0)
endif()

project(SimpleMath
VERSION ${SIMPLEMATH_VERSION}
DESCRIPTION "Simplified C++ Math wrapper for DirectXMath"
HOMEPAGE_URL "https://go.microsoft.com/fwlink/?LinkID=248929"
LANGUAGES CXX)

if(PROJECT_IS_TOP_LEVEL)
message(FATAL_ERROR "SimpleMath should be built by the main CMakeLists using BUILD_SIMPLEMATH")
endif()

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

include(${CMAKE_CURRENT_LIST_DIR}/../build/CompilerAndLinker.cmake)

#--- Library
set(LIBRARY_HEADERS SimpleMath.h SimpleMath.inl)
set(LIBRARY_SOURCES SimpleMath.cpp)

option(BUILD_SHARED_LIBS "Build SimpleMath as a shared library" OFF)

add_library(${PROJECT_NAME})

target_sources(${PROJECT_NAME} PRIVATE ${LIBRARY_HEADERS} ${LIBRARY_SOURCES})

if(COMPILER_DEFINES)
target_compile_definitions(${PROJECT_NAME} PRIVATE ${COMPILER_DEFINES})
endif()
if(COMPILER_SWITCHES)
target_compile_options(${PROJECT_NAME} PRIVATE ${COMPILER_SWITCHES})
endif()
if(LINKER_SWITCHES)
target_link_options(${PROJECT_NAME} PRIVATE ${LINKER_SWITCHES})
endif()

if(WIN32 AND BUILD_SHARED_LIBS)
message(STATUS "Build SimpleMath library as a DLL")

configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/build/SimpleMath.rc.in"
"${CMAKE_CURRENT_BINARY_DIR}/SimpleMath.rc" @ONLY)

target_sources(${PROJECT_NAME} PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/SimpleMath.rc")

target_compile_definitions(${PROJECT_NAME} PRIVATE DIRECTX_TOOLKIT_EXPORT)
target_compile_definitions(${PROJECT_NAME} INTERFACE DIRECTX_TOOLKIT_IMPORT)
endif()

target_include_directories(${PROJECT_NAME} PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)

target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_11)

target_link_libraries(${PROJECT_NAME} PRIVATE DirectXMath)

#--- Package
include(CMakePackageConfigHelpers)

string(TOLOWER ${PROJECT_NAME} PACKAGE_NAME)
cmake_path(GET CMAKE_CURRENT_LIST_DIR PARENT_PATH DIRECTXMATH_PATH)

write_basic_package_version_file(
${PACKAGE_NAME}-config-version.cmake
VERSION ${SIMPLEMATH_VERSION}
COMPATIBILITY AnyNewerVersion)

install(TARGETS ${PROJECT_NAME}
EXPORT ${PROJECT_NAME}-targets
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})

configure_package_config_file(${DIRECTXMATH_PATH}/build/DirectXMath-config.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE_NAME}-config.cmake
INSTALL_DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PACKAGE_NAME})

install(EXPORT ${PROJECT_NAME}-targets
FILE ${PROJECT_NAME}-targets.cmake
NAMESPACE Microsoft::
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PACKAGE_NAME})

install(FILES ${LIBRARY_HEADERS}
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})

install(FILES
${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE_NAME}-config.cmake
${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE_NAME}-config-version.cmake
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PACKAGE_NAME})

Loading