Skip to content

Commit 1c27cec

Browse files
authored
Add option to build as shared lib (#533)
1 parent c6f26f0 commit 1c27cec

31 files changed

+1574
-767
lines changed

.github/workflows/main.yml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,26 @@ jobs:
7979
working-directory: ${{ github.workspace }}
8080
run: cmake --build out\build\${{ matrix.build_type }}
8181

82+
- name: 'Clean up'
83+
working-directory: ${{ github.workspace }}
84+
run: Remove-Item -Path out -Recurse -Force
85+
8286
- name: 'Configure CMake (Spectre)'
8387
working-directory: ${{ github.workspace }}
8488
run: cmake --preset=${{ matrix.build_type }} -DENABLE_SPECTRE_MITIGATION=ON
8589

8690
- name: 'Build (Spectre)'
8791
working-directory: ${{ github.workspace }}
8892
run: cmake --build out\build\${{ matrix.build_type }}
93+
94+
- name: 'Clean up'
95+
working-directory: ${{ github.workspace }}
96+
run: Remove-Item -Path out -Recurse -Force
97+
98+
- name: 'Configure CMake (DLL)'
99+
working-directory: ${{ github.workspace }}
100+
run: cmake --preset=${{ matrix.build_type }} -DBUILD_SHARED_LIBS=ON
101+
102+
- name: 'Build (DLL)'
103+
working-directory: ${{ github.workspace }}
104+
run: cmake --build out\build\${{ matrix.build_type }}

.github/workflows/test.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,3 +104,15 @@ jobs:
104104
name: 'Test (Math only)'
105105
working-directory: ${{ github.workspace }}
106106
run: ctest --preset=${{ matrix.build_type }} -L Math
107+
108+
- name: 'Clean up'
109+
working-directory: ${{ github.workspace }}
110+
run: Remove-Item -Path out -Recurse -Force
111+
112+
- name: 'Configure CMake (DLL)'
113+
working-directory: ${{ github.workspace }}
114+
run: cmake --preset=${{ matrix.build_type }} -DBUILD_TESTING=ON -DBUILD_TOOLS=OFF -DBUILD_SHARED_LIBS=ON
115+
116+
- name: 'Build (DLL)'
117+
working-directory: ${{ github.workspace }}
118+
run: cmake --build out\build\${{ matrix.build_type }}

.github/workflows/vcpkg.yml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,31 +29,48 @@ jobs:
2929
os: [windows-2019, windows-2022]
3030
build_type: [x64-Debug-VCPKG]
3131
arch: [amd64]
32+
shared: [OFF]
3233
include:
3334
- os: windows-2022
3435
build_type: x64-Debug-Clang-VCPKG
3536
arch: amd64
37+
shared: OFF
3638
- os: windows-2022
3739
build_type: x86-Debug-VCPKG
3840
arch: amd64_x86
41+
shared: OFF
3942
- os: windows-2022
4043
build_type: x64-Debug-Redist
4144
arch: amd64
45+
shared: OFF
4246
- os: windows-2022
4347
build_type: x64-Release-Redist
4448
arch: amd64
49+
shared: OFF
4550
- os: windows-2022
4651
build_type: arm64-Debug-VCPKG
4752
arch: amd64_arm64
53+
shared: OFF
4854
- os: windows-2022
4955
build_type: arm64ec-Debug-VCPKG
5056
arch: amd64_arm64
57+
shared: OFF
5158
- os: windows-2022
5259
build_type: x64-Debug-MinGW
5360
arch: amd64
61+
shared: OFF
5462
- os: windows-2022
5563
build_type: x64-Release-MinGW
5664
arch: amd64
65+
shared: OFF
66+
- os: windows-2022
67+
build_type: x64-Debug-MinGW
68+
arch: amd64
69+
shared: ON
70+
- os: windows-2022
71+
build_type: x64-Release-MinGW
72+
arch: amd64
73+
shared: ON
5774

5875
steps:
5976
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
@@ -126,6 +143,7 @@ jobs:
126143
working-directory: ${{ github.workspace }}
127144
run: >
128145
cmake --preset=${{ matrix.build_type }} -DBUILD_TESTING=OFF -DBUILD_XAUDIO_WIN10=OFF -DBUILD_XAUDIO_WIN8=OFF -DBUILD_XAUDIO_REDIST=ON
146+
-DBUILD_SHARED_LIBS=${{ matrix.shared }}
129147
-DCMAKE_TOOLCHAIN_FILE="${{ github.workspace }}/vcpkg/scripts/buildsystems/vcpkg.cmake" -DVCPKG_MANIFEST_DIR="${{ github.workspace }}/build"
130148
-DVCPKG_TARGET_TRIPLET="${env:VCPKG_DEFAULT_TRIPLET}"
131149

.github/workflows/win10.yml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,10 @@ jobs:
9797
working-directory: ${{ github.workspace }}
9898
run: cmake --build out\build\${{ matrix.build_type }}
9999

100+
- name: 'Clean up'
101+
working-directory: ${{ github.workspace }}
102+
run: Remove-Item -Path out -Recurse -Force
103+
100104
- if: matrix.arch != 'amd64_arm64'
101105
name: 'Configure CMake (Spectre)'
102106
working-directory: ${{ github.workspace }}
@@ -106,3 +110,16 @@ jobs:
106110
name: 'Build (Spectre)'
107111
working-directory: ${{ github.workspace }}
108112
run: cmake --build out\build\${{ matrix.build_type }}
113+
114+
- if: matrix.arch != 'amd64_arm64'
115+
name: 'Clean up'
116+
working-directory: ${{ github.workspace }}
117+
run: Remove-Item -Path out -Recurse -Force
118+
119+
- name: 'Configure CMake (DLL)'
120+
working-directory: ${{ github.workspace }}
121+
run: cmake --preset=${{ matrix.build_type }} -DBUILD_SHARED_LIBS=ON
122+
123+
- name: 'Build (DLL)'
124+
working-directory: ${{ github.workspace }}
125+
run: cmake --build out\build\${{ matrix.build_type }}

Audio/SoundCommon.h

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,17 @@
2525
#define DIRECTX_ENABLE_SEEK_TABLES
2626
#endif
2727

28+
#ifndef DIRECTX_TOOLKIT_API
29+
#ifdef DIRECTX_TOOLKIT_EXPORT
30+
#define DIRECTX_TOOLKIT_API __declspec(dllexport)
31+
#elif defined(DIRECTX_TOOLKIT_IMPORT)
32+
#define DIRECTX_TOOLKIT_API __declspec(dllimport)
33+
#else
34+
#define DIRECTX_TOOLKIT_API
35+
#endif
36+
#endif
37+
38+
2839
namespace DirectX
2940
{
3041
// Helper for getting a format tag from a WAVEFORMATEX
@@ -55,11 +66,11 @@ namespace DirectX
5566

5667

5768
// Helper for validating wave format structure
58-
bool __cdecl IsValid(_In_ const WAVEFORMATEX* wfx) noexcept;
69+
DIRECTX_TOOLKIT_API bool __cdecl IsValid(_In_ const WAVEFORMATEX* wfx) noexcept;
5970

6071

6172
// Helper for getting a default channel mask from channels
62-
uint32_t __cdecl GetDefaultChannelMask(int channels) noexcept;
73+
DIRECTX_TOOLKIT_API uint32_t __cdecl GetDefaultChannelMask(int channels) noexcept;
6374

6475

6576
// Helpers for creating various wave format structures

CMakeLists.txt

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,14 @@ project (DirectXTK
1515
HOMEPAGE_URL "https://go.microsoft.com/fwlink/?LinkId=248929"
1616
LANGUAGES CXX)
1717

18+
if(DEFINED XBOX_CONSOLE_TARGET)
19+
set(CMAKE_CXX_STANDARD_LIBRARIES "")
20+
endif()
21+
1822
option(BUILD_TOOLS "Build XWBTool" ON)
1923

24+
option(BUILD_SHARED_LIBS "Build DirectXTK as a shared library" OFF)
25+
2026
option(BUILD_XAUDIO_WIN10 "Build for XAudio 2.9" OFF)
2127
option(BUILD_XAUDIO_WIN8 "Build for XAudio 2.8" ON)
2228
option(BUILD_XAUDIO_REDIST "Build for XAudio2Redist" OFF)
@@ -245,7 +251,28 @@ if(NOT USE_PREBUILT_SHADERS)
245251
USES_TERMINAL)
246252
endif()
247253

248-
add_library(${PROJECT_NAME} STATIC ${LIBRARY_SOURCES} ${LIBRARY_HEADERS})
254+
if(WIN32 AND BUILD_SHARED_LIBS)
255+
message(STATUS "Build library as a DLL")
256+
257+
configure_file(
258+
"${CMAKE_CURRENT_SOURCE_DIR}/build/DirectXTK.rc.in"
259+
"${CMAKE_CURRENT_BINARY_DIR}/DirectXTK.rc" @ONLY)
260+
261+
add_library(${PROJECT_NAME} SHARED ${LIBRARY_SOURCES} ${LIBRARY_HEADERS} "${CMAKE_CURRENT_BINARY_DIR}/DirectXTK.rc")
262+
263+
target_compile_definitions(${PROJECT_NAME} PRIVATE DIRECTX_TOOLKIT_EXPORT)
264+
target_compile_definitions(${PROJECT_NAME} INTERFACE DIRECTX_TOOLKIT_IMPORT)
265+
266+
if(XBOX_CONSOLE_TARGET MATCHES "durango")
267+
target_link_libraries(${PROJECT_NAME} PRIVATE kernelx.lib combase.lib d3d12_x.lib xi.lib)
268+
endif()
269+
270+
if(MINGW)
271+
target_link_libraries(${PROJECT_NAME} PRIVATE xinput1_4.lib)
272+
endif()
273+
else()
274+
add_library(${PROJECT_NAME} ${LIBRARY_SOURCES} ${LIBRARY_HEADERS})
275+
endif()
249276

250277
target_include_directories(${PROJECT_NAME} PRIVATE ${COMPILED_SHADERS} Src)
251278

@@ -431,10 +458,18 @@ if(CMAKE_CXX_COMPILER_ID MATCHES "Clang|IntelLLVM")
431458
elseif(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
432459
foreach(t IN LISTS TOOL_EXES ITEMS ${PROJECT_NAME})
433460
target_compile_options(${t} PRIVATE "-Wno-ignored-attributes" "-Walloc-size-larger-than=4GB")
461+
462+
if(BUILD_SHARED_LIBS)
463+
target_compile_options(${t} PRIVATE "-Wno-attributes")
464+
endif()
434465
endforeach()
435466
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
436467
set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD 14)
437468
elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
469+
if(BUILD_SHARED_LIBS)
470+
target_compile_options(${PROJECT_NAME} PRIVATE "/wd4251" "/wd4275")
471+
endif()
472+
438473
if(ENABLE_CODE_ANALYSIS)
439474
message(STATUS "Building with Code Analysis (PREFIX)")
440475
foreach(t IN LISTS TOOL_EXES ITEMS ${PROJECT_NAME})

0 commit comments

Comments
 (0)