Files
open-wc/gdextension/CMakeLists.txt
T
2026-04-20 20:26:14 +04:00

80 lines
3.4 KiB
CMake

cmake_minimum_required(VERSION 3.22)
project(mpq_extractor VERSION 1.0.0)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# ── Paths ──────────────────────────────────────────────────────────────────────
set(GODOT_CPP_DIR "${CMAKE_SOURCE_DIR}/../thirdparty/godot-cpp" CACHE PATH "Path to godot-cpp")
set(STORMLIB_DIR "${CMAKE_SOURCE_DIR}/../thirdparty/StormLib" CACHE PATH "Path to StormLib")
# ── godot-cpp ──────────────────────────────────────────────────────────────────
add_subdirectory(${GODOT_CPP_DIR} godot-cpp)
# ── StormLib ───────────────────────────────────────────────────────────────────
# Disable StormLib's own tests/examples
set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
set(STORMLIB_BUILD_TESTS OFF CACHE BOOL "" FORCE)
add_subdirectory(${STORMLIB_DIR} StormLib)
# ── Extension library ──────────────────────────────────────────────────────────
file(GLOB_RECURSE SOURCES CONFIGURE_DEPENDS "src/*.cpp")
add_library(mpq_extractor SHARED ${SOURCES})
target_include_directories(mpq_extractor PRIVATE
src
${STORMLIB_DIR}/src
)
target_link_libraries(mpq_extractor PRIVATE
godot-cpp
storm
)
# ── Output: addons/mpq_extractor/bin/ ─────────────────────────────────────────
set(OUTPUT_DIR "${CMAKE_SOURCE_DIR}/../addons/mpq_extractor/bin")
set_target_properties(mpq_extractor PROPERTIES
LIBRARY_OUTPUT_DIRECTORY "${OUTPUT_DIR}"
RUNTIME_OUTPUT_DIRECTORY "${OUTPUT_DIR}"
LIBRARY_OUTPUT_DIRECTORY_DEBUG "${OUTPUT_DIR}"
LIBRARY_OUTPUT_DIRECTORY_RELEASE "${OUTPUT_DIR}"
RUNTIME_OUTPUT_DIRECTORY_DEBUG "${OUTPUT_DIR}"
RUNTIME_OUTPUT_DIRECTORY_RELEASE "${OUTPUT_DIR}"
)
# Platform-specific naming (Godot convention: lib<name>.<platform>.<arch>.dll/so)
if(WIN32)
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(PLATFORM_SUFFIX "windows.x86_64")
else()
set(PLATFORM_SUFFIX "windows.x86_32")
endif()
set_target_properties(mpq_extractor PROPERTIES
PREFIX ""
OUTPUT_NAME "libmpq_extractor.${PLATFORM_SUFFIX}"
SUFFIX ".dll"
)
elseif(UNIX AND NOT APPLE)
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(PLATFORM_SUFFIX "linux.x86_64")
else()
set(PLATFORM_SUFFIX "linux.x86_32")
endif()
set_target_properties(mpq_extractor PROPERTIES
PREFIX ""
OUTPUT_NAME "libmpq_extractor.${PLATFORM_SUFFIX}"
SUFFIX ".so"
)
elseif(APPLE)
set_target_properties(mpq_extractor PROPERTIES
PREFIX ""
OUTPUT_NAME "libmpq_extractor.macos.universal"
SUFFIX ".dylib"
)
endif()
# ── Install (optional) ─────────────────────────────────────────────────────────
message(STATUS "mpq_extractor → ${OUTPUT_DIR}")