diff options
Diffstat (limited to 'externals')
-rw-r--r-- | externals/CMakeLists.txt | 6 | ||||
m--------- | externals/SDL | 0 | ||||
-rw-r--r-- | externals/nx_tzdb/CMakeLists.txt | 101 | ||||
-rw-r--r-- | externals/nx_tzdb/ListFilesInDirectory.cmake | 8 | ||||
-rw-r--r-- | externals/nx_tzdb/NxTzdbCreateHeader.cmake | 46 | ||||
-rw-r--r-- | externals/nx_tzdb/include/nx_tzdb.h | 27 | ||||
-rw-r--r-- | externals/nx_tzdb/tzdb_template.h.in | 18 | ||||
m--------- | externals/nx_tzdb/tzdb_to_nx | 0 | ||||
m--------- | externals/vcpkg | 0 |
9 files changed, 205 insertions, 1 deletions
diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt index 500eb21e3..7cce27d51 100644 --- a/externals/CMakeLists.txt +++ b/externals/CMakeLists.txt @@ -63,8 +63,9 @@ if (YUZU_USE_EXTERNAL_SDL2) # Yuzu itself needs: Atomic Audio Events Joystick Haptic Sensor Threads Timers # Since 2.0.18 Atomic+Threads required for HIDAPI/libusb (see https://github.com/libsdl-org/SDL/issues/5095) # Yuzu-cmd also needs: Video (depends on Loadso/Dlopen) + # CPUinfo also required for SDL Audio, at least until 2.28.0 (see https://github.com/libsdl-org/SDL/issues/7809) set(SDL_UNUSED_SUBSYSTEMS - CPUinfo File Filesystem + File Filesystem Locale Power Render) foreach(_SUB ${SDL_UNUSED_SUBSYSTEMS}) string(TOUPPER ${_SUB} _OPT) @@ -139,6 +140,9 @@ if (YUZU_USE_EXTERNAL_VULKAN_HEADERS) add_subdirectory(Vulkan-Headers) endif() +# TZDB (Time Zone Database) +add_subdirectory(nx_tzdb) + if (NOT TARGET LLVM::Demangle) add_library(demangle demangle/ItaniumDemangle.cpp) target_include_directories(demangle PUBLIC ./demangle) diff --git a/externals/SDL b/externals/SDL -Subproject f17058b562c8a1090c0c996b42982721ace9090 +Subproject 491fba1d06a4810645092b2559b9cc94abeb23b diff --git a/externals/nx_tzdb/CMakeLists.txt b/externals/nx_tzdb/CMakeLists.txt new file mode 100644 index 000000000..593786250 --- /dev/null +++ b/externals/nx_tzdb/CMakeLists.txt @@ -0,0 +1,101 @@ +# 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) + set(CAN_BUILD_NX_TZDB false) +endif() +if (NOT GNU_MAKE) + set(CAN_BUILD_NX_TZDB false) +endif() +if (NOT DATE_PROG) + set(CAN_BUILD_NX_TZDB false) +endif() +if (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() + +set(NX_TZDB_VERSION "220816") +set(NX_TZDB_ARCHIVE "${CMAKE_CURRENT_BINARY_DIR}/${NX_TZDB_VERSION}.zip") + +set(NX_TZDB_ROMFS_DIR "${CMAKE_CURRENT_BINARY_DIR}/nx_tzdb") + +if ((NOT CAN_BUILD_NX_TZDB OR YUZU_DOWNLOAD_TIME_ZONE_DATA) AND NOT EXISTS ${NX_TZDB_ARCHIVE}) + set(NX_TZDB_DOWNLOAD_URL "https://github.com/lat9nq/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_ROMFS_DIR}) +elseif (CAN_BUILD_NX_TZDB AND NOT YUZU_DOWNLOAD_TIME_ZONE_DATA) + add_subdirectory(tzdb_to_nx) + add_dependencies(nx_tzdb x80e) + + set(NX_TZDB_ROMFS_DIR "${NX_TZDB_DIR}") +endif() + +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_ROMFS_DIR} base) +CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo zoneinfo) +CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Africa africa) +CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/America america) +CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/America/Argentina america_argentina) +CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/America/Indiana america_indiana) +CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/America/Kentucky america_kentucky) +CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/America/North_Dakota america_north_dakota) +CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Antarctica antarctica) +CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Arctic arctic) +CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Asia asia) +CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Atlantic atlantic) +CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Australia australia) +CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Brazil brazil) +CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Canada canada) +CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Chile chile) +CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Etc etc) +CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Europe europe) +CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Indian indian) +CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Mexico mexico) +CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Pacific pacific) +CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/US us) diff --git a/externals/nx_tzdb/ListFilesInDirectory.cmake b/externals/nx_tzdb/ListFilesInDirectory.cmake new file mode 100644 index 000000000..35a9e726a --- /dev/null +++ b/externals/nx_tzdb/ListFilesInDirectory.cmake @@ -0,0 +1,8 @@ +# SPDX-FileCopyrightText: 2023 yuzu Emulator Project +# SPDX-License-Identifier: GPL-2.0-or-later + +# CMake does not have a way to list the files in a specific directory, +# so we need this script to do that for us in a platform-agnostic fashion + +file(GLOB FILE_LIST LIST_DIRECTORIES false RELATIVE ${CMAKE_SOURCE_DIR} "*") +execute_process(COMMAND ${CMAKE_COMMAND} -E echo "${FILE_LIST};") diff --git a/externals/nx_tzdb/NxTzdbCreateHeader.cmake b/externals/nx_tzdb/NxTzdbCreateHeader.cmake new file mode 100644 index 000000000..8c29e1167 --- /dev/null +++ b/externals/nx_tzdb/NxTzdbCreateHeader.cmake @@ -0,0 +1,46 @@ +# SPDX-FileCopyrightText: 2023 yuzu Emulator Project +# SPDX-License-Identifier: GPL-2.0-or-later + +set(ZONE_PATH ${CMAKE_ARGV3}) +set(HEADER_NAME ${CMAKE_ARGV4}) +set(NX_TZDB_INCLUDE_DIR ${CMAKE_ARGV5}) +set(NX_TZDB_SOURCE_DIR ${CMAKE_ARGV6}) + +execute_process( + COMMAND ${CMAKE_COMMAND} -P ${NX_TZDB_SOURCE_DIR}/ListFilesInDirectory.cmake + WORKING_DIRECTORY ${ZONE_PATH} + OUTPUT_VARIABLE FILE_LIST) + +set(DIRECTORY_NAME ${HEADER_NAME}) + +set(FILE_DATA "") +foreach(ZONE_FILE ${FILE_LIST}) + if (ZONE_FILE STREQUAL "\n") + continue() + endif() + + string(APPEND FILE_DATA "{\"${ZONE_FILE}\",\n{") + + file(READ ${ZONE_PATH}/${ZONE_FILE} ZONE_DATA HEX) + string(LENGTH "${ZONE_DATA}" ZONE_DATA_LEN) + foreach(I RANGE 0 ${ZONE_DATA_LEN} 2) + math(EXPR BREAK_LINE "(${I} + 2) % 38") + + string(SUBSTRING "${ZONE_DATA}" "${I}" 2 HEX_DATA) + if (NOT HEX_DATA) + break() + endif() + + string(APPEND FILE_DATA "0x${HEX_DATA},") + if (BREAK_LINE EQUAL 0) + string(APPEND FILE_DATA "\n") + else() + string(APPEND FILE_DATA " ") + endif() + endforeach() + + string(APPEND FILE_DATA "}},\n") +endforeach() + +file(READ ${NX_TZDB_SOURCE_DIR}/tzdb_template.h.in NX_TZDB_TEMPLATE_H_IN) +file(CONFIGURE OUTPUT ${NX_TZDB_INCLUDE_DIR}/nx_tzdb/${HEADER_NAME}.h CONTENT "${NX_TZDB_TEMPLATE_H_IN}") diff --git a/externals/nx_tzdb/include/nx_tzdb.h b/externals/nx_tzdb/include/nx_tzdb.h new file mode 100644 index 000000000..1f7c6069a --- /dev/null +++ b/externals/nx_tzdb/include/nx_tzdb.h @@ -0,0 +1,27 @@ +// SPDX-FileCopyrightText: 2023 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "nx_tzdb/africa.h" +#include "nx_tzdb/america.h" +#include "nx_tzdb/america_argentina.h" +#include "nx_tzdb/america_indiana.h" +#include "nx_tzdb/america_kentucky.h" +#include "nx_tzdb/america_north_dakota.h" +#include "nx_tzdb/antarctica.h" +#include "nx_tzdb/arctic.h" +#include "nx_tzdb/asia.h" +#include "nx_tzdb/atlantic.h" +#include "nx_tzdb/australia.h" +#include "nx_tzdb/base.h" +#include "nx_tzdb/brazil.h" +#include "nx_tzdb/canada.h" +#include "nx_tzdb/chile.h" +#include "nx_tzdb/etc.h" +#include "nx_tzdb/europe.h" +#include "nx_tzdb/indian.h" +#include "nx_tzdb/mexico.h" +#include "nx_tzdb/pacific.h" +#include "nx_tzdb/us.h" +#include "nx_tzdb/zoneinfo.h" diff --git a/externals/nx_tzdb/tzdb_template.h.in b/externals/nx_tzdb/tzdb_template.h.in new file mode 100644 index 000000000..289d002ea --- /dev/null +++ b/externals/nx_tzdb/tzdb_template.h.in @@ -0,0 +1,18 @@ +// SPDX-FileCopyrightText: 2023 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include <cstdint> +#include <map> +#include <vector> + +namespace NxTzdb { + +// clang-format off +const static std::map<const char*, const std::vector<uint8_t>> @DIRECTORY_NAME@ = +{ +@FILE_DATA@}; +// clang-format on + +} // namespace NxTzdb diff --git a/externals/nx_tzdb/tzdb_to_nx b/externals/nx_tzdb/tzdb_to_nx new file mode 160000 +Subproject 212afa2394a74226dcf1b7996a570aae17debb6 diff --git a/externals/vcpkg b/externals/vcpkg -Subproject 656fcc6ab2b05c6d999b7eaca717027ac3738f7 +Subproject cbf56573a987527b39272e88cbdd11389b78c6e |