Skip to content

Commit 3074be8

Browse files
authored
Merge pull request #1 from lambda-pixel/sdl
Support for Linux
2 parents 62c79ee + ad8d2e9 commit 3074be8

36 files changed

+1590
-660
lines changed

.gitmodules

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
11
[submodule "3rdparty/imgui/imgui"]
22
path = 3rdparty/imgui/imgui
33
url = https://github.com/ocornut/imgui.git
4+
[submodule "3rdparty/SDL_mixer"]
5+
path = 3rdparty/SDL_mixer
6+
url = https://github.com/libsdl-org/SDL_mixer.git
7+
[submodule "3rdparty/SDL"]
8+
path = 3rdparty/SDL
9+
url = https://github.com/libsdl-org/SDL.git

3rdparty/CMakeLists.txt

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,14 @@
1-
add_subdirectory(imgui)
1+
add_subdirectory(imgui)
2+
3+
if (USE_SDL OR USE_SDL_MIXER)
4+
if (WIN32)
5+
set(SDL_SHARED ON CACHE BOOL "" FORCE)
6+
set(SDL_STATIC ON CACHE BOOL "" FORCE)
7+
endif()
8+
9+
add_subdirectory(SDL)
10+
endif()
11+
12+
if (USE_SDL_MIXER)
13+
add_subdirectory(SDL_mixer)
14+
endif()

3rdparty/SDL

Submodule SDL added at f3815ed

3rdparty/SDL_mixer

Submodule SDL_mixer added at 93685a9

3rdparty/imgui/CMakeLists.txt

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,31 @@
11
find_package(Vulkan REQUIRED)
22

3-
add_library(imgui
4-
imgui/imgui.cpp
5-
imgui/imgui_draw.cpp
6-
imgui/imgui_tables.cpp
7-
imgui/imgui_widgets.cpp
8-
imgui/backends/imgui_impl_win32.cpp
9-
imgui/backends/imgui_impl_vulkan.cpp
10-
#imgui/imgui_demo.cpp
11-
)
3+
if (USE_SDL)
4+
add_library(imgui
5+
imgui/imgui.cpp
6+
imgui/imgui_draw.cpp
7+
imgui/imgui_tables.cpp
8+
imgui/imgui_widgets.cpp
9+
imgui/backends/imgui_impl_sdl3.cpp
10+
imgui/backends/imgui_impl_vulkan.cpp
11+
#imgui/imgui_demo.cpp
12+
)
13+
else()
14+
add_library(imgui
15+
imgui/imgui.cpp
16+
imgui/imgui_draw.cpp
17+
imgui/imgui_tables.cpp
18+
imgui/imgui_widgets.cpp
19+
imgui/backends/imgui_impl_win32.cpp
20+
imgui/backends/imgui_impl_vulkan.cpp
21+
#imgui/imgui_demo.cpp
22+
)
23+
endif()
1224

1325
target_include_directories(imgui PUBLIC imgui)
1426

15-
target_link_libraries(imgui PUBLIC Vulkan::Vulkan)
27+
target_link_libraries(imgui PUBLIC Vulkan::Vulkan)
28+
29+
if (USE_SDL)
30+
target_link_libraries(imgui PUBLIC SDL3::SDL3)
31+
endif()

CMakeLists.txt

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,42 @@ set(CMAKE_CXX_STANDARD_REQUIRED On)
77

88
option(BUILD_MEDICORP "Build with MediCorp support" OFF)
99

10+
# On Linux, we always use SDL Mixer
11+
if (WIN32)
12+
option(USE_SDL "Use SDL library for window management backend" OFF)
13+
option(USE_SDL_MIXER "Use SDL Mixer audio backend" OFF)
14+
else()
15+
set(USE_SDL ON CACHE BOOL "Use SDL library for window management backend" FORCE)
16+
set(USE_SDL_MIXER ON CACHE BOOL "Use SDL Mixer audio backend" FORCE)
17+
endif()
18+
1019
include(GNUInstallDirs)
1120

1221
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR})
1322
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}/plugins)
1423
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
24+
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
25+
26+
# Configuration
27+
configure_file(cmake/config.h.in config.h @ONLY)
1528

29+
if (BUILD_MEDICORP)
30+
message(STATUS "Building with MediCorp support")
31+
endif()
32+
33+
# Build
34+
add_subdirectory(3rdparty)
35+
add_subdirectory(assets)
36+
add_subdirectory(plugins)
37+
add_subdirectory(src)
38+
39+
# CPack
1640
set(CPACK_PACKAGE_NAME "EDVoice")
1741
set(CPACK_PACKAGE_VENDOR "Siegfried Origin")
1842
set(CPACK_INCLUDE_TOPLEVEL_DIRECTORY OFF)
1943
set(CPACK_GENERATOR "ZIP")
20-
21-
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
44+
# Remove source, can be problematic on WIN32 with SDL_Mixer
45+
set(CPACK_SOURCE_GENERATOR "")
2246

2347
execute_process(
2448
COMMAND git describe --tags --abbrev=0
@@ -33,8 +57,3 @@ else()
3357
endif()
3458

3559
include(CPack)
36-
37-
add_subdirectory(3rdparty)
38-
add_subdirectory(assets)
39-
add_subdirectory(plugins)
40-
add_subdirectory(src)

cmake/config.h.in

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
#cmakedefine USE_SDL_MIXER
2+
#cmakedefine USE_SDL
3+
#cmakedefine BUILD_MEDICORP

plugins/include/PluginInterface.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,10 @@ typedef struct {
9999
} PluginCallbacks;
100100

101101
// Each plugin must implement these functions to register its callbacks
102+
#ifdef _WIN32
102103
__declspec(dllexport) void registerPlugin(PluginCallbacks* callbacks);
103104
__declspec(dllexport) void unregisterPlugin();
105+
#endif
104106

105107
#ifdef __cplusplus
106108
}
@@ -110,6 +112,7 @@ __declspec(dllexport) void unregisterPlugin();
110112
#include <cstring>
111113
#endif
112114

115+
#ifdef _WIN32
113116
// Macro to define plugin registration boilerplate for EventLogger
114117
#define DECLARE_PLUGIN(ClassName, _name, _versionStr, _author) \
115118
static void loadConfig(const char* filepath, void* ctx) { \
@@ -141,3 +144,7 @@ __declspec(dllexport) void unregisterPlugin();
141144
delete g_plugin; \
142145
} \
143146
}
147+
#else
148+
// TODO Linux
149+
#define DECLARE_PLUGIN(ClassName, _name, _versionStr, _author)
150+
#endif

src/CMakeLists.txt

Lines changed: 33 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -21,36 +21,50 @@ set(EDVOICE_SOURCES_GUI
2121
GUI/Vulkan/VkAdapter.cpp
2222
GUI/Vulkan/Swapchain.cpp
2323
GUI/Vulkan/VkUtil.cpp
24+
25+
GUI/WindowSystem.cpp
2426
)
2527

26-
# GUI version
27-
add_executable(EDVoice WIN32 ${EDVOICE_SOURCES} ${EDVOICE_SOURCES_GUI})
28+
if (WIN32)
29+
# GUI version
30+
add_executable(EDVoice WIN32 ${EDVOICE_SOURCES} ${EDVOICE_SOURCES_GUI})
31+
32+
# CLI version without GUI
33+
add_executable(EDVoice-cli WIN32 ${EDVOICE_SOURCES})
34+
35+
target_include_directories(EDVoice-cli PRIVATE ../3rdparty)
36+
target_include_directories(EDVoice-cli PRIVATE ../plugins/include)
37+
target_include_directories(EDVoice-cli PRIVATE ${CMAKE_BINARY_DIR})
38+
target_compile_definitions(EDVoice-cli PRIVATE UNICODE _UNICODE)
39+
40+
install(TARGETS EDVoice-cli DESTINATION .)
41+
else()
42+
# GUI version
43+
add_executable(EDVoice ${EDVOICE_SOURCES} ${EDVOICE_SOURCES_GUI})
44+
endif()
2845

2946
target_compile_definitions(EDVoice PRIVATE GUI_MODE)
3047

3148
target_include_directories(EDVoice PRIVATE ../3rdparty)
3249
target_include_directories(EDVoice PRIVATE ../plugins/include)
33-
34-
target_link_libraries(EDVoice PRIVATE imgui)
50+
target_include_directories(EDVoice PRIVATE ${CMAKE_BINARY_DIR})
3551
target_compile_definitions(EDVoice PRIVATE UNICODE _UNICODE)
52+
target_link_libraries(EDVoice PRIVATE imgui)
3653

37-
# CLI version without GUI
38-
add_executable(EDVoice-cli WIN32 ${EDVOICE_SOURCES})
39-
40-
target_include_directories(EDVoice-cli PRIVATE ../3rdparty)
41-
target_include_directories(EDVoice-cli PRIVATE ../plugins/include)
54+
if (USE_SDL OR USE_SDL_MIXER)
55+
target_link_libraries(EDVoice PRIVATE SDL3::SDL3)
56+
endif()
4257

43-
target_compile_definitions(EDVoice-cli PRIVATE UNICODE _UNICODE)
58+
if (USE_SDL_MIXER)
59+
target_link_libraries(EDVoice PRIVATE SDL3_mixer::SDL3_mixer)
60+
endif()
4461

45-
if (BUILD_MEDICORP)
46-
message(STATUS "Building with MediCorp support")
62+
install(TARGETS EDVoice DESTINATION .)
4763

48-
target_compile_definitions(EDVoice PRIVATE BUILD_MEDICORP)
49-
target_compile_definitions(EDVoice-cli PRIVATE BUILD_MEDICORP)
64+
if (WIN32 AND (USE_SDL OR USE_SDL_MIXER))
65+
install(FILES $<TARGET_FILE:SDL3::SDL3-shared> DESTINATION .)
5066
endif()
5167

52-
# target_compile_definitions(EDVoice PRIVATE BUILD_MEDICORP)
53-
# target_compile_definitions(EDVoice PRIVATE VULKAN_DEBUG_LAYER)
54-
55-
install(TARGETS EDVoice EDVoice-cli
56-
RUNTIME DESTINATION .)
68+
if (WIN32 AND USE_SDL_MIXER)
69+
install(FILES $<TARGET_FILE:SDL3_mixer::SDL3_mixer-shared> DESTINATION .)
70+
endif()

0 commit comments

Comments
 (0)