mirror of
https://github.com/libretro/hatari.git
synced 2026-11-07 10:36:00 -10:00
Add optional build depencies to retro core
This commit is contained in:
1 parent
179c5df8ec
commit
2ff59f9113
2 files changed
+228
No files matched your search
@@ -69,6 +69,8 @@ if(ENABLE_LIBRETRO)
|
||||
"ENABLE_LIBRETRO is enabled but ${LIBRETRO_INCLUDE_DIR}/libretro.h was not found"
|
||||
)
|
||||
endif()
|
||||
|
||||
include(cmake/BuildDependencies.cmake)
|
||||
endif()
|
||||
|
||||
find_path(LIBRETRO_INCLUDE_DIR libretro.h
|
||||
|
||||
@@ -0,0 +1,226 @@
|
||||
include(FetchContent)
|
||||
|
||||
option(ENABLE_STATIC_SDL2
|
||||
"Build and statically link SDL2"
|
||||
OFF)
|
||||
|
||||
option(ENABLE_STATIC_ZLIB
|
||||
"Build and statically link zlib"
|
||||
OFF)
|
||||
|
||||
option(ENABLE_STATIC_CAPSIMAGE
|
||||
"Build and statically link CapsImg"
|
||||
OFF)
|
||||
|
||||
# SDL2
|
||||
if(ENABLE_STATIC_SDL2)
|
||||
set(SDL_SHARED OFF CACHE BOOL "" FORCE)
|
||||
set(SDL_STATIC ON CACHE BOOL "" FORCE)
|
||||
set(SDL_TESTS OFF CACHE BOOL "" FORCE)
|
||||
set(SDL_TEST_LIBRARY OFF CACHE BOOL "" FORCE)
|
||||
set(SDL_EXAMPLES OFF CACHE BOOL "" FORCE)
|
||||
set(SDL_UNINSTALL OFF CACHE BOOL "" FORCE)
|
||||
|
||||
FetchContent_Declare(
|
||||
SDL2
|
||||
GIT_REPOSITORY https://github.com/libsdl-org/SDL.git
|
||||
GIT_TAG release-2.32.8
|
||||
GIT_SHALLOW TRUE
|
||||
)
|
||||
|
||||
FetchContent_MakeAvailable(SDL2)
|
||||
|
||||
if(TARGET SDL2::SDL2-static)
|
||||
set(SDL2_LIBRARIES SDL2::SDL2-static)
|
||||
get_target_property(SDL2_INCLUDE_DIRS
|
||||
SDL2::SDL2-static
|
||||
INTERFACE_INCLUDE_DIRECTORIES)
|
||||
elseif(TARGET SDL2-static)
|
||||
set(SDL2_LIBRARIES SDL2-static)
|
||||
get_target_property(SDL2_INCLUDE_DIRS
|
||||
SDL2-static
|
||||
INTERFACE_INCLUDE_DIRECTORIES)
|
||||
else()
|
||||
message(FATAL_ERROR "SDL2 static target was not created")
|
||||
endif()
|
||||
|
||||
include_directories(${SDL2_INCLUDE_DIRS})
|
||||
endif()
|
||||
|
||||
# zlib
|
||||
if(ENABLE_STATIC_ZLIB)
|
||||
|
||||
set(ZLIB_BUILD_SHARED OFF CACHE BOOL "" FORCE)
|
||||
|
||||
FetchContent_Declare(
|
||||
zlib
|
||||
GIT_REPOSITORY https://github.com/madler/zlib.git
|
||||
GIT_TAG v1.3.1
|
||||
GIT_SHALLOW TRUE
|
||||
)
|
||||
|
||||
FetchContent_MakeAvailable(zlib)
|
||||
|
||||
if(TARGET zlibstatic)
|
||||
|
||||
set(ZLIB_LIBRARY zlibstatic)
|
||||
|
||||
if(NOT LIBRETRO_STATIC)
|
||||
set_target_properties(zlibstatic PROPERTIES
|
||||
POSITION_INDEPENDENT_CODE TRUE
|
||||
)
|
||||
endif()
|
||||
|
||||
if(NOT TARGET ZLIB::ZLIB)
|
||||
add_library(ZLIB::ZLIB ALIAS zlibstatic)
|
||||
endif()
|
||||
|
||||
elseif(TARGET zlib)
|
||||
|
||||
set(ZLIB_LIBRARY zlib)
|
||||
|
||||
else()
|
||||
|
||||
message(FATAL_ERROR "zlib static target was not created")
|
||||
|
||||
endif()
|
||||
|
||||
set(ZLIB_FOUND TRUE)
|
||||
set(HAVE_LIBZ 1)
|
||||
set(HAVE_ZLIB_H 1)
|
||||
endif()
|
||||
|
||||
# CapsImg
|
||||
if(ENABLE_STATIC_CAPSIMAGE)
|
||||
|
||||
message(STATUS "Building CapsImg statically")
|
||||
|
||||
enable_language(CXX)
|
||||
|
||||
FetchContent_Declare(
|
||||
capsimg
|
||||
GIT_REPOSITORY https://github.com/rsn8887/capsimg.git
|
||||
GIT_TAG c92d17b4383ebf432788f7b5a38fdd6902376f00
|
||||
GIT_SHALLOW TRUE
|
||||
)
|
||||
|
||||
if(POLICY CMP0169)
|
||||
cmake_policy(SET CMP0169 OLD)
|
||||
endif()
|
||||
|
||||
FetchContent_Populate(capsimg)
|
||||
|
||||
set(CAPSIMAGE_SOURCES
|
||||
${capsimg_SOURCE_DIR}/Codec/CTRawCodec.cpp
|
||||
${capsimg_SOURCE_DIR}/Codec/CTRawCodecDecompressor.cpp
|
||||
${capsimg_SOURCE_DIR}/Codec/DiskEncoding.cpp
|
||||
|
||||
${capsimg_SOURCE_DIR}/Core/BaseFile.cpp
|
||||
${capsimg_SOURCE_DIR}/Core/BitBuffer.cpp
|
||||
${capsimg_SOURCE_DIR}/Core/CRC.cpp
|
||||
${capsimg_SOURCE_DIR}/Core/DiskFile.cpp
|
||||
${capsimg_SOURCE_DIR}/Core/MemoryFile.cpp
|
||||
|
||||
${capsimg_SOURCE_DIR}/CAPSImg/CapsAPI.cpp
|
||||
${capsimg_SOURCE_DIR}/CAPSImg/CapsFDCEmulator.cpp
|
||||
${capsimg_SOURCE_DIR}/CAPSImg/CapsFile.cpp
|
||||
${capsimg_SOURCE_DIR}/CAPSImg/CapsFormatMFM.cpp
|
||||
${capsimg_SOURCE_DIR}/CAPSImg/CapsImage.cpp
|
||||
${capsimg_SOURCE_DIR}/CAPSImg/CapsImageStd.cpp
|
||||
${capsimg_SOURCE_DIR}/CAPSImg/CapsLoader.cpp
|
||||
${capsimg_SOURCE_DIR}/CAPSImg/DiskImage.cpp
|
||||
${capsimg_SOURCE_DIR}/CAPSImg/DiskImageFactory.cpp
|
||||
${capsimg_SOURCE_DIR}/CAPSImg/stdafx.cpp
|
||||
${capsimg_SOURCE_DIR}/CAPSImg/StreamCueImage.cpp
|
||||
${capsimg_SOURCE_DIR}/CAPSImg/StreamImage.cpp
|
||||
)
|
||||
|
||||
add_library(capsimage STATIC ${CAPSIMAGE_SOURCES})
|
||||
|
||||
set_target_properties(capsimage PROPERTIES
|
||||
LINKER_LANGUAGE CXX
|
||||
)
|
||||
|
||||
if(NOT LIBRETRO_STATIC)
|
||||
set_target_properties(capsimage PROPERTIES
|
||||
POSITION_INDEPENDENT_CODE TRUE
|
||||
)
|
||||
endif()
|
||||
|
||||
set(CAPSIMAGE_GENERATED_INCLUDE_DIR
|
||||
${CMAKE_CURRENT_BINARY_DIR}/capsimage/include
|
||||
)
|
||||
|
||||
set(CAPSIMAGE_CAPS_INCLUDE_DIR
|
||||
${CAPSIMAGE_GENERATED_INCLUDE_DIR}/caps
|
||||
)
|
||||
|
||||
file(MAKE_DIRECTORY
|
||||
${CAPSIMAGE_CAPS_INCLUDE_DIR}
|
||||
)
|
||||
|
||||
file(GLOB CAPSIMAGE_LIBIPF_HEADERS
|
||||
${capsimg_SOURCE_DIR}/LibIPF/*.h
|
||||
)
|
||||
|
||||
file(COPY
|
||||
${CAPSIMAGE_LIBIPF_HEADERS}
|
||||
DESTINATION ${CAPSIMAGE_CAPS_INCLUDE_DIR}
|
||||
)
|
||||
|
||||
file(READ ${capsimg_SOURCE_DIR}/Core/CommonTypes.h CAPSIMAGE_COMMONTYPES)
|
||||
string(REPLACE
|
||||
"typedef int8_t BYTE;"
|
||||
"#ifndef _WIN32\ntypedef int8_t BYTE;"
|
||||
CAPSIMAGE_COMMONTYPES "${CAPSIMAGE_COMMONTYPES}")
|
||||
string(REPLACE
|
||||
"typedef int32_t DWORD;"
|
||||
"typedef int32_t DWORD;\n#endif"
|
||||
CAPSIMAGE_COMMONTYPES "${CAPSIMAGE_COMMONTYPES}")
|
||||
file(WRITE
|
||||
${CAPSIMAGE_CAPS_INCLUDE_DIR}/CommonTypes.h
|
||||
"#include <stdint.h>\n${CAPSIMAGE_COMMONTYPES}"
|
||||
)
|
||||
|
||||
target_include_directories(capsimage
|
||||
PUBLIC
|
||||
${CAPSIMAGE_GENERATED_INCLUDE_DIR}
|
||||
${capsimg_SOURCE_DIR}/LibIPF
|
||||
${capsimg_SOURCE_DIR}/Core
|
||||
${capsimg_SOURCE_DIR}/Codec
|
||||
${capsimg_SOURCE_DIR}/Device
|
||||
${capsimg_SOURCE_DIR}/CAPSImg
|
||||
)
|
||||
|
||||
if(WIN32)
|
||||
set(CAPSIMAGE_CONFIG_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}/capsimage/config)
|
||||
file(MAKE_DIRECTORY ${CAPSIMAGE_CONFIG_INCLUDE_DIR})
|
||||
|
||||
file(READ ${capsimg_SOURCE_DIR}/CAPSImg/config.h CAPSIMAGE_CONFIG)
|
||||
string(REPLACE
|
||||
"#define HAVE_STRUCT_DIRENT_D_TYPE 1"
|
||||
"/* #undef HAVE_STRUCT_DIRENT_D_TYPE */ /* mingw's dirent has no d_type */"
|
||||
CAPSIMAGE_CONFIG "${CAPSIMAGE_CONFIG}")
|
||||
file(WRITE ${CAPSIMAGE_CONFIG_INCLUDE_DIR}/config.h "${CAPSIMAGE_CONFIG}")
|
||||
|
||||
target_include_directories(capsimage BEFORE
|
||||
PRIVATE
|
||||
${CAPSIMAGE_CONFIG_INCLUDE_DIR}
|
||||
)
|
||||
endif()
|
||||
|
||||
set(CAPSIMAGE_LIBRARY capsimage)
|
||||
set(CAPSIMAGE_INCLUDE_DIR
|
||||
${CAPSIMAGE_GENERATED_INCLUDE_DIR}
|
||||
${capsimg_SOURCE_DIR}/CAPSImg
|
||||
)
|
||||
set(CapsImage_FOUND TRUE)
|
||||
set(HAVE_CAPSIMAGE 1)
|
||||
endif()
|
||||
|
||||
message(STATUS "")
|
||||
message(STATUS "Built dependencies:")
|
||||
message(STATUS " SDL2: ${SDL2_LIBRARIES}")
|
||||
message(STATUS " zlib: ${ZLIB_LIBRARY}")
|
||||
message(STATUS " CapsImg: ${CAPSIMAGE_LIBRARY}")
|
||||
message(STATUS "")
|
||||
Reference in new issue
Block a user