mirror of
https://git.eden-emu.dev/eden-emu/eden
synced 2026-05-16 06:06:59 +02:00
[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>
This commit is contained in:
parent
bc9b9480fb
commit
02dee4a20b
3 changed files with 53 additions and 76 deletions
27
externals/nx_tzdb/NxTzdbCreateHeader.cmake
vendored
27
externals/nx_tzdb/NxTzdbCreateHeader.cmake
vendored
|
|
@ -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}")
|
||||
|
|
|
|||
6
externals/nx_tzdb/tzdb_template.h.in
vendored
6
externals/nx_tzdb/tzdb_template.h.in
vendored
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue