Skip to content

Commit 8b1639e

Browse files
committed
Introduce mortar layer
1 parent 6f192a3 commit 8b1639e

File tree

269 files changed

+49068
-2287
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

+49068
-2287
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: 140 additions & 45 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,46 +84,48 @@ 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)
88+
if(ISLE_MORTAR_SDL3)
89+
if(ANDROID)
90+
# Built by Gradle
91+
find_package(SDL3 REQUIRED CONFIG COMPONENTS Shared)
10592
else()
106-
set(ISLE_SDL3_GIT_REPO "https://github.com/libsdl-org/SDL.git" CACHE STRING "The SDL3 git repo")
107-
set(ISLE_SDL3_GIT_TAG "main" CACHE STRING "The SDL3 git tag")
108-
FetchContent_Declare(
109-
SDL3
110-
GIT_REPOSITORY "${ISLE_SDL3_GIT_REPO}"
111-
GIT_TAG "${ISLE_SDL3_GIT_TAG}"
112-
UPDATE_DISCONNECTED TRUE
113-
EXCLUDE_FROM_ALL
114-
)
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+
else()
114+
set(ISLE_SDL3_GIT_REPO "https://github.com/libsdl-org/SDL.git" CACHE STRING "The SDL3 git repo")
115+
set(ISLE_SDL3_GIT_TAG "main" CACHE STRING "The SDL3 git tag")
116+
FetchContent_Declare(
117+
SDL3
118+
GIT_REPOSITORY "${ISLE_SDL3_GIT_REPO}"
119+
GIT_TAG "${ISLE_SDL3_GIT_TAG}"
120+
UPDATE_DISCONNECTED TRUE
121+
EXCLUDE_FROM_ALL
122+
)
123+
endif()
124+
FetchContent_MakeAvailable(SDL3)
115125
endif()
116-
FetchContent_MakeAvailable(SDL3)
117126
endif()
118127

128+
message(STATUS "Fetching iniparser. This might take a while...")
119129
FetchContent_Declare(
120130
iniparser
121131
GIT_REPOSITORY "https://gitlab.com/iniparser/iniparser.git"
@@ -130,10 +140,12 @@ if (DOWNLOAD_DEPENDENCIES)
130140
target_link_libraries(Isle::iniparser INTERFACE iniparser-static)
131141
endblock()
132142
else()
133-
# find_package looks for already-installed system packages.
134-
# Configure with `-DCMAKE_PREFIX_PATH="/path/to/package1;/path/to/package2"`
135-
# to add search paths.
136-
find_package(SDL3 CONFIG REQUIRED)
143+
if(ISLE_MORTAR_SDL3)
144+
# find_package looks for already-installed system packages.
145+
# Configure with `-DCMAKE_PREFIX_PATH="/path/to/package1;/path/to/package2"`
146+
# to add search paths.
147+
find_package(SDL3 CONFIG REQUIRED)
148+
endif()
137149

138150
find_package(iniparser REQUIRED CONFIG)
139151
if(TARGET iniparser-shared)
@@ -213,8 +225,7 @@ target_include_directories(lego1 PUBLIC "$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/L
213225
target_include_directories(lego1 PUBLIC "$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/LEGO1/lego/sources>")
214226
target_include_directories(lego1 PUBLIC "$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/LEGO1/lego/legoomni/include>")
215227
target_include_directories(lego1 PUBLIC "$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/LEGO1/lego/legoomni/include/actions>")
216-
target_link_libraries(lego1 PRIVATE SDL3::SDL3)
217-
target_link_libraries(lego1 PUBLIC SDL3::Headers)
228+
target_link_libraries(lego1 PUBLIC mortar::headers)
218229
target_link_libraries(lego1 PRIVATE $<$<BOOL:${ISLE_USE_DX5}>:DirectX5::DirectX5>)
219230
# Allow unconditional include of miniwin/miniwind3d.h
220231
target_link_libraries(lego1 PRIVATE miniwin-headers)
@@ -563,8 +574,8 @@ if (ISLE_BUILD_APP)
563574
# Use internal DirectX 5 if required
564575
target_link_libraries(isle PRIVATE $<$<BOOL:${ISLE_USE_DX5}>:DirectX5::DirectX5>)
565576

566-
# Link SDL and iniparser
567-
target_link_libraries(isle PRIVATE SDL3::SDL3 Isle::iniparser)
577+
# Link mortar and iniparser
578+
target_link_libraries(isle PRIVATE Isle::iniparser)
568579

569580
# Allow unconditional include of miniwin/miniwindevice.h
570581
target_link_libraries(isle PRIVATE miniwin-headers)
@@ -671,6 +682,7 @@ if (ISLE_BUILD_CONFIG)
671682
CONFIG/qt/res/config.qrc
672683
)
673684
target_link_libraries(isle-config PRIVATE Qt6::Core Qt6::Widgets)
685+
target_link_libraries(isle-config PRIVATE mortar::headers mortar::embed)
674686
set_property(TARGET isle-config PROPERTY AUTOMOC ON)
675687
set_property(TARGET isle-config PROPERTY AUTORCC ON)
676688
set_property(TARGET isle-config PROPERTY AUTOUIC ON)
@@ -683,7 +695,7 @@ if (ISLE_BUILD_CONFIG)
683695
target_link_libraries(isle-config PRIVATE DirectX5::DirectX5)
684696
endif()
685697
target_compile_definitions(isle-config PRIVATE DIRECT3D_VERSION=0x500)
686-
target_link_libraries(isle-config PRIVATE SDL3::SDL3 Isle::iniparser)
698+
target_link_libraries(isle-config PRIVATE Isle::iniparser)
687699
if (NOT ISLE_MINIWIN)
688700
target_link_libraries(isle-config PRIVATE ddraw dxguid)
689701
endif()
@@ -721,6 +733,89 @@ if (ISLE_MINIWIN)
721733
set_property(TARGET ${isle_targets} APPEND PROPERTY LINK_LIBRARIES "miniwin")
722734
endif()
723735

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