CMakeLists.txt 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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(DATE_PROG date)
  8. set(CAN_BUILD_NX_TZDB true)
  9. if (NOT GIT)
  10. set(CAN_BUILD_NX_TZDB false)
  11. endif()
  12. if (NOT GNU_MAKE)
  13. set(CAN_BUILD_NX_TZDB false)
  14. endif()
  15. if (NOT DATE_PROG)
  16. set(CAN_BUILD_NX_TZDB false)
  17. endif()
  18. if (CMAKE_SYSTEM_NAME STREQUAL "Windows" OR ANDROID)
  19. # tzdb_to_nx currently requires a posix-compliant host
  20. # MinGW and Android are handled here due to the executable format being different from the host system
  21. # TODO (lat9nq): cross-compiling support
  22. set(CAN_BUILD_NX_TZDB false)
  23. endif()
  24. set(NX_TZDB_VERSION "221202")
  25. set(NX_TZDB_ARCHIVE "${CMAKE_CURRENT_BINARY_DIR}/${NX_TZDB_VERSION}.zip")
  26. set(NX_TZDB_ROMFS_DIR "${CMAKE_CURRENT_BINARY_DIR}/nx_tzdb")
  27. if ((NOT CAN_BUILD_NX_TZDB OR YUZU_DOWNLOAD_TIME_ZONE_DATA) AND NOT EXISTS ${NX_TZDB_ROMFS_DIR})
  28. set(NX_TZDB_DOWNLOAD_URL "https://github.com/lat9nq/tzdb_to_nx/releases/download/${NX_TZDB_VERSION}/${NX_TZDB_VERSION}.zip")
  29. message(STATUS "Downloading time zone data from ${NX_TZDB_DOWNLOAD_URL}...")
  30. file(DOWNLOAD ${NX_TZDB_DOWNLOAD_URL} ${NX_TZDB_ARCHIVE}
  31. STATUS NX_TZDB_DOWNLOAD_STATUS)
  32. list(GET NX_TZDB_DOWNLOAD_STATUS 0 NX_TZDB_DOWNLOAD_STATUS_CODE)
  33. if (NOT NX_TZDB_DOWNLOAD_STATUS_CODE EQUAL 0)
  34. message(FATAL_ERROR "Time zone data download failed (status code ${NX_TZDB_DOWNLOAD_STATUS_CODE})")
  35. endif()
  36. file(ARCHIVE_EXTRACT
  37. INPUT
  38. ${NX_TZDB_ARCHIVE}
  39. DESTINATION
  40. ${NX_TZDB_ROMFS_DIR})
  41. elseif (CAN_BUILD_NX_TZDB AND NOT YUZU_DOWNLOAD_TIME_ZONE_DATA)
  42. add_subdirectory(tzdb_to_nx)
  43. add_dependencies(nx_tzdb x80e)
  44. set(NX_TZDB_ROMFS_DIR "${NX_TZDB_DIR}")
  45. endif()
  46. target_include_directories(nx_tzdb
  47. INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/include
  48. INTERFACE ${NX_TZDB_INCLUDE_DIR})
  49. function(CreateHeader ZONE_PATH HEADER_NAME)
  50. set(HEADER_PATH "${NX_TZDB_INCLUDE_DIR}/nx_tzdb/${HEADER_NAME}.h")
  51. add_custom_command(
  52. OUTPUT
  53. ${NX_TZDB_INCLUDE_DIR}/nx_tzdb/${HEADER_NAME}.h
  54. COMMAND
  55. ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/NxTzdbCreateHeader.cmake
  56. ${ZONE_PATH}
  57. ${HEADER_NAME}
  58. ${NX_TZDB_INCLUDE_DIR}
  59. ${CMAKE_CURRENT_SOURCE_DIR}
  60. DEPENDS
  61. tzdb_template.h.in
  62. NxTzdbCreateHeader.cmake)
  63. target_sources(nx_tzdb PRIVATE ${HEADER_PATH})
  64. endfunction()
  65. CreateHeader(${NX_TZDB_ROMFS_DIR} base)
  66. CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo zoneinfo)
  67. CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Africa africa)
  68. CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/America america)
  69. CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/America/Argentina america_argentina)
  70. CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/America/Indiana america_indiana)
  71. CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/America/Kentucky america_kentucky)
  72. CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/America/North_Dakota america_north_dakota)
  73. CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Antarctica antarctica)
  74. CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Arctic arctic)
  75. CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Asia asia)
  76. CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Atlantic atlantic)
  77. CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Australia australia)
  78. CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Brazil brazil)
  79. CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Canada canada)
  80. CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Chile chile)
  81. CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Etc etc)
  82. CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Europe europe)
  83. CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Indian indian)
  84. CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Mexico mexico)
  85. CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Pacific pacific)
  86. CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/US us)