Ver código fonte

lib: replace SDL usage to Boost one

It is safer and header-only, and can be removed after C++23 is accepted.
There is no need for SDL in non-GUI.
Konstantin 2 anos atrás
pai
commit
cffdabf48e
4 arquivos alterados com 18 adições e 10 exclusões
  1. 12 0
      CMakeLists.txt
  2. 0 1
      cmake_modules/VCMI_lib.cmake
  3. 1 3
      lib/filesystem/CBinaryReader.cpp
  4. 5 6
      lib/vcmi_endian.h

+ 12 - 0
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()

+ 0 - 1
cmake_modules/VCMI_lib.cmake

@@ -475,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)

+ 1 - 3
lib/filesystem/CBinaryReader.cpp

@@ -10,14 +10,12 @@
 #include "StdInc.h"
 #include "CBinaryReader.h"
 
-//FIXME:library file depends on SDL - make cause troubles
-#include <SDL_endian.h>
 #include "CInputStream.h"
 #include "../CGeneralTextHandler.h"
 
 VCMI_LIB_NAMESPACE_BEGIN
 
-#if SDL_BYTEORDER == SDL_BIG_ENDIAN
+#ifdef VCMI_ENDIAN_BIG
 template <typename CData>
 CData readLE(CData data)
 {

+ 5 - 6
lib/vcmi_endian.h

@@ -9,8 +9,7 @@
  */
 #pragma once
 
-//FIXME:library file depends on SDL - may cause troubles
-#include <SDL_endian.h>
+#include <boost/endian/conversion.hpp> //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<const ui16 *>(p)))
-#define read_le_u32(p) (SDL_SwapLE32(* reinterpret_cast<const ui32 *>(p)))
+#define read_le_u16(p) (boost::endian::native_to_little(* reinterpret_cast<const ui16 *>(p)))
+#define read_le_u32(p) (boost::endian::native_to_little(* reinterpret_cast<const ui32 *>(p)))
 
 #define PACKED_STRUCT_BEGIN
 #define PACKED_STRUCT_END