diff --git a/CMakeLists.txt b/CMakeLists.txt
index aec633ff8..423f47817 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -173,6 +173,18 @@ set(CMAKE_XCODE_ATTRIBUTE_MARKETING_VERSION ${APP_SHORT_VERSION})
set(CMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH NO)
set(CMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH[variant=Debug] YES)
+#Check for endian
+if(${CMAKE_VERSION} VERSION_LESS "3.20.0")
+ include(TestBigEndian)
+ test_big_endian(VCMI_ENDIAN_BIG)
+ if(VCMI_ENDIAN_BIG)
+ add_definitions(-DVCMI_ENDIAN_BIG)
+ endif()
+elseif(${CMAKE_CXX_BYTE_ORDER} EQUAL "BIG_ENDIAN")
+ add_definitions(-DVCMI_ENDIAN_BIG)
+endif()
+
+
if(ENABLE_LAUNCHER)
add_definitions(-DENABLE_LAUNCHER)
endif()
diff --git a/client/CMT.cpp b/client/CMT.cpp
index a7566075e..e11c76b17 100644
--- a/client/CMT.cpp
+++ b/client/CMT.cpp
@@ -839,7 +839,7 @@ static bool recreateWindow(int w, int h, int bpp, bool fullscreen, int displayIn
}
- #if (SDL_BYTEORDER == SDL_BIG_ENDIAN)
+ #ifdef VCMI_ENDIAN_BIG
int bmask = 0xff000000;
int gmask = 0x00ff0000;
int rmask = 0x0000ff00;
diff --git a/client/render/CBitmapHandler.cpp b/client/render/CBitmapHandler.cpp
index 1d096fe08..c18612e8f 100644
--- a/client/render/CBitmapHandler.cpp
+++ b/client/render/CBitmapHandler.cpp
@@ -81,7 +81,7 @@ SDL_Surface * BitmapHandler::loadH3PCX(ui8 * pcx, size_t size)
}
else
{
-#if (SDL_BYTEORDER == SDL_BIG_ENDIAN)
+#ifdef VCMI_ENDIAN_BIG
int bmask = 0xff0000;
int gmask = 0x00ff00;
int rmask = 0x0000ff;
diff --git a/client/renderSDL/SDL_PixelAccess.h b/client/renderSDL/SDL_PixelAccess.h
index 6ddfc2e83..f61946ba9 100644
--- a/client/renderSDL/SDL_PixelAccess.h
+++ b/client/renderSDL/SDL_PixelAccess.h
@@ -68,7 +68,7 @@ namespace Channels
static channel_empty a;
};
-#if (SDL_BYTEORDER == SDL_BIG_ENDIAN)
+#ifdef VCMI_ENDIAN_BIG
template<>
struct px<4>
diff --git a/cmake_modules/VCMI_lib.cmake b/cmake_modules/VCMI_lib.cmake
index dfdb844f6..d9306edab 100644
--- a/cmake_modules/VCMI_lib.cmake
+++ b/cmake_modules/VCMI_lib.cmake
@@ -239,8 +239,6 @@ macro(add_main_lib TARGET_NAME LIBRARY_TYPE)
${MAIN_LIB_DIR}/../include/vcmi/Environment.h
${MAIN_LIB_DIR}/../include/vcmi/Services.h
- ${MAIN_LIB_DIR}/abilities/Ability.h
-
${MAIN_LIB_DIR}/battle/AccessibilityInfo.h
${MAIN_LIB_DIR}/battle/BattleAction.h
${MAIN_LIB_DIR}/battle/BattleAttackInfo.h
@@ -477,7 +475,6 @@ macro(add_main_lib TARGET_NAME LIBRARY_TYPE)
PUBLIC ${MAIN_LIB_DIR}/..
PUBLIC ${MAIN_LIB_DIR}/../include
PUBLIC ${MAIN_LIB_DIR}
- PRIVATE ${SDL2_INCLUDE_DIR}
)
if(WIN32)
diff --git a/lib/VCMI_lib.cbp b/lib/VCMI_lib.cbp
index 97d17da8d..bb73fdb73 100644
--- a/lib/VCMI_lib.cbp
+++ b/lib/VCMI_lib.cbp
@@ -281,7 +281,6 @@
-
diff --git a/lib/abilities/Ability.h b/lib/abilities/Ability.h
deleted file mode 100644
index 14bf3d54e..000000000
--- a/lib/abilities/Ability.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Ability.h, part of VCMI engine
- *
- * Authors: listed in file AUTHORS in main folder
- *
- * License: GNU General Public License v2.0 or later
- * Full text of license available in license.txt file, in main folder
- *
- */
-
-VCMI_LIB_NAMESPACE_BEGIN
-
-namespace abilities
-{
-
-class DLL_LINKAGE Ability
-{
-
-};
-
-}
-
-VCMI_LIB_NAMESPACE_END
diff --git a/lib/filesystem/CBinaryReader.cpp b/lib/filesystem/CBinaryReader.cpp
index a3c7fc706..7385a903d 100644
--- a/lib/filesystem/CBinaryReader.cpp
+++ b/lib/filesystem/CBinaryReader.cpp
@@ -10,14 +10,12 @@
#include "StdInc.h"
#include "CBinaryReader.h"
-//FIXME:library file depends on SDL - make cause troubles
-#include
#include "CInputStream.h"
#include "../CGeneralTextHandler.h"
VCMI_LIB_NAMESPACE_BEGIN
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
+#ifdef VCMI_ENDIAN_BIG
template
CData readLE(CData data)
{
diff --git a/lib/vcmi_endian.h b/lib/vcmi_endian.h
index 2686261f8..e270b8eec 100644
--- a/lib/vcmi_endian.h
+++ b/lib/vcmi_endian.h
@@ -9,8 +9,7 @@
*/
#pragma once
-//FIXME:library file depends on SDL - may cause troubles
-#include
+#include //FIXME: use std::byteswap in C++23
VCMI_LIB_NAMESPACE_BEGIN
@@ -45,15 +44,15 @@ static inline ui32 read_unaligned_u32(const void *p)
return v->val;
}
-#define read_le_u16(p) (SDL_SwapLE16(read_unaligned_u16(p)))
-#define read_le_u32(p) (SDL_SwapLE32(read_unaligned_u32(p)))
+#define read_le_u16(p) (boost::endian::native_to_little(read_unaligned_u16(p)))
+#define read_le_u32(p) (boost::endian::native_to_little(read_unaligned_u32(p)))
#else
#warning UB: unaligned memory access
-#define read_le_u16(p) (SDL_SwapLE16(* reinterpret_cast(p)))
-#define read_le_u32(p) (SDL_SwapLE32(* reinterpret_cast(p)))
+#define read_le_u16(p) (boost::endian::native_to_little(* reinterpret_cast(p)))
+#define read_le_u32(p) (boost::endian::native_to_little(* reinterpret_cast(p)))
#define PACKED_STRUCT_BEGIN
#define PACKED_STRUCT_END
diff --git a/mapeditor/Animation.cpp b/mapeditor/Animation.cpp
index b62415cdc..20632c9d0 100644
--- a/mapeditor/Animation.cpp
+++ b/mapeditor/Animation.cpp
@@ -15,6 +15,7 @@
#include "BitmapHandler.h"
+#include "../lib/vcmi_endian.h"
#include "../lib/filesystem/Filesystem.h"
#include "../lib/filesystem/ISimpleResourceLoader.h"
#include "../lib/JsonNode.h"
diff --git a/mapeditor/BitmapHandler.cpp b/mapeditor/BitmapHandler.cpp
index d1b9dd5ce..a3cecee14 100644
--- a/mapeditor/BitmapHandler.cpp
+++ b/mapeditor/BitmapHandler.cpp
@@ -14,6 +14,7 @@
#include "BitmapHandler.h"
#include "../lib/filesystem/Filesystem.h"
+#include "../lib/vcmi_endian.h"
#include
#include
diff --git a/mapeditor/BitmapHandler.h b/mapeditor/BitmapHandler.h
index ee2967e8a..48badd4a0 100644
--- a/mapeditor/BitmapHandler.h
+++ b/mapeditor/BitmapHandler.h
@@ -8,10 +8,6 @@
*
*/
#pragma once
-//code is copied from vcmiclient/CBitmapHandler.h with minimal changes
-
-#define read_le_u16(p) (* reinterpret_cast(p))
-#define read_le_u32(p) (* reinterpret_cast(p))
#include