mirror of
https://git.eden-emu.dev/eden-emu/eden
synced 2026-04-10 03:18:55 +02:00
Support for bundled Qt, not through aqtinstall but rather my CI. Multimedia is implemented too, works on both Windows and Linux, though we don't actually use it so it doesn't really matter. Contains Declarative and all that so the Quick frontend will work once it becomes a thing. Some options have changed, notably w.r.t LTO and faster linker, which are now handled directly in the modules. CPMUtil also has support for custom dirs (`PackageName_CUSTOM_DIR`) now. Probably most useful for adding external fragment shaders and whatnot. Signed-off-by: crueter <crueter@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3289
111 lines
4 KiB
CMake
111 lines
4 KiB
CMake
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
# SPDX-FileCopyrightText: 2023 yuzu Emulator Project
|
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
set(NX_TZDB_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/include")
|
|
|
|
add_library(nx_tzdb INTERFACE)
|
|
|
|
find_program(GIT git)
|
|
find_program(GNU_MAKE make)
|
|
find_program(DATE_PROG date)
|
|
|
|
set(CAN_BUILD_NX_TZDB true)
|
|
|
|
if (NOT (GIT AND GNU_MAKE AND DATE_PROG) OR CMAKE_SYSTEM_NAME STREQUAL "Windows" OR ANDROID)
|
|
# tzdb_to_nx currently requires a posix-compliant host
|
|
# MinGW and Android are handled here due to the executable format being different from the host system
|
|
# TODO (lat9nq): cross-compiling support
|
|
|
|
set(CAN_BUILD_NX_TZDB false)
|
|
endif()
|
|
|
|
if (CAN_BUILD_NX_TZDB AND NOT YUZU_DOWNLOAD_TIME_ZONE_DATA)
|
|
message(FATAL_ERROR "Building tzdb is currently unsupported. Check back later.")
|
|
add_subdirectory(tzdb_to_nx)
|
|
add_dependencies(nx_tzdb x80e)
|
|
|
|
set(NX_TZDB_BASE_DIR "${NX_TZDB_DIR}")
|
|
set(NX_TZDB_TZ_DIR "${NX_TZDB_BASE_DIR}/zoneinfo")
|
|
endif()
|
|
|
|
if(NOT YUZU_TZDB_PATH STREQUAL "")
|
|
set(NX_TZDB_BASE_DIR "${YUZU_TZDB_PATH}")
|
|
elseif (MSVC AND NOT CXX_CLANG AND YUZU_ENABLE_LTO)
|
|
# TODO(crueter): boot up the windows vm
|
|
set(NX_TZDB_VERSION "250725")
|
|
set(NX_TZDB_ARCHIVE "${CPM_SOURCE_CACHE}/nx_tzdb/${NX_TZDB_VERSION}.zip")
|
|
|
|
set(NX_TZDB_BASE_DIR "${CPM_SOURCE_CACHE}/nx_tzdb/tz")
|
|
|
|
set(NX_TZDB_DOWNLOAD_URL "https://git.crueter.xyz/misc/tzdb_to_nx/releases/download/${NX_TZDB_VERSION}/${NX_TZDB_VERSION}.zip")
|
|
|
|
message(STATUS "Downloading time zone data from ${NX_TZDB_DOWNLOAD_URL}...")
|
|
file(DOWNLOAD ${NX_TZDB_DOWNLOAD_URL} ${NX_TZDB_ARCHIVE}
|
|
STATUS NX_TZDB_DOWNLOAD_STATUS)
|
|
|
|
list(GET NX_TZDB_DOWNLOAD_STATUS 0 NX_TZDB_DOWNLOAD_STATUS_CODE)
|
|
if (NOT NX_TZDB_DOWNLOAD_STATUS_CODE EQUAL 0)
|
|
message(FATAL_ERROR "Time zone data download failed (status code ${NX_TZDB_DOWNLOAD_STATUS_CODE})")
|
|
endif()
|
|
|
|
file(ARCHIVE_EXTRACT
|
|
INPUT
|
|
${NX_TZDB_ARCHIVE}
|
|
DESTINATION
|
|
${NX_TZDB_BASE_DIR})
|
|
else()
|
|
message(STATUS "Downloading time zone data...")
|
|
AddJsonPackage(tzdb)
|
|
|
|
set(NX_TZDB_BASE_DIR "${nx_tzdb_SOURCE_DIR}")
|
|
endif()
|
|
|
|
set(NX_TZDB_TZ_DIR "${NX_TZDB_BASE_DIR}/zoneinfo")
|
|
|
|
target_include_directories(nx_tzdb
|
|
INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/include
|
|
INTERFACE ${NX_TZDB_INCLUDE_DIR})
|
|
|
|
function(CreateHeader ZONE_PATH HEADER_NAME)
|
|
set(HEADER_PATH "${NX_TZDB_INCLUDE_DIR}/nx_tzdb/${HEADER_NAME}.h")
|
|
add_custom_command(
|
|
OUTPUT
|
|
${NX_TZDB_INCLUDE_DIR}/nx_tzdb/${HEADER_NAME}.h
|
|
COMMAND
|
|
${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/NxTzdbCreateHeader.cmake
|
|
${ZONE_PATH}
|
|
${HEADER_NAME}
|
|
${NX_TZDB_INCLUDE_DIR}
|
|
${CMAKE_CURRENT_SOURCE_DIR}
|
|
DEPENDS
|
|
tzdb_template.h.in
|
|
NxTzdbCreateHeader.cmake)
|
|
|
|
target_sources(nx_tzdb PRIVATE ${HEADER_PATH})
|
|
endfunction()
|
|
|
|
CreateHeader(${NX_TZDB_BASE_DIR} base)
|
|
CreateHeader(${NX_TZDB_TZ_DIR} zoneinfo)
|
|
CreateHeader(${NX_TZDB_TZ_DIR}/Africa africa)
|
|
CreateHeader(${NX_TZDB_TZ_DIR}/America america)
|
|
CreateHeader(${NX_TZDB_TZ_DIR}/America/Argentina america_argentina)
|
|
CreateHeader(${NX_TZDB_TZ_DIR}/America/Indiana america_indiana)
|
|
CreateHeader(${NX_TZDB_TZ_DIR}/America/Kentucky america_kentucky)
|
|
CreateHeader(${NX_TZDB_TZ_DIR}/America/North_Dakota america_north_dakota)
|
|
CreateHeader(${NX_TZDB_TZ_DIR}/Antarctica antarctica)
|
|
CreateHeader(${NX_TZDB_TZ_DIR}/Arctic arctic)
|
|
CreateHeader(${NX_TZDB_TZ_DIR}/Asia asia)
|
|
CreateHeader(${NX_TZDB_TZ_DIR}/Atlantic atlantic)
|
|
CreateHeader(${NX_TZDB_TZ_DIR}/Australia australia)
|
|
CreateHeader(${NX_TZDB_TZ_DIR}/Brazil brazil)
|
|
CreateHeader(${NX_TZDB_TZ_DIR}/Canada canada)
|
|
CreateHeader(${NX_TZDB_TZ_DIR}/Chile chile)
|
|
CreateHeader(${NX_TZDB_TZ_DIR}/Etc etc)
|
|
CreateHeader(${NX_TZDB_TZ_DIR}/Europe europe)
|
|
CreateHeader(${NX_TZDB_TZ_DIR}/Indian indian)
|
|
CreateHeader(${NX_TZDB_TZ_DIR}/Mexico mexico)
|
|
CreateHeader(${NX_TZDB_TZ_DIR}/Pacific pacific)
|
|
CreateHeader(${NX_TZDB_TZ_DIR}/US us)
|