Skip to content

Commit 623fe47

Browse files
committed
Introduce mortar layer
1 parent e95f779 commit 623fe47

File tree

269 files changed

+49072
-2292
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

269 files changed

+49072
-2292
lines changed

.github/workflows/ci.yml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ jobs:
1111
name: 'clang-format'
1212
runs-on: ubuntu-latest
1313
steps:
14-
- uses: actions/checkout@v4
14+
- uses: actions/checkout@v6
1515
- name: Run clang-format
1616
run: |
17-
find CONFIG LEGO1 ISLE miniwin -iname '*.h' -o -iname '*.cpp' | xargs \
17+
find CONFIG LEGO1 ISLE miniwin mortar -iname '*.h' -o -iname '*.cpp' | xargs \
1818
pipx run "clang-format>=17,<18" \
1919
--style=file \
2020
-i
@@ -132,7 +132,7 @@ jobs:
132132
echo "$VITASDK/bin" >> $GITHUB_PATH
133133
./install-all.sh
134134
135-
- uses: actions/checkout@v4
135+
- uses: actions/checkout@v6
136136

137137
- name: Checkout LFS
138138
if: ${{ matrix.build-assets }}
@@ -197,7 +197,7 @@ jobs:
197197
success=0
198198
max_tries=10
199199
for i in $(seq $max_tries); do
200-
cpack . && success=1
200+
cpack . -C Release && success=1
201201
if test $success = 1; then
202202
break
203203
fi
@@ -296,7 +296,7 @@ jobs:
296296
options: --privileged
297297

298298
steps:
299-
- uses: actions/checkout@v4
299+
- uses: actions/checkout@v6
300300

301301
- name: Build Flatpak
302302
uses: flatpak/flatpak-github-actions/flatpak-builder@v6
@@ -310,7 +310,7 @@ jobs:
310310
runs-on: ubuntu-latest
311311

312312
steps:
313-
- uses: actions/checkout@v4
313+
- uses: actions/checkout@v6
314314

315315
- name: Install LLVM and Clang
316316
uses: KyleMayes/install-llvm-action@v1
@@ -360,7 +360,7 @@ jobs:
360360
merge-multiple: true
361361

362362
- name: Checkout uploadtool
363-
uses: actions/checkout@v4
363+
uses: actions/checkout@v6
364364
with:
365365
repository: 'probonopd/uploadtool'
366366
path: 'uploadtool'

.github/workflows/docker.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ jobs:
2222

2323
steps:
2424
- name: Checkout repository
25-
uses: actions/checkout@v4
25+
uses: actions/checkout@v6
2626

2727
- name: Log in to the Container registry
2828
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1

CMakeLists.txt

Lines changed: 146 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,19 @@ set(CMAKE_CXX_STANDARD 17)
3838
set(CMAKE_CXX_STANDARD_REQUIRED ON)
3939
set(CMAKE_CXX_EXTENSIONS OFF)
4040

41+
set(ISLE_MORTAR_SDL3_DEFAULT ON)
42+
set(ISLE_MORTAR_SDL3_DYNAMIC_AVAILABLE ON)
43+
if(ANDROID OR IOS OR EMSCRIPTEN OR NINTENDO_3DS OR NX OR VITA OR XBOXONE OR CMAKE_SYSTEM_NAME MATCHES "NintendoSwitch")
44+
set(ISLE_MORTAR_SDL3_DYNAMIC_AVAILABLE OFF)
45+
endif()
46+
option(ISLE_MORTAR_SDL3 "Mortar SDL3 backend" ${ISLE_MORTAR_SDL3_DEFAULT})
47+
cmake_dependent_option(ISLE_MORTAR_SDL3_DYNAMIC "Mortar dynamic SDL3 backend" ON "ISLE_MORTAR_SDL3;${ISLE_MORTAR_SDL3_DYNAMIC_AVAILABLE}" OFF)
48+
4149
if (NOT MINGW)
4250
set(NOT_MINGW ON)
4351
else()
4452
set(NOT_MINGW OFF)
45-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static -static-libgcc -static-libstdc++")
53+
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-static -static-libgcc -static-libstdc++")
4654
endif()
4755

4856
find_program(SDL_SHADERCROSS_BIN NAMES "shadercross")
@@ -76,52 +84,54 @@ add_library(Isle::iniparser INTERFACE IMPORTED)
7684

7785
if (DOWNLOAD_DEPENDENCIES)
7886
# FetchContent downloads and configures dependencies
79-
message(STATUS "Fetching SDL3 and iniparser. This might take a while...")
8087
include(FetchContent)
81-
82-
if(ANDROID)
83-
# Built by Gradle
84-
find_package(SDL3 REQUIRED CONFIG COMPONENTS Shared)
85-
else()
86-
if (WINDOWS_STORE)
87-
FetchContent_Declare(
88-
SDL3
89-
GIT_REPOSITORY "https://github.com/Helloyunho/SDL3-uwp.git"
90-
GIT_TAG "main"
91-
EXCLUDE_FROM_ALL
92-
)
93-
elseif (NINTENDO_SWITCH)
94-
FetchContent_Declare(
95-
SDL3
96-
# Official repo missing Threads support?
97-
#GIT_REPOSITORY "https://github.com/devkitPro/SDL.git"
98-
#GIT_TAG "switch-sdl-3.2"
99-
#GIT_REPOSITORY "https://github.com/vs49688/SDL.git"
100-
GIT_REPOSITORY "https://github.com/SnepOMatic/SDL3-Switch.git"
101-
GIT_TAG "switch-sdl-3.2.14"
102-
EXCLUDE_FROM_ALL
103-
)
104-
set(CMAKE_DISABLE_PRECOMPILE_HEADERS ON CACHE BOOL "Disable PCH globally" FORCE)
105-
elseif (EMSCRIPTEN)
106-
FetchContent_Declare(
107-
SDL3
108-
GIT_REPOSITORY "https://github.com/libsdl-org/SDL.git"
109-
GIT_TAG "release-3.2.28"
110-
UPDATE_DISCONNECTED TRUE
111-
EXCLUDE_FROM_ALL
112-
)
88+
if(ISLE_MORTAR_SDL3)
89+
if(ANDROID)
90+
# Built by Gradle
91+
find_package(SDL3 REQUIRED CONFIG COMPONENTS Shared)
11392
else()
114-
FetchContent_Declare(
115-
SDL3
116-
GIT_REPOSITORY "https://github.com/libsdl-org/SDL.git"
117-
GIT_TAG "main"
118-
UPDATE_DISCONNECTED TRUE
119-
EXCLUDE_FROM_ALL
120-
)
93+
message(STATUS "Fetching SDL3. This might take a while...")
94+
if (WINDOWS_STORE)
95+
FetchContent_Declare(
96+
SDL3
97+
GIT_REPOSITORY "https://github.com/Helloyunho/SDL3-uwp.git"
98+
GIT_TAG "main"
99+
EXCLUDE_FROM_ALL
100+
)
101+
elseif (NINTENDO_SWITCH)
102+
FetchContent_Declare(
103+
SDL3
104+
# Official repo missing Threads support?
105+
#GIT_REPOSITORY "https://github.com/devkitPro/SDL.git"
106+
#GIT_TAG "switch-sdl-3.2"
107+
#GIT_REPOSITORY "https://github.com/vs49688/SDL.git"
108+
GIT_REPOSITORY "https://github.com/SnepOMatic/SDL3-Switch.git"
109+
GIT_TAG "switch-sdl-3.2.14"
110+
EXCLUDE_FROM_ALL
111+
)
112+
set(CMAKE_DISABLE_PRECOMPILE_HEADERS ON CACHE BOOL "Disable PCH globally" FORCE)
113+
elseif (EMSCRIPTEN)
114+
FetchContent_Declare(
115+
SDL3
116+
GIT_REPOSITORY "https://github.com/libsdl-org/SDL.git"
117+
GIT_TAG "release-3.2.28"
118+
UPDATE_DISCONNECTED TRUE
119+
EXCLUDE_FROM_ALL
120+
)
121+
else()
122+
FetchContent_Declare(
123+
SDL3
124+
GIT_REPOSITORY "https://github.com/libsdl-org/SDL.git"
125+
GIT_TAG "main"
126+
UPDATE_DISCONNECTED TRUE
127+
EXCLUDE_FROM_ALL
128+
)
129+
endif()
130+
FetchContent_MakeAvailable(SDL3)
121131
endif()
122-
FetchContent_MakeAvailable(SDL3)
123132
endif()
124133

134+
message(STATUS "Fetching iniparser. This might take a while...")
125135
FetchContent_Declare(
126136
iniparser
127137
GIT_REPOSITORY "https://gitlab.com/iniparser/iniparser.git"
@@ -136,10 +146,12 @@ if (DOWNLOAD_DEPENDENCIES)
136146
target_link_libraries(Isle::iniparser INTERFACE iniparser-static)
137147
endblock()
138148
else()
139-
# find_package looks for already-installed system packages.
140-
# Configure with `-DCMAKE_PREFIX_PATH="/path/to/package1;/path/to/package2"`
141-
# to add search paths.
142-
find_package(SDL3 CONFIG REQUIRED)
149+
if(ISLE_MORTAR_SDL3)
150+
# find_package looks for already-installed system packages.
151+
# Configure with `-DCMAKE_PREFIX_PATH="/path/to/package1;/path/to/package2"`
152+
# to add search paths.
153+
find_package(SDL3 CONFIG REQUIRED)
154+
endif()
143155

144156
find_package(iniparser REQUIRED CONFIG)
145157
if(TARGET iniparser-shared)
@@ -219,8 +231,7 @@ target_include_directories(lego1 PUBLIC "$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/L
219231
target_include_directories(lego1 PUBLIC "$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/LEGO1/lego/sources>")
220232
target_include_directories(lego1 PUBLIC "$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/LEGO1/lego/legoomni/include>")
221233
target_include_directories(lego1 PUBLIC "$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/LEGO1/lego/legoomni/include/actions>")
222-
target_link_libraries(lego1 PRIVATE SDL3::SDL3)
223-
target_link_libraries(lego1 PUBLIC SDL3::Headers)
234+
target_link_libraries(lego1 PUBLIC mortar::headers)
224235
target_link_libraries(lego1 PRIVATE $<$<BOOL:${ISLE_USE_DX5}>:DirectX5::DirectX5>)
225236
# Allow unconditional include of miniwin/miniwind3d.h
226237
target_link_libraries(lego1 PRIVATE miniwin-headers)
@@ -569,8 +580,8 @@ if (ISLE_BUILD_APP)
569580
# Use internal DirectX 5 if required
570581
target_link_libraries(isle PRIVATE $<$<BOOL:${ISLE_USE_DX5}>:DirectX5::DirectX5>)
571582

572-
# Link SDL and iniparser
573-
target_link_libraries(isle PRIVATE SDL3::SDL3 Isle::iniparser)
583+
# Link mortar and iniparser
584+
target_link_libraries(isle PRIVATE Isle::iniparser)
574585

575586
# Allow unconditional include of miniwin/miniwindevice.h
576587
target_link_libraries(isle PRIVATE miniwin-headers)
@@ -677,6 +688,7 @@ if (ISLE_BUILD_CONFIG)
677688
CONFIG/qt/res/config.qrc
678689
)
679690
target_link_libraries(isle-config PRIVATE Qt6::Core Qt6::Widgets)
691+
target_link_libraries(isle-config PRIVATE mortar::headers mortar::embed)
680692
set_property(TARGET isle-config PROPERTY AUTOMOC ON)
681693
set_property(TARGET isle-config PROPERTY AUTORCC ON)
682694
set_property(TARGET isle-config PROPERTY AUTOUIC ON)
@@ -689,7 +701,7 @@ if (ISLE_BUILD_CONFIG)
689701
target_link_libraries(isle-config PRIVATE DirectX5::DirectX5)
690702
endif()
691703
target_compile_definitions(isle-config PRIVATE DIRECT3D_VERSION=0x500)
692-
target_link_libraries(isle-config PRIVATE SDL3::SDL3 Isle::iniparser)
704+
target_link_libraries(isle-config PRIVATE Isle::iniparser)
693705
if (NOT ISLE_MINIWIN)
694706
target_link_libraries(isle-config PRIVATE ddraw dxguid)
695707
endif()
@@ -727,6 +739,89 @@ if (ISLE_MINIWIN)
727739
set_property(TARGET ${isle_targets} APPEND PROPERTY LINK_LIBRARIES "miniwin")
728740
endif()
729741

742+
add_library(mortar_headers INTERFACE)
743+
add_library(mortar::headers ALIAS mortar_headers)
744+
target_compile_definitions(mortar_headers INTERFACE $<$<BOOL:${BUILD_SHARED_LIBS}>:MORTAR_DLL>)
745+
target_include_directories(mortar_headers INTERFACE "$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/mortar/include>")
746+
747+
# Link with mortar::declare_embedded to declare mortar is embedded alongside it
748+
add_library(mortar_declare_embedded INTERFACE)
749+
add_library(mortar::declare_embedded ALIAS mortar_declare_embedded)
750+
target_sources(mortar_declare_embedded INTERFACE $<TARGET_OBJECTS:mortar>)
751+
target_compile_definitions(mortar_declare_embedded INTERFACE BUILDING_MORTAR)
752+
753+
# Link with mortar::embed to embed mortar inside of it
754+
add_library(mortar_embed INTERFACE)
755+
add_library(mortar::embed ALIAS mortar_embed)
756+
target_sources(mortar_embed INTERFACE $<TARGET_OBJECTS:mortar>)
757+
target_link_libraries(mortar_embed INTERFACE mortar::declare_embedded)
758+
759+
add_library(mortar STATIC
760+
mortar/include/mortar/mortar.h
761+
mortar/src/mortar.cpp
762+
)
763+
target_compile_definitions(mortar PRIVATE BUILDING_MORTAR)
764+
target_link_libraries(mortar PUBLIC mortar::headers)
765+
set_property(TARGET mortar PROPERTY C_VISIBILITY_PRESET "hidden")
766+
set_property(TARGET mortar PROPERTY CXX_VISIBILITY_PRESET "hidden")
767+
list(APPEND isle_targets mortar)
768+
769+
if(ISLE_MORTAR_SDL3)
770+
set(MORTAR_SDL3_SOURCES
771+
mortar/src/sdl3/sdl3_audio.cpp
772+
mortar/src/sdl3/sdl3_cpuinfo.cpp
773+
mortar/src/sdl3/sdl3_error.cpp
774+
mortar/src/sdl3/sdl3_events.cpp
775+
mortar/src/sdl3/sdl3_filesystem.cpp
776+
mortar/src/sdl3/sdl3_gamepad.cpp
777+
mortar/src/sdl3/sdl3_haptic.cpp
778+
mortar/src/sdl3/sdl3_init.cpp
779+
mortar/src/sdl3/sdl3_iostream.cpp
780+
mortar/src/sdl3/sdl3_joystick.cpp
781+
mortar/src/sdl3/sdl3_keyboard.cpp
782+
mortar/src/sdl3/sdl3_keycode.cpp
783+
mortar/src/sdl3/sdl3_log.cpp
784+
mortar/src/sdl3/sdl3_main.cpp
785+
mortar/src/sdl3/sdl3_messagebox.cpp
786+
mortar/src/sdl3/sdl3_mouse.cpp
787+
mortar/src/sdl3/sdl3_mutex.cpp
788+
mortar/src/sdl3/sdl3_pixels.cpp
789+
mortar/src/sdl3/sdl3_process.cpp
790+
mortar/src/sdl3/sdl3_rect.cpp
791+
mortar/src/sdl3/sdl3_render.cpp
792+
mortar/src/sdl3/sdl3_stdinc.cpp
793+
mortar/src/sdl3/sdl3_surface.cpp
794+
mortar/src/sdl3/sdl3_system.cpp
795+
mortar/src/sdl3/sdl3_thread.cpp
796+
mortar/src/sdl3/sdl3_timer.cpp
797+
mortar/src/sdl3/sdl3_version.cpp
798+
mortar/src/sdl3/sdl3_video.cpp
799+
)
800+
target_sources(mortar PRIVATE ${MORTAR_SDL3_SOURCES})
801+
get_property(sdl3_alias TARGET SDL3::SDL3 PROPERTY ALIASED_TARGET)
802+
add_dependencies(mortar "SDL3::SDL3")
803+
set_property(SOURCE ${MORTAR_SDL3_SOURCES} APPEND PROPERTY INCLUDE_DIRECTORIES $<TARGET_PROPERTY:SDL3::Headers,INTERFACE_INCLUDE_DIRECTORIES>)
804+
if(ISLE_MORTAR_SDL3_DYNAMIC)
805+
target_compile_definitions(mortar_headers INTERFACE SDL3_DYNAMIC_LOAD)
806+
set_property(TARGET lego1 APPEND PROPERTY BUILD_RPATH "$<TARGET_FILE_DIR:SDL3::SDL3>")
807+
if(TARGET isle)
808+
set_property(TARGET isle APPEND PROPERTY BUILD_RPATH "$<TARGET_FILE_DIR:SDL3::SDL3>")
809+
endif()
810+
if(TARGET isle-config)
811+
set_property(TARGET isle-config APPEND PROPERTY BUILD_RPATH "$<TARGET_FILE_DIR:SDL3::SDL3>")
812+
endif()
813+
else()
814+
target_link_libraries(mortar PRIVATE SDL3::Headers)
815+
target_link_libraries(mortar_embed INTERFACE SDL3::SDL3)
816+
endif()
817+
endif()
818+
target_link_libraries(lego1 PRIVATE mortar_headers mortar::embed)
819+
if(NOT BUILD_SHARED_LIBS)
820+
if(TARGET isle)
821+
target_link_libraries(isle PRIVATE mortar::embed)
822+
endif()
823+
endif()
824+
730825
if (MSVC)
731826
if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "15")
732827
set_property(TARGET ${isle_targets} APPEND PROPERTY COMPILE_DEFINITIONS "_CRT_SECURE_NO_WARNINGS")

CONFIG/qt/MainDlg.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@
1313
#include <QKeyEvent>
1414
#include <QMessageBox>
1515
#include <QProcess>
16-
#include <SDL3/SDL.h>
1716
#include <cmath>
17+
#include <mortar/mortar.h>
1818
#include <mxdirectx/legodxinfo.h>
1919
#include <ui_maindialog.h>
2020

@@ -182,7 +182,7 @@ bool CMainDialog::OnInitDialog()
182182
m_ui->exFullResComboBox->clear();
183183

184184
int displayModeCount;
185-
displayModes = SDL_GetFullscreenDisplayModes(SDL_GetPrimaryDisplay(), &displayModeCount);
185+
displayModes = MORTAR_GetFullscreenDisplayModes(MORTAR_GetPrimaryDisplay(), &displayModeCount);
186186

187187
for (int i = 0; i < displayModeCount; ++i) {
188188
QString mode =

CONFIG/qt/MainDlg.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
#include <QDialog>
99
#include <QFileDialog>
10-
#include <SDL3/SDL.h>
10+
#include <mortar/mortar.h>
1111

1212
namespace Ui
1313
{
@@ -31,7 +31,7 @@ class CMainDialog : public QDialog {
3131
bool m_advanced = false;
3232
QStringList assetPaths = QStringList();
3333
Ui::MainDialog* m_ui = nullptr;
34-
SDL_DisplayMode** displayModes;
34+
MORTAR_DisplayMode** displayModes;
3535

3636
void keyReleaseEvent(QKeyEvent* event) override;
3737
bool OnInitDialog();

0 commit comments

Comments
 (0)