diff --git a/.github/workflows/MacOS_Build.yml b/.github/workflows/MacOS_Build.yml index 942452d8..5e0de4bc 100644 --- a/.github/workflows/MacOS_Build.yml +++ b/.github/workflows/MacOS_Build.yml @@ -23,13 +23,10 @@ jobs: - name: Fetch submodules run: git submodule update --init --recursive - - name: Install LLVM # MacOS comes with "AppleClang" instead of regular Clang, and it can't build the project because no proper C++20 - run: brew install llvm - - name: Configure CMake # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type - run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCMAKE_C_COMPILER=/usr/local/opt/llvm/bin/clang -DCMAKE_CXX_COMPILER=/usr/local/opt/llvm/bin/clang++ -DENABLE_USER_BUILD=ON + run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DENABLE_USER_BUILD=ON - name: Build # Build your program with the given configuration diff --git a/.gitignore b/.gitignore index de5ebd86..0f3828b9 100644 --- a/.gitignore +++ b/.gitignore @@ -8,7 +8,7 @@ #Clion Files .idea/ -cmake-build-* +cmake-build-*/ Debug/ Release/ diff --git a/src/core/memory.cpp b/src/core/memory.cpp index 37c13c7d..dfa155a2 100644 --- a/src/core/memory.cpp +++ b/src/core/memory.cpp @@ -3,6 +3,7 @@ #include "resource_limits.hpp" #include #include // For time since epoch +#include using namespace KernelMemoryTypes; @@ -424,9 +425,20 @@ void Memory::mirrorMapping(u32 destAddress, u32 sourceAddress, u32 size) { u64 Memory::timeSince3DSEpoch() { using namespace std::chrono; - // ms since Jan 1 1970 - milliseconds ms = duration_cast(system_clock::now().time_since_epoch()); - // ms between Jan 1 1900 and Jan 1 1970 (2208988800 seconds elapsed between the two) - constexpr u64 offset = 2208988800ull * 1000; - return ms.count() + offset; + std::time_t rawTime = std::time(nullptr); // Get current UTC time + auto localTime = std::localtime(&rawTime); // Convert to local time + + bool daylightSavings = localTime->tm_isdst > 0; // Get if time includes DST + localTime = std::gmtime(&rawTime); + + // Use gmtime + mktime to calculate difference between local time and UTC + auto timezoneDifference = rawTime - std::mktime(localTime); + if (daylightSavings) { + timezoneDifference += 60ull * 60ull; // Add 1 hour (60 seconds * 60 minutes) + } + + // seconds between Jan 1 1900 and Jan 1 1970 + constexpr u64 offset = 2208988800ull; + milliseconds ms = duration_cast(seconds(rawTime + timezoneDifference + offset)); + return ms.count(); } \ No newline at end of file