CMakeLists.txt 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. # SPDX-FileCopyrightText: 2023 yuzu Emulator Project
  2. # SPDX-License-Identifier: GPL-2.0-or-later
  3. set(NX_TZDB_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/include")
  4. add_library(nx_tzdb INTERFACE)
  5. find_program(GIT git)
  6. find_program(GNU_MAKE make)
  7. find_program(GNU_DATE date)
  8. set(CAN_BUILD_NX_TZDB true)
  9. if ("${GIT}" STREQUAL "GIT-NOTFOUND")
  10. set(CAN_BUILD_NX_TZDB false)
  11. endif()
  12. if ("${GNU_MAKE}" STREQUAL "GNU_MAKE-NOTFOUND")
  13. set(CAN_BUILD_NX_TZDB false)
  14. endif()
  15. if ("${GNU_DATE}" STREQUAL "GNU_DATE-NOTFOUND")
  16. set(CAN_BUILD_NX_TZDB false)
  17. endif()
  18. if ("${CMAKE_SYSTEM_NAME}" STREQUAL "Windows")
  19. # tzdb_to_nx currently requires a posix-compliant host
  20. set(CAN_BUILD_NX_TZDB false)
  21. endif()
  22. set(NX_TZDB_VERSION "220816")
  23. set(NX_TZDB_ARCHIVE "${CMAKE_CURRENT_BINARY_DIR}/${NX_TZDB_VERSION}.zip")
  24. set(NX_TZDB_ROMFS_DIR "${CMAKE_CURRENT_BINARY_DIR}/nx_tzdb")
  25. if ((NOT ${CAN_BUILD_NX_TZDB} OR ${YUZU_DOWNLOAD_TIME_ZONE_DATA}) AND NOT EXISTS ${NX_TZDB_ARCHIVE})
  26. set(NX_TZDB_DOWNLOAD_URL "https://github.com/lat9nq/tzdb_to_nx/releases/download/${NX_TZDB_VERSION}/${NX_TZDB_VERSION}.zip")
  27. message(STATUS "Downloading time zone data from ${NX_TZDB_DOWNLOAD_URL}...")
  28. file(DOWNLOAD ${NX_TZDB_DOWNLOAD_URL} ${NX_TZDB_ARCHIVE}
  29. STATUS NX_TZDB_DOWNLOAD_STATUS)
  30. list(GET NX_TZDB_DOWNLOAD_STATUS 0 NX_TZDB_DOWNLOAD_STATUS_CODE)
  31. if (NOT "${NX_TZDB_DOWNLOAD_STATUS_CODE}" STREQUAL "0")
  32. message(FATAL_ERROR "Time zone data download failed (status code ${NX_TZDB_DOWNLOAD_STATUS_CODE})")
  33. endif()
  34. file(ARCHIVE_EXTRACT
  35. INPUT
  36. ${NX_TZDB_ARCHIVE}
  37. DESTINATION
  38. ${NX_TZDB_ROMFS_DIR})
  39. elseif (${CAN_BUILD_NX_TZDB} AND NOT ${YUZU_DOWNLOAD_TIME_ZONE_DATA})
  40. add_subdirectory(tzdb_to_nx)
  41. add_dependencies(nx_tzdb x80e)
  42. set(NX_TZDB_ROMFS_DIR "${NX_TZDB_DIR}")
  43. endif()
  44. target_include_directories(nx_tzdb
  45. INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/include
  46. INTERFACE ${NX_TZDB_INCLUDE_DIR})
  47. function(CreateHeader ZONE_PATH HEADER_NAME)
  48. set(HEADER_PATH "${NX_TZDB_INCLUDE_DIR}/nx_tzdb/${HEADER_NAME}.h")
  49. add_custom_command(
  50. OUTPUT
  51. ${NX_TZDB_INCLUDE_DIR}/nx_tzdb/${HEADER_NAME}.h
  52. COMMAND
  53. ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/NxTzdbCreateHeader.cmake
  54. ${ZONE_PATH}
  55. ${HEADER_NAME}
  56. ${NX_TZDB_INCLUDE_DIR}
  57. ${CMAKE_CURRENT_SOURCE_DIR}
  58. DEPENDS
  59. tzdb_template.h.in
  60. NxTzdbCreateHeader.cmake)
  61. target_sources(nx_tzdb PRIVATE ${HEADER_PATH})
  62. endfunction()
  63. CreateHeader(${NX_TZDB_ROMFS_DIR} base)
  64. CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo zoneinfo)
  65. CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Africa africa)
  66. CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/America america)
  67. CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/America/Argentina america_argentina)
  68. CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/America/Indiana america_indiana)
  69. CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/America/Kentucky america_kentucky)
  70. CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/America/North_Dakota america_north_dakota)
  71. CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Antarctica antarctica)
  72. CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Arctic arctic)
  73. CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Asia asia)
  74. CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Atlantic atlantic)
  75. CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Australia australia)
  76. CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Brazil brazil)
  77. CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Canada canada)
  78. CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Chile chile)
  79. CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Etc etc)
  80. CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Europe europe)
  81. CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Indian indian)
  82. CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Mexico mexico)
  83. CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Pacific pacific)
  84. CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/US us)