diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0ec9e7f --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/build* diff --git a/CMakeLists.txt b/CMakeLists.txt index c582660..8fda0cb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ -cmake_minimum_required(VERSION 2.6 FATAL_ERROR) -project(dhewm3) +cmake_minimum_required(VERSION 3.0 FATAL_ERROR) +project(dhewm3sdk) # TODO @@ -27,20 +27,10 @@ if(NOT COMMAND add_compile_options) endfunction() endif() -set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/sys/cmake") -set(CMAKE_SKIP_RPATH ON CACHE BOOL "Skip RPATH" FORCE) -set(DHEWM3BINARY "dhewm3") - -include(CheckCXXCompilerFlag) -include(GNUInstallDirs OPTIONAL RESULT_VARIABLE GNUINSTALLDIRS) - -option(CORE "Build the core" ON) option(BASE "Build the base game code" ON) option(D3XP "Build the d3xp game code" ON) -option(DEDICATED "Build the dedicated server" OFF) option(ONATIVE "Optimize for the host CPU" OFF) -option(SDL2 "Use SDL2 instead of SDL1.2" ON) if(NOT CMAKE_SYSTEM_PROCESSOR) message(FATAL_ERROR "No target CPU architecture set") @@ -74,74 +64,9 @@ if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "RelWithDebInfo") endif() -# precompiled libraries from the dhewm3-libs repo -if(DHEWM3LIBS) - if(CMAKE_CROSSCOMPILING) - set(CMAKE_FIND_ROOT_PATH ${DHEWM3LIBS}) - else() - set(ENV{CMAKE_PREFIX_PATH} ${DHEWM3LIBS}) - endif() - # these are too stupid, give them a hint - set(ENV{OPENALDIR} ${DHEWM3LIBS}) - set(ENV{SDLDIR} ${DHEWM3LIBS}) - set(ENV{SDL2DIR} ${DHEWM3LIBS}) -endif() - -# libs -find_package(ZLIB REQUIRED) -include_directories(${ZLIB_INCLUDE_DIRS}) - -find_package(JPEG REQUIRED) -include_directories(${JPEG_INCLUDE_DIR}) - -set(CMAKE_REQUIRED_INCLUDES ${JPEG_INCLUDE_DIR}) -set(CMAKE_REQUIRED_LIBRARIES ${JPEG_LIBRARY}) - -find_package(OGG REQUIRED) -include_directories(${OGG_INCLUDE_DIR}) - -find_package(Vorbis REQUIRED) -include_directories(${VORBIS_INCLUDE_DIR}) - -find_package(VorbisFile REQUIRED) -include_directories(${VORBISFILE_INCLUDE_DIR}) - -find_package(OpenAL REQUIRED) -include_directories(${OPENAL_INCLUDE_DIR}) - -if(NOT AROS) - find_package(X11 REQUIRED) - include_directories(${X11_INCLUDE_DIR}) -endif() - -if (SDL2) - # skip SDL2main - if(APPLE OR WIN32) - set(SDL2_BUILDING_LIBRARY TRUE) - endif() - find_package(SDL2 REQUIRED) - include_directories(${SDL2_INCLUDE_DIR}) - set(SDLx_LIBRARY ${SDL2_LIBRARY}) -else() - # skip SDLmain - if(APPLE OR WIN32) - set(SDL_BUILDING_LIBRARY TRUE) - endif() - find_package(SDL REQUIRED) - include_directories(${SDL_INCLUDE_DIR}) - set(SDLx_LIBRARY ${SDL_LIBRARY}) -endif() - -find_package(CURL QUIET) -if(CURL_FOUND) - set(ID_ENABLE_CURL ON) - include_directories(${CURL_INCLUDE_DIR}) -else() - message(STATUS "libcurl not found, server downloads won't be available") - set(ID_ENABLE_CURL OFF) - set(CURL_LIBRARY "") -endif() +include(CheckCXXCompilerFlag) +include(TestBigEndian) # compiler specific flags if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") @@ -177,6 +102,7 @@ if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") # TODO fix these warnings add_compile_options(-Wno-sign-compare) add_compile_options(-Wno-switch) + add_compile_options(-Wno-strict-overflow) add_compile_options(-Wno-format-security) CHECK_CXX_COMPILER_FLAG("-Woverloaded-virtual" cxx_has_Woverload_virtual) @@ -214,12 +140,10 @@ if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID STREQUAL "Clang") else() message(FATAL_ERROR "Unsupported CPU architecture for OSX") endif() - - set(sys_libs ${sys_libs} "-framework Carbon -framework Cocoa -framework IOKit") elseif(WIN32) set(ldflags "${ldflags} -static-libgcc -static-libstdc++") elseif(os STREQUAL "linux") - set(sys_libs ${sys_libs} dl) + # set(sys_libs ${sys_libs} dl) FIXME: -ldl needed anyway? endif() elseif(MSVC) add_compile_options(/W4) @@ -249,40 +173,14 @@ set(CMAKE_CXX_FLAGS_MINSIZEREL ${CMAKE_C_FLAGS_MINSIZEREL}) if(WIN32) add_definitions(-DWINVER=0x0501) add_definitions(-D_WIN32_WINNT=0x0501) - - set(sys_libs ${sys_libs} - winmm - iphlpapi - wsock32 - ole32 - ) -endif() - -# fallback for cmake versions without GNUInstallDirs -if(GNUINSTALLDIRS MATCHES "NOTFOUND") - set(CMAKE_INSTALL_BINDIR "bin" - CACHE PATH "user executables (bin)") - set(CMAKE_INSTALL_LIBDIR "lib${LIB_SUFFIX}" - CACHE PATH "object code libraries (lib${LIB_SUFFIX})") - set(CMAKE_INSTALL_DATAROOTDIR "share" - CACHE PATH "read-only architecture-independent data root (share)") - set(CMAKE_INSTALL_DATADIR "${CMAKE_INSTALL_DATAROOTDIR}" - CACHE PATH "read-only architecture-independent data (DATAROOTDIR)") - - mark_as_advanced(CMAKE_INSTALL_BINDIR CMAKE_INSTALL_LIBDIR CMAKE_INSTALL_DATAROOTDIR CMAKE_INSTALL_DATADIR) - foreach(dir BINDIR LIBDIR DATAROOTDIR DATADIR) - if(NOT IS_ABSOLUTE ${CMAKE_INSTALL_${dir}}) - set(CMAKE_INSTALL_FULL_${dir} "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_${dir}}") - else() - set(CMAKE_INSTALL_FULL_${dir} "${CMAKE_INSTALL_${dir}}") - endif() - endforeach() endif() set(bindir "${CMAKE_INSTALL_FULL_BINDIR}") set(libdir "${CMAKE_INSTALL_FULL_LIBDIR}/dhewm3") set(datadir "${CMAKE_INSTALL_FULL_DATADIR}/dhewm3") +TEST_BIG_ENDIAN(is_big_endian) + configure_file( "${CMAKE_SOURCE_DIR}/config.h.in" "${CMAKE_BINARY_DIR}/config.h" @@ -297,235 +195,6 @@ if(NOT APPLE AND NOT WIN32) message(STATUS " Data directory: ${datadir}") endif() -set(src_renderer - renderer/Cinematic.cpp - renderer/GuiModel.cpp - renderer/Image_files.cpp - renderer/Image_init.cpp - renderer/Image_load.cpp - renderer/Image_process.cpp - renderer/Image_program.cpp - renderer/Interaction.cpp - renderer/Material.cpp - renderer/MegaTexture.cpp - renderer/Model.cpp - renderer/ModelDecal.cpp - renderer/ModelManager.cpp - renderer/ModelOverlay.cpp - renderer/Model_beam.cpp - renderer/Model_ase.cpp - renderer/Model_liquid.cpp - renderer/Model_lwo.cpp - renderer/Model_ma.cpp - renderer/Model_md3.cpp - renderer/Model_md5.cpp - renderer/Model_prt.cpp - renderer/Model_sprite.cpp - renderer/RenderEntity.cpp - renderer/RenderSystem.cpp - renderer/RenderSystem_init.cpp - renderer/RenderWorld.cpp - renderer/RenderWorld_demo.cpp - renderer/RenderWorld_load.cpp - renderer/RenderWorld_portals.cpp - renderer/VertexCache.cpp - renderer/draw_arb2.cpp - renderer/draw_common.cpp - renderer/tr_backend.cpp - renderer/tr_deform.cpp - renderer/tr_font.cpp - renderer/tr_guisurf.cpp - renderer/tr_light.cpp - renderer/tr_lightrun.cpp - renderer/tr_main.cpp - renderer/tr_orderIndexes.cpp - renderer/tr_polytope.cpp - renderer/tr_render.cpp - renderer/tr_rendertools.cpp - renderer/tr_shadowbounds.cpp - renderer/tr_stencilshadow.cpp - renderer/tr_subview.cpp - renderer/tr_trace.cpp - renderer/tr_trisurf.cpp - renderer/tr_turboshadow.cpp -) - -set(src_framework - framework/CVarSystem.cpp - framework/CmdSystem.cpp - framework/Common.cpp - framework/Compressor.cpp - framework/Console.cpp - framework/DemoFile.cpp - framework/DeclAF.cpp - framework/DeclEntityDef.cpp - framework/DeclFX.cpp - framework/DeclManager.cpp - framework/DeclParticle.cpp - framework/DeclPDA.cpp - framework/DeclSkin.cpp - framework/DeclTable.cpp - framework/EditField.cpp - framework/EventLoop.cpp - framework/File.cpp - framework/FileSystem.cpp - framework/KeyInput.cpp - framework/UsercmdGen.cpp - framework/Session_menu.cpp - framework/Session.cpp - framework/async/AsyncClient.cpp - framework/async/AsyncNetwork.cpp - framework/async/AsyncServer.cpp - framework/async/MsgChannel.cpp - framework/async/NetworkSystem.cpp - framework/async/ServerScan.cpp - framework/minizip/ioapi.c - framework/minizip/unzip.cpp -) - -set(src_cm - cm/CollisionModel_contacts.cpp - cm/CollisionModel_contents.cpp - cm/CollisionModel_debug.cpp - cm/CollisionModel_files.cpp - cm/CollisionModel_load.cpp - cm/CollisionModel_rotate.cpp - cm/CollisionModel_trace.cpp - cm/CollisionModel_translate.cpp -) - -set(src_dmap - tools/compilers/dmap/dmap.cpp - tools/compilers/dmap/facebsp.cpp - tools/compilers/dmap/gldraw.cpp - tools/compilers/dmap/glfile.cpp - tools/compilers/dmap/leakfile.cpp - tools/compilers/dmap/map.cpp - tools/compilers/dmap/optimize.cpp - tools/compilers/dmap/output.cpp - tools/compilers/dmap/portals.cpp - tools/compilers/dmap/shadowopt3.cpp - tools/compilers/dmap/tritjunction.cpp - tools/compilers/dmap/tritools.cpp - tools/compilers/dmap/ubrush.cpp - tools/compilers/dmap/usurface.cpp -) - -set(src_aas - tools/compilers/aas/AASBuild.cpp - tools/compilers/aas/AASBuild_file.cpp - tools/compilers/aas/AASBuild_gravity.cpp - tools/compilers/aas/AASBuild_ledge.cpp - tools/compilers/aas/AASBuild_merge.cpp - tools/compilers/aas/AASCluster.cpp - tools/compilers/aas/AASFile.cpp - tools/compilers/aas/AASFile_optimize.cpp - tools/compilers/aas/AASFile_sample.cpp - tools/compilers/aas/AASReach.cpp - tools/compilers/aas/AASFileManager.cpp - tools/compilers/aas/Brush.cpp - tools/compilers/aas/BrushBSP.cpp -) - -set(src_roq - tools/compilers/roqvq/NSBitmapImageRep.cpp - tools/compilers/roqvq/codec.cpp - tools/compilers/roqvq/roq.cpp - tools/compilers/roqvq/roqParam.cpp -) - -set(src_renderbump - tools/compilers/renderbump/renderbump.cpp -) - -set(src_snd - sound/snd_cache.cpp - sound/snd_decoder.cpp - sound/snd_efxfile.cpp - sound/snd_emitter.cpp - sound/snd_shader.cpp - sound/snd_system.cpp - sound/snd_wavefile.cpp - sound/snd_world.cpp -) - -set(src_ui - ui/BindWindow.cpp - ui/ChoiceWindow.cpp - ui/DeviceContext.cpp - ui/EditWindow.cpp - ui/FieldWindow.cpp - ui/GameBearShootWindow.cpp - ui/GameBustOutWindow.cpp - ui/GameSSDWindow.cpp - ui/GuiScript.cpp - ui/ListGUI.cpp - ui/ListWindow.cpp - ui/MarkerWindow.cpp - ui/RegExp.cpp - ui/RenderWindow.cpp - ui/SimpleWindow.cpp - ui/SliderWindow.cpp - ui/UserInterface.cpp - ui/Window.cpp - ui/Winvar.cpp -) - -set(src_tools - tools/guied/GEWindowWrapper_stub.cpp -) - -set(src_idlib - idlib/bv/Bounds.cpp - idlib/bv/Frustum.cpp - idlib/bv/Sphere.cpp - idlib/bv/Box.cpp - idlib/geometry/DrawVert.cpp - idlib/geometry/Winding2D.cpp - idlib/geometry/Surface_SweptSpline.cpp - idlib/geometry/Winding.cpp - idlib/geometry/Surface.cpp - idlib/geometry/Surface_Patch.cpp - idlib/geometry/TraceModel.cpp - idlib/geometry/JointTransform.cpp - idlib/hashing/CRC32.cpp - idlib/hashing/MD4.cpp - idlib/hashing/MD5.cpp - idlib/math/Angles.cpp - idlib/math/Lcp.cpp - idlib/math/Math.cpp - idlib/math/Matrix.cpp - idlib/math/Ode.cpp - idlib/math/Plane.cpp - idlib/math/Pluecker.cpp - idlib/math/Polynomial.cpp - idlib/math/Quat.cpp - idlib/math/Rotation.cpp - idlib/math/Simd.cpp - idlib/math/Simd_Generic.cpp - idlib/math/Simd_AltiVec.cpp - idlib/math/Simd_MMX.cpp - idlib/math/Simd_3DNow.cpp - idlib/math/Simd_SSE.cpp - idlib/math/Simd_SSE2.cpp - idlib/math/Simd_SSE3.cpp - idlib/math/Vector.cpp - idlib/BitMsg.cpp - idlib/LangDict.cpp - idlib/Lexer.cpp - idlib/Lib.cpp - idlib/containers/HashIndex.cpp - idlib/Dict.cpp - idlib/Str.cpp - idlib/Parser.cpp - idlib/MapFile.cpp - idlib/CmdArgs.cpp - idlib/Token.cpp - idlib/Base64.cpp - idlib/Timer.cpp - idlib/Heap.cpp -) - set(src_game game/AF.cpp game/AFEntity.cpp @@ -672,108 +341,57 @@ set(src_d3xp d3xp/physics/Force_Grab.cpp ) -set(src_core - ${src_renderer} - ${src_framework} - ${src_cm} - ${src_dmap} - ${src_aas} - ${src_roq} - ${src_renderbump} - ${src_snd} - ${src_ui} - ${src_tools} +set(src_idlib + idlib/bv/Bounds.cpp + idlib/bv/Frustum.cpp + idlib/bv/Sphere.cpp + idlib/bv/Box.cpp + idlib/geometry/DrawVert.cpp + idlib/geometry/Winding2D.cpp + idlib/geometry/Surface_SweptSpline.cpp + idlib/geometry/Winding.cpp + idlib/geometry/Surface.cpp + idlib/geometry/Surface_Patch.cpp + idlib/geometry/TraceModel.cpp + idlib/geometry/JointTransform.cpp + idlib/hashing/CRC32.cpp + idlib/hashing/MD4.cpp + idlib/hashing/MD5.cpp + idlib/math/Angles.cpp + idlib/math/Lcp.cpp + idlib/math/Math.cpp + idlib/math/Matrix.cpp + idlib/math/Ode.cpp + idlib/math/Plane.cpp + idlib/math/Pluecker.cpp + idlib/math/Polynomial.cpp + idlib/math/Quat.cpp + idlib/math/Rotation.cpp + idlib/math/Simd.cpp + idlib/math/Simd_Generic.cpp + idlib/math/Simd_AltiVec.cpp + idlib/math/Simd_MMX.cpp + idlib/math/Simd_3DNow.cpp + idlib/math/Simd_SSE.cpp + idlib/math/Simd_SSE2.cpp + idlib/math/Simd_SSE3.cpp + idlib/math/Vector.cpp + idlib/BitMsg.cpp + idlib/LangDict.cpp + idlib/Lexer.cpp + idlib/Lib.cpp + idlib/containers/HashIndex.cpp + idlib/Dict.cpp + idlib/Str.cpp + idlib/Parser.cpp + idlib/MapFile.cpp + idlib/CmdArgs.cpp + idlib/Token.cpp + idlib/Base64.cpp + idlib/Timer.cpp + idlib/Heap.cpp ) -set(src_stub_openal sys/stub/openal_stub.cpp) -set(src_stub_gl sys/stub/stub_gl.cpp) - -if(AROS) - set(DHEWM3BINARY "ADoom3") - set(sys_libs ${sys_libs} dll) - - set(src_arosdll - sys/aros/dll/dllstartup.c - sys/aros/dll/dll.c - sys/aros/dll/dllimport.c - ) - - set(src_sys_base - sys/cpu.cpp - sys/threads.cpp - sys/events.cpp - sys/sys_local.cpp - sys/aros/aros_net.cpp - sys/aros/aros_signal.cpp - sys/aros/aros_main.cpp - sys/aros/aros_dos.cpp - ) - - set(src_sys_core - sys/glimp.cpp - ) -elseif(APPLE) - set(OSX_RESOURCE_FILES - "${CMAKE_SOURCE_DIR}/sys/osx/Doom3.icns" - "${CMAKE_SOURCE_DIR}/sys/osx/Doom 3.rsrc" - ) - - set_source_files_properties(${OSX_RESOURCE_FILES} PROPERTIES MACOSX_PACKAGE_LOCATION Resources) - - set(src_sys_base - sys/cpu.cpp - sys/threads.cpp - sys/events.cpp - sys/sys_local.cpp - sys/posix/posix_net.cpp - sys/posix/posix_main.cpp - ) - - set(src_sys_core - sys/glimp.cpp - sys/osx/DOOMController.mm - sys/osx/macosx_misc.mm - sys/osx/SDLMain.m - ${OSX_RESOURCE_FILES} - ) -elseif(WIN32) - set(WIN32_RESOURCE_FILES - "${CMAKE_SOURCE_DIR}/sys/win32/rc/dhewm3.rc" - ) - - set(src_sys_base - sys/cpu.cpp - sys/threads.cpp - sys/events.cpp - sys/sys_local.cpp - sys/win32/win_input.cpp - sys/win32/win_main.cpp - sys/win32/win_net.cpp - sys/win32/win_shared.cpp - sys/win32/win_syscon.cpp - sys/win32/SDL_win32_main.c - ) - - set(src_sys_core - sys/glimp.cpp - ${WIN32_RESOURCE_FILES} - ) -else() - set(src_sys_base - sys/cpu.cpp - sys/threads.cpp - sys/events.cpp - sys/sys_local.cpp - sys/posix/posix_net.cpp - sys/posix/posix_main.cpp - sys/linux/main.cpp - ) - - set(src_sys_core - sys/glimp.cpp - ) -endif() - include_directories(${CMAKE_BINARY_DIR}) include_directories(${CMAKE_SOURCE_DIR}) @@ -791,70 +409,6 @@ else() endif() endif() -if(CORE) - add_executable(${DHEWM3BINARY} WIN32 MACOSX_BUNDLE - ${src_core} - ${src_sys_base} - ${src_sys_core} - ) - - set_target_properties(${DHEWM3BINARY} PROPERTIES COMPILE_DEFINITIONS "__DOOM_DLL__") - set_target_properties(${DHEWM3BINARY} PROPERTIES LINK_FLAGS "${ldflags}") - set_target_properties(${DHEWM3BINARY} PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${PROJECT_SOURCE_DIR}/sys/osx/Info.plist) - - target_link_libraries(${DHEWM3BINARY} - idlib - ${OPENAL_LIBRARY} - ${VORBISFILE_LIBRARIES} - ${VORBIS_LIBRARIES} - ${OGG_LIBRARIES} - ${CURL_LIBRARY} - ${JPEG_LIBRARY} - ${ZLIB_LIBRARY} - ${SDLx_LIBRARY} - ${sys_libs} - ) - - if(NOT APPLE AND NOT WIN32) - install(TARGETS ${DHEWM3BINARY} - RUNTIME DESTINATION "${bindir}" - LIBRARY DESTINATION "${libdir}" - ARCHIVE DESTINATION "${libdir}" - ) - endif() -endif() - -if(DEDICATED) - add_executable(${DHEWM3BINARY}ded WIN32 MACOSX_BUNDLE - ${src_core} - ${src_stub_openal} - ${src_stub_gl} - ${src_sys_base} - ) - - set_target_properties(${DHEWM3BINARY}ded PROPERTIES COMPILE_DEFINITIONS "ID_DEDICATED;__DOOM_DLL__") - set_target_properties(${DHEWM3BINARY}ded PROPERTIES LINK_FLAGS "${ldflags}") - target_link_libraries(${DHEWM3BINARY}ded - idlib - ${VORBISFILE_LIBRARIES} - ${VORBIS_LIBRARIES} - ${OGG_LIBRARIES} - ${CURL_LIBRARY} - ${JPEG_LIBRARY} - ${ZLIB_LIBRARY} - ${SDLx_LIBRARY} - ${sys_libs} - ) - - if(NOT APPLE AND NOT WIN32) - install(TARGETS ${DHEWM3BINARY}ded - RUNTIME DESTINATION "${bindir}" - LIBRARY DESTINATION "${libdir}" - ARCHIVE DESTINATION "${libdir}" - ) - endif() -endif() - if(BASE) if (AROS) add_executable(base sys/aros/dll/dllglue.c ${src_game}) diff --git a/MayaImport/maya_main.h b/MayaImport/maya_main.h new file mode 100644 index 0000000..03a3cf6 --- /dev/null +++ b/MayaImport/maya_main.h @@ -0,0 +1,50 @@ +/* +=========================================================================== + +Doom 3 GPL Source Code +Copyright (C) 1999-2011 id Software LLC, a ZeniMax Media company. + +This file is part of the Doom 3 GPL Source Code ("Doom 3 Source Code"). + +Doom 3 Source Code is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Doom 3 Source Code is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with Doom 3 Source Code. If not, see . + +In addition, the Doom 3 Source Code is also subject to certain additional terms. You should have received a copy of these additional terms immediately following the terms and conditions of the GNU General Public License which accompanied the Doom 3 Source Code. If not, please request a copy in writing from id Software at the address below. + +If you have questions concerning this license or the applicable additional terms, you may contact in writing id Software LLC, c/o ZeniMax Media Inc., Suite 120, Rockville, Maryland 20850 USA. + +=========================================================================== +*/ + +#ifndef __MAYA_MAIN_H__ +#define __MAYA_MAIN_H__ + +#include "framework/FileSystem.h" + +class idCommon; +class idSys; + +/* +============================================================== + + Maya Import + +============================================================== +*/ + + +typedef bool ( *exporterDLLEntry_t )( int version, idCommon *common, idSys *sys ); +typedef const char *( *exporterInterface_t )( const char *ospath, const char *commandline ); +typedef void ( *exporterShutdown_t )( void ); + +#endif /* !__MAYA_MAIN_H__ */ diff --git a/config.h.in b/config.h.in index b96976b..13284fa 100644 --- a/config.h.in +++ b/config.h.in @@ -4,13 +4,11 @@ #define BUILD_OS "@os@" #define BUILD_CPU "@cpu@" +#define BUILD_IS_BIG_ENDIAN @is_big_endian@ + #define BUILD_LIBRARY_SUFFIX "@CMAKE_SHARED_LIBRARY_SUFFIX@" #define BUILD_LIBDIR "@libdir@" #define BUILD_DATADIR "@datadir@" -#cmakedefine HAVE_JPEG_MEM_SRC - -#cmakedefine ID_ENABLE_CURL - #endif diff --git a/d3xp/gamesys/SaveGame.cpp b/d3xp/gamesys/SaveGame.cpp index 2dd04a6..1207263 100644 --- a/d3xp/gamesys/SaveGame.cpp +++ b/d3xp/gamesys/SaveGame.cpp @@ -30,6 +30,7 @@ If you have questions concerning this license or the applicable additional terms #include "framework/BuildVersion.h" #include "framework/DeclSkin.h" #include "renderer/ModelManager.h" +#include "framework/File.h" #include "physics/Clip.h" #include "Entity.h" diff --git a/framework/File.h b/framework/File.h index f8b7bd5..fd55e50 100644 --- a/framework/File.h +++ b/framework/File.h @@ -32,7 +32,10 @@ If you have questions concerning this license or the applicable additional terms #include "idlib/math/Vector.h" #include "idlib/BitMsg.h" -#include "framework/Unzip.h" +//#include "framework/Unzip.h" +// DG: instead of getting ZPOS64_T from some zlib header (via Unzip.h) +// just define it here +typedef uint64_t ZPOS64_T; /* ============================================================== diff --git a/game/gamesys/SaveGame.cpp b/game/gamesys/SaveGame.cpp index e0b70c9..40e1969 100644 --- a/game/gamesys/SaveGame.cpp +++ b/game/gamesys/SaveGame.cpp @@ -30,6 +30,7 @@ If you have questions concerning this license or the applicable additional terms #include "framework/BuildVersion.h" #include "framework/DeclSkin.h" #include "renderer/ModelManager.h" +#include "framework/File.h" #include "physics/Clip.h" #include "Entity.h" diff --git a/idlib/Lib.cpp b/idlib/Lib.cpp index 0976c85..3c83bae 100644 --- a/idlib/Lib.cpp +++ b/idlib/Lib.cpp @@ -35,7 +35,9 @@ If you have questions concerning this license or the applicable additional terms #include #endif -#include +// DG: I don't want a build dependency on SDL for mods just for SDL_endian.h, +// so I copied (most of) it into sys/: +#include "sys/Stub_SDL_endian.h" #include "sys/platform.h" #include "idlib/math/Vector.h" diff --git a/sound/sound.h b/sound/sound.h index b4fb2fa..d37d4f6 100644 --- a/sound/sound.h +++ b/sound/sound.h @@ -31,7 +31,7 @@ If you have questions concerning this license or the applicable additional terms #include "idlib/math/Vector.h" #include "framework/DeclManager.h" -#include "framework/DemoFile.h" +//#include "framework/DemoFile.h" #include "renderer/Cinematic.h" /* diff --git a/sys/Stub_SDL_endian.h b/sys/Stub_SDL_endian.h new file mode 100644 index 0000000..a268481 --- /dev/null +++ b/sys/Stub_SDL_endian.h @@ -0,0 +1,253 @@ +/* + A replacement for SDL_endian.h for idlib/Lib.cpp + + (I did some changes to remove dependencies to other SDL headers) + + Based on the original SDL_endian.h: + + Simple DirectMedia Layer + Copyright (C) 1997-2018 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +#ifndef STUB_SDL_ENDIAN_H +#define STUB_SDL_ENDIAN_H + +#include +#include "platform.h" + +#define SDL_LIL_ENDIAN 1234 +#define SDL_BIG_ENDIAN 4321 + +#if BUILD_IS_BIG_ENDIAN // this is from config.h, set by cmake + #define SDL_BYTEORDER SDL_BIG_ENDIAN +#else + #define SDL_BYTEORDER SDL_LIL_ENDIAN +#endif + +typedef uint16_t Uint16; +typedef uint32_t Uint32; +typedef uint64_t Uint64; + +#ifndef SDL_INLINE +#if defined(__GNUC__) +#define SDL_INLINE __inline__ +#elif defined(_MSC_VER) || defined(__BORLANDC__) || \ + defined(__DMC__) || defined(__SC__) || \ + defined(__WATCOMC__) || defined(__LCC__) || \ + defined(__DECC) || defined(__CC_ARM) +#define SDL_INLINE __inline +#ifndef __inline__ +#define __inline__ __inline +#endif +#else +#define SDL_INLINE inline +#ifndef __inline__ +#define __inline__ inline +#endif +#endif +#endif /* SDL_INLINE not defined */ + +#ifndef SDL_FORCE_INLINE +#if defined(_MSC_VER) +#define SDL_FORCE_INLINE __forceinline +#elif ( (defined(__GNUC__) && (__GNUC__ >= 4)) || defined(__clang__) ) +#define SDL_FORCE_INLINE __attribute__((always_inline)) static __inline__ +#else +#define SDL_FORCE_INLINE static SDL_INLINE +#endif +#endif /* SDL_FORCE_INLINE not defined */ + +#if defined(__GNUC__) && defined(__i386__) && \ + !(__GNUC__ == 2 && __GNUC_MINOR__ == 95 /* broken gcc version */) +SDL_FORCE_INLINE Uint16 +SDL_Swap16(Uint16 x) +{ + __asm__("xchgb %b0,%h0": "=q"(x):"0"(x)); + return x; +} +#elif defined(__GNUC__) && defined(__x86_64__) +SDL_FORCE_INLINE Uint16 +SDL_Swap16(Uint16 x) +{ + __asm__("xchgb %b0,%h0": "=Q"(x):"0"(x)); + return x; +} +#elif defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__)) +SDL_FORCE_INLINE Uint16 +SDL_Swap16(Uint16 x) +{ + int result; + + __asm__("rlwimi %0,%2,8,16,23": "=&r"(result):"0"(x >> 8), "r"(x)); + return (Uint16)result; +} +#elif defined(__GNUC__) && (defined(__M68000__) || defined(__M68020__)) && !defined(__mcoldfire__) +SDL_FORCE_INLINE Uint16 +SDL_Swap16(Uint16 x) +{ + __asm__("rorw #8,%0": "=d"(x): "0"(x):"cc"); + return x; +} +#elif defined(__WATCOMC__) && defined(__386__) +extern _inline Uint16 SDL_Swap16(Uint16); +#pragma aux SDL_Swap16 = \ + "xchg al, ah" \ + parm [ax] \ + modify [ax]; +#else +SDL_FORCE_INLINE Uint16 +SDL_Swap16(Uint16 x) +{ + return SDL_static_cast(Uint16, ((x << 8) | (x >> 8))); +} +#endif + +#if defined(__GNUC__) && defined(__i386__) +SDL_FORCE_INLINE Uint32 +SDL_Swap32(Uint32 x) +{ + __asm__("bswap %0": "=r"(x):"0"(x)); + return x; +} +#elif defined(__GNUC__) && defined(__x86_64__) +SDL_FORCE_INLINE Uint32 +SDL_Swap32(Uint32 x) +{ + __asm__("bswapl %0": "=r"(x):"0"(x)); + return x; +} +#elif defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__)) +SDL_FORCE_INLINE Uint32 +SDL_Swap32(Uint32 x) +{ + Uint32 result; + + __asm__("rlwimi %0,%2,24,16,23": "=&r"(result):"0"(x >> 24), "r"(x)); + __asm__("rlwimi %0,%2,8,8,15": "=&r"(result):"0"(result), "r"(x)); + __asm__("rlwimi %0,%2,24,0,7": "=&r"(result):"0"(result), "r"(x)); + return result; +} +#elif defined(__GNUC__) && (defined(__M68000__) || defined(__M68020__)) && !defined(__mcoldfire__) +SDL_FORCE_INLINE Uint32 +SDL_Swap32(Uint32 x) +{ + __asm__("rorw #8,%0\n\tswap %0\n\trorw #8,%0": "=d"(x): "0"(x):"cc"); + return x; +} +#elif defined(__WATCOMC__) && defined(__386__) +extern _inline Uint32 SDL_Swap32(Uint32); +#ifndef __SW_3 /* 486+ */ +#pragma aux SDL_Swap32 = \ + "bswap eax" \ + parm [eax] \ + modify [eax]; +#else /* 386-only */ +#pragma aux SDL_Swap32 = \ + "xchg al, ah" \ + "ror eax, 16" \ + "xchg al, ah" \ + parm [eax] \ + modify [eax]; +#endif +#else +SDL_FORCE_INLINE Uint32 +SDL_Swap32(Uint32 x) +{ + return SDL_static_cast(Uint32, ((x << 24) | ((x << 8) & 0x00FF0000) | + ((x >> 8) & 0x0000FF00) | (x >> 24))); +} +#endif + +#if defined(__GNUC__) && defined(__i386__) +SDL_FORCE_INLINE Uint64 +SDL_Swap64(Uint64 x) +{ + union + { + struct + { + Uint32 a, b; + } s; + Uint64 u; + } v; + v.u = x; + __asm__("bswapl %0 ; bswapl %1 ; xchgl %0,%1": "=r"(v.s.a), "=r"(v.s.b):"0"(v.s.a), + "1"(v.s. + b)); + return v.u; +} +#elif defined(__GNUC__) && defined(__x86_64__) +SDL_FORCE_INLINE Uint64 +SDL_Swap64(Uint64 x) +{ + __asm__("bswapq %0": "=r"(x):"0"(x)); + return x; +} +#else +SDL_FORCE_INLINE Uint64 +SDL_Swap64(Uint64 x) +{ + Uint32 hi, lo; + + /* Separate into high and low 32-bit values and swap them */ + lo = SDL_static_cast(Uint32, x & 0xFFFFFFFF); + x >>= 32; + hi = SDL_static_cast(Uint32, x & 0xFFFFFFFF); + x = SDL_Swap32(lo); + x <<= 32; + x |= SDL_Swap32(hi); + return (x); +} +#endif + + +SDL_FORCE_INLINE float +SDL_SwapFloat(float x) +{ + union + { + float f; + Uint32 ui32; + } swapper; + swapper.f = x; + swapper.ui32 = SDL_Swap32(swapper.ui32); + return swapper.f; +} + +#if SDL_BYTEORDER == SDL_LIL_ENDIAN +#define SDL_SwapLE16(X) (X) +#define SDL_SwapLE32(X) (X) +#define SDL_SwapLE64(X) (X) +#define SDL_SwapFloatLE(X) (X) +#define SDL_SwapBE16(X) SDL_Swap16(X) +#define SDL_SwapBE32(X) SDL_Swap32(X) +#define SDL_SwapBE64(X) SDL_Swap64(X) +#define SDL_SwapFloatBE(X) SDL_SwapFloat(X) +#else +#define SDL_SwapLE16(X) SDL_Swap16(X) +#define SDL_SwapLE32(X) SDL_Swap32(X) +#define SDL_SwapLE64(X) SDL_Swap64(X) +#define SDL_SwapFloatLE(X) SDL_SwapFloat(X) +#define SDL_SwapBE16(X) (X) +#define SDL_SwapBE32(X) (X) +#define SDL_SwapBE64(X) (X) +#define SDL_SwapFloatBE(X) (X) +#endif + +#endif // STUB_SDL_ENDIAN_H