[build, cmake] port to solaris (#96)
Co-authored-by: crueter <crueter@eden-emu.dev> Reviewed-on: #96 Co-authored-by: lizzie <lizzie@eden-emu.dev> Co-committed-by: lizzie <lizzie@eden-emu.dev>
This commit is contained in:
parent
23c77a0d4f
commit
e1763a726e
16 changed files with 215 additions and 76 deletions
|
@ -24,8 +24,8 @@ if (NOT EXISTS "${TZ_DIR}" OR NOT EXISTS "${TZIF_LIST_FILE}")
|
|||
# separate directory before building.
|
||||
execute_process(
|
||||
COMMAND
|
||||
${GIT_PROGRAM} clone --depth 1 "file://${TZ_SOURCE_DIR}" "${TZ_TMP_SOURCE_DIR}"
|
||||
COMMAND_ERROR_IS_FATAL ANY
|
||||
${GIT_PROGRAM} clone --depth=1 "file://${TZ_SOURCE_DIR}" "${TZ_TMP_SOURCE_DIR}"
|
||||
# No need to be fatal, on SunOS this works fine - COMMAND_ERROR_IS_FATAL ANY
|
||||
)
|
||||
|
||||
if (APPLE)
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
#include "tzif.h"
|
||||
#include <array>
|
||||
#include <cerrno>
|
||||
|
@ -7,7 +10,7 @@
|
|||
#include <getopt.h>
|
||||
#include <poll.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#include <cstdint>
|
||||
#include <unistd.h>
|
||||
|
||||
constexpr std::size_t ten_megabytes{(1 << 20) * 10};
|
||||
|
@ -92,7 +95,7 @@ int main(int argc, char *argv[]) {
|
|||
}
|
||||
}
|
||||
|
||||
u_int8_t *buf = new u_int8_t[filesize];
|
||||
std::uint8_t *buf = new std::uint8_t[filesize];
|
||||
|
||||
filesize = read(f, buf, filesize);
|
||||
if (filesize == static_cast<std::size_t>(-1)) {
|
||||
|
@ -124,7 +127,7 @@ int main(int argc, char *argv[]) {
|
|||
|
||||
delete[] buf;
|
||||
|
||||
std::vector<u_int8_t> output_buffer;
|
||||
std::vector<std::uint8_t> output_buffer;
|
||||
tzif_data->ReformatNintendo(output_buffer);
|
||||
|
||||
filename = "(stdout)";
|
||||
|
|
|
@ -1,14 +1,17 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
#include "tzif.h"
|
||||
#include <cstdint>
|
||||
#include <cstring>
|
||||
#include <memory>
|
||||
#include <sys/types.h>
|
||||
#include <cstdint>
|
||||
|
||||
namespace Tzif {
|
||||
|
||||
static std::size_t SkipToVersion2(const u_int8_t *data, std::size_t size) {
|
||||
static std::size_t SkipToVersion2(const std::uint8_t *data, std::size_t size) {
|
||||
char magic[5];
|
||||
const u_int8_t *p{data};
|
||||
const std::uint8_t *p{data};
|
||||
|
||||
std::memcpy(magic, data, 4);
|
||||
magic[4] = '\0';
|
||||
|
@ -28,15 +31,15 @@ static std::size_t SkipToVersion2(const u_int8_t *data, std::size_t size) {
|
|||
}
|
||||
|
||||
template <typename Type> constexpr static void SwapEndianess(Type *value) {
|
||||
u_int8_t *data = reinterpret_cast<u_int8_t *>(value);
|
||||
std::uint8_t *data = reinterpret_cast<std::uint8_t *>(value);
|
||||
|
||||
union {
|
||||
u_int8_t data[sizeof(Type)];
|
||||
std::uint8_t data[sizeof(Type)];
|
||||
Type value;
|
||||
} temp;
|
||||
|
||||
for (u_int32_t i = 0; i < sizeof(Type); i++) {
|
||||
u_int32_t alt_index = sizeof(Type) - i - 1;
|
||||
for (std::uint32_t i = 0; i < sizeof(Type); i++) {
|
||||
std::uint32_t alt_index = sizeof(Type) - i - 1;
|
||||
temp.data[alt_index] = data[i];
|
||||
}
|
||||
|
||||
|
@ -52,13 +55,13 @@ static void FlipHeader(Header &header) {
|
|||
SwapEndianess(&header.charcnt);
|
||||
}
|
||||
|
||||
std::unique_ptr<DataImpl> ReadData(const u_int8_t *data, std::size_t size) {
|
||||
std::unique_ptr<DataImpl> ReadData(const std::uint8_t *data, std::size_t size) {
|
||||
const std::size_t v2_offset = SkipToVersion2(data, size);
|
||||
if (v2_offset == static_cast<std::size_t>(-1)) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
const u_int8_t *p = data + v2_offset;
|
||||
const std::uint8_t *p = data + v2_offset;
|
||||
|
||||
Header header;
|
||||
std::memcpy(&header, p, sizeof(header));
|
||||
|
@ -67,10 +70,10 @@ std::unique_ptr<DataImpl> ReadData(const u_int8_t *data, std::size_t size) {
|
|||
FlipHeader(header);
|
||||
|
||||
const std::size_t data_block_length =
|
||||
header.timecnt * sizeof(int64_t) + header.timecnt * sizeof(u_int8_t) +
|
||||
header.timecnt * sizeof(int64_t) + header.timecnt * sizeof(std::uint8_t) +
|
||||
header.typecnt * sizeof(TimeTypeRecord) +
|
||||
header.charcnt * sizeof(int8_t) + header.isstdcnt * sizeof(u_int8_t) +
|
||||
header.isutcnt * sizeof(u_int8_t);
|
||||
header.charcnt * sizeof(int8_t) + header.isstdcnt * sizeof(std::uint8_t) +
|
||||
header.isutcnt * sizeof(std::uint8_t);
|
||||
|
||||
if (v2_offset + data_block_length + sizeof(Header) > size) {
|
||||
return nullptr;
|
||||
|
@ -81,7 +84,7 @@ std::unique_ptr<DataImpl> ReadData(const u_int8_t *data, std::size_t size) {
|
|||
|
||||
const auto copy =
|
||||
[]<typename Type>(std::unique_ptr<Type[]> &array, int length,
|
||||
const u_int8_t *const &ptr) -> const u_int8_t * {
|
||||
const std::uint8_t *const &ptr) -> const std::uint8_t * {
|
||||
const std::size_t region_length = length * sizeof(Type);
|
||||
array = std::make_unique<Type[]>(length);
|
||||
std::memcpy(array.get(), ptr, region_length);
|
||||
|
@ -110,16 +113,16 @@ std::unique_ptr<DataImpl> ReadData(const u_int8_t *data, std::size_t size) {
|
|||
return impl;
|
||||
}
|
||||
|
||||
static void PushToBuffer(std::vector<u_int8_t> &buffer, const void *data,
|
||||
static void PushToBuffer(std::vector<std::uint8_t> &buffer, const void *data,
|
||||
std::size_t size) {
|
||||
const u_int8_t *p{reinterpret_cast<const u_int8_t *>(data)};
|
||||
const std::uint8_t *p{reinterpret_cast<const std::uint8_t *>(data)};
|
||||
for (std::size_t i = 0; i < size; i++) {
|
||||
buffer.push_back(*p);
|
||||
p++;
|
||||
}
|
||||
}
|
||||
|
||||
void DataImpl::ReformatNintendo(std::vector<u_int8_t> &buffer) const {
|
||||
void DataImpl::ReformatNintendo(std::vector<std::uint8_t> &buffer) const {
|
||||
buffer.clear();
|
||||
|
||||
Header header_copy{header};
|
||||
|
@ -131,7 +134,7 @@ void DataImpl::ReformatNintendo(std::vector<u_int8_t> &buffer) const {
|
|||
PushToBuffer(buffer, transition_times.get(),
|
||||
header.timecnt * sizeof(int64_t));
|
||||
PushToBuffer(buffer, transition_types.get(),
|
||||
header.timecnt * sizeof(u_int8_t));
|
||||
header.timecnt * sizeof(std::uint8_t));
|
||||
PushToBuffer(buffer, local_time_type_records.get(),
|
||||
header.typecnt * sizeof(TimeTypeRecord));
|
||||
PushToBuffer(buffer, time_zone_designations.get(),
|
||||
|
|
39
externals/nx_tzdb/tzdb_to_nx/src/tzdb2nx/tzif.h
vendored
39
externals/nx_tzdb/tzdb_to_nx/src/tzdb2nx/tzif.h
vendored
|
@ -1,22 +1,25 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <array>
|
||||
#include <memory>
|
||||
#include <sys/types.h>
|
||||
#include <cstdint>
|
||||
#include <vector>
|
||||
|
||||
namespace Tzif {
|
||||
|
||||
typedef struct {
|
||||
char magic[4];
|
||||
u_int8_t version;
|
||||
u_int8_t reserved[15];
|
||||
u_int32_t isutcnt;
|
||||
u_int32_t isstdcnt;
|
||||
u_int32_t leapcnt;
|
||||
u_int32_t timecnt;
|
||||
u_int32_t typecnt;
|
||||
u_int32_t charcnt;
|
||||
std::uint8_t version;
|
||||
std::uint8_t reserved[15];
|
||||
std::uint32_t isutcnt;
|
||||
std::uint32_t isstdcnt;
|
||||
std::uint32_t leapcnt;
|
||||
std::uint32_t timecnt;
|
||||
std::uint32_t typecnt;
|
||||
std::uint32_t charcnt;
|
||||
} Header;
|
||||
static_assert(sizeof(Header) == 0x2c);
|
||||
|
||||
|
@ -34,9 +37,9 @@ public:
|
|||
|
||||
#pragma pack(push, 1)
|
||||
typedef struct {
|
||||
u_int32_t utoff;
|
||||
u_int8_t dst;
|
||||
u_int8_t idx;
|
||||
std::uint32_t utoff;
|
||||
std::uint8_t dst;
|
||||
std::uint8_t idx;
|
||||
} TimeTypeRecord;
|
||||
#pragma pack(pop)
|
||||
static_assert(sizeof(TimeTypeRecord) == 0x6);
|
||||
|
@ -46,7 +49,7 @@ public:
|
|||
explicit Data() = default;
|
||||
virtual ~Data() = default;
|
||||
|
||||
virtual void ReformatNintendo(std::vector<u_int8_t> &buffer) const = 0;
|
||||
virtual void ReformatNintendo(std::vector<std::uint8_t> &buffer) const = 0;
|
||||
};
|
||||
|
||||
class DataImpl : public Data {
|
||||
|
@ -54,19 +57,19 @@ public:
|
|||
explicit DataImpl() = default;
|
||||
~DataImpl() override = default;
|
||||
|
||||
void ReformatNintendo(std::vector<u_int8_t> &buffer) const override;
|
||||
void ReformatNintendo(std::vector<std::uint8_t> &buffer) const override;
|
||||
|
||||
Header header;
|
||||
Footer footer;
|
||||
|
||||
std::unique_ptr<int64_t[]> transition_times;
|
||||
std::unique_ptr<u_int8_t[]> transition_types;
|
||||
std::unique_ptr<std::uint8_t[]> transition_types;
|
||||
std::unique_ptr<TimeTypeRecord[]> local_time_type_records;
|
||||
std::unique_ptr<int8_t[]> time_zone_designations;
|
||||
std::unique_ptr<u_int8_t[]> standard_indicators;
|
||||
std::unique_ptr<u_int8_t[]> ut_indicators;
|
||||
std::unique_ptr<std::uint8_t[]> standard_indicators;
|
||||
std::unique_ptr<std::uint8_t[]> ut_indicators;
|
||||
};
|
||||
|
||||
std::unique_ptr<DataImpl> ReadData(const u_int8_t *data, std::size_t size);
|
||||
std::unique_ptr<DataImpl> ReadData(const std::uint8_t *data, std::size_t size);
|
||||
|
||||
} // namespace Tzif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue