aboutsummaryrefslogtreecommitdiff
path: root/externals
diff options
context:
space:
mode:
authorlizzie <lizzie@eden-emu.dev>2026-05-15 22:05:32 +0200
committercrueter <crueter@eden-emu.dev>2026-05-15 22:05:32 +0200
commit02dee4a20b7edbe094e7428f3b4f59bacbaa043f (patch)
treef216212dea608fda94fa352a9a1008dbd9f2f379 /externals
parentbc9b9480fbbde8ee6ad2fc118e9f0afc96dd65ec (diff)
[file_sys/system_archive] remove uneeded ctor/dtor initializations for std::map<> when creating system archives for nx_tzdb generated files (#3919)
sounds like word salad but let me say: - std::map<> created a static ctor for EVERY SINGLE ZONEINFO - fuck that, instead lets just use a raw array and construct things statically - works the same except with less baggage carried around (+ less heap allocations!!!) this should help reduce codesize due to the aforementioned global ctor/dtor Signed-off-by: lizzie <lizzie@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3919 Reviewed-by: crueter <crueter@eden-emu.dev>
Diffstat (limited to 'externals')
-rw-r--r--externals/nx_tzdb/NxTzdbCreateHeader.cmake27
-rw-r--r--externals/nx_tzdb/tzdb_template.h.in6
2 files changed, 24 insertions, 9 deletions
diff --git a/externals/nx_tzdb/NxTzdbCreateHeader.cmake b/externals/nx_tzdb/NxTzdbCreateHeader.cmake
index 95606d8629..229c8aa43d 100644
--- a/externals/nx_tzdb/NxTzdbCreateHeader.cmake
+++ b/externals/nx_tzdb/NxTzdbCreateHeader.cmake
@@ -1,3 +1,6 @@
+# SPDX-FileCopyrightText: Copyright 2026 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
@@ -16,15 +19,24 @@ if (NOT FILE_LIST)
endif()
set(DIRECTORY_NAME ${HEADER_NAME})
-
set(FILE_DATA "")
+
+string(APPEND FILE_DATA "[[nodiscard]] static inline std::vector<FileSys::VirtualFile> CollectFiles_${DIRECTORY_NAME}() {\n")
+string(APPEND FILE_DATA [[
+ std::vector<FileSys::VirtualFile> vfs_files;
+ auto const fn = [&](std::string_view name, std::span<const u8> data) {
+ vfs_files.push_back(std::make_shared<FileSys::VectorVfsFile>(
+ std::vector<u8>(data.begin(), data.end()),
+ std::string{name}
+ ));
+ };
+]])
foreach(ZONE_FILE ${FILE_LIST})
if (ZONE_FILE STREQUAL "\n")
continue()
endif()
-
- string(APPEND FILE_DATA "{\"${ZONE_FILE}\",\n{")
-
+ string(APPEND FILE_DATA " {\n")
+ string(APPEND FILE_DATA " constexpr uint8_t tzdb_data[] = {\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)
@@ -42,9 +54,12 @@ foreach(ZONE_FILE ${FILE_LIST})
string(APPEND FILE_DATA " ")
endif()
endforeach()
-
- string(APPEND FILE_DATA "}},\n")
+ string(APPEND FILE_DATA " };\n")
+ string(APPEND FILE_DATA " fn(\"${ZONE_FILE}\", tzdb_data);\n")
+ string(APPEND FILE_DATA " }\n")
endforeach()
+string(APPEND FILE_DATA " return vfs_files;\n")
+string(APPEND FILE_DATA "}\n")
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/tzdb_template.h.in b/externals/nx_tzdb/tzdb_template.h.in
index 289d002ea8..d7907b846d 100644
--- a/externals/nx_tzdb/tzdb_template.h.in
+++ b/externals/nx_tzdb/tzdb_template.h.in
@@ -9,10 +9,10 @@
namespace NxTzdb {
+// @DIRECTORY_NAME@
+
// clang-format off
-const static std::map<const char*, const std::vector<uint8_t>> @DIRECTORY_NAME@ =
-{
-@FILE_DATA@};
+@FILE_DATA@
// clang-format on
} // namespace NxTzdb