From 0eb1274b10dc5462a6b6cb0083f0f64dc9fccc0e Mon Sep 17 00:00:00 2001 From: Mazunki Hoksaas Date: Sat, 18 Oct 2025 16:13:05 +0200 Subject: [PATCH 1/9] add missing dependencies --- api/kernel/rng.hpp | 3 +++ api/net/buffer_store.hpp | 3 +++ src/kernel/events.cpp | 3 +++ src/kernel/timers.cpp | 3 +++ src/net/buffer_store.cpp | 3 +++ src/platform/x86_pc/acpi.hpp | 3 +++ src/platform/x86_pc/apic_revenant.cpp | 1 + src/platform/x86_pc/x2apic.hpp | 3 +++ src/platform/x86_pc/xapic.hpp | 3 +++ src/util/logger.cpp | 1 + src/util/statman.cpp | 3 +++ test/kernel/integration/rng/service.cpp | 1 + test/kernel/integration/spinlocks/service.cpp | 1 + test/kernel/unit/spinlocks.cpp | 1 + 14 files changed, 32 insertions(+) diff --git a/api/kernel/rng.hpp b/api/kernel/rng.hpp index 21db5bf418..ba975573e6 100644 --- a/api/kernel/rng.hpp +++ b/api/kernel/rng.hpp @@ -24,6 +24,9 @@ #include #include #include +#ifdef INCLUDEOS_SMP_ENABLE +#include +#endif // Incorporate seed data into the system RNG state extern void rng_absorb(const void* input, size_t bytes); diff --git a/api/net/buffer_store.hpp b/api/net/buffer_store.hpp index 152a155fb1..9694e9a089 100644 --- a/api/net/buffer_store.hpp +++ b/api/net/buffer_store.hpp @@ -23,6 +23,9 @@ #include #include #include +#ifdef INCLUDEOS_SMP_ENABLE +#include +#endif namespace net { diff --git a/src/kernel/events.cpp b/src/kernel/events.cpp index b091bc599e..5c6584436d 100644 --- a/src/kernel/events.cpp +++ b/src/kernel/events.cpp @@ -22,6 +22,9 @@ #include #include //#define DEBUG_SMP +#ifdef INCLUDEOS_SMP_ENABLE +#include +#endif static SMP::Array managers; static Spinlock em_lock_; diff --git a/src/kernel/timers.cpp b/src/kernel/timers.cpp index 74cf363617..51dbc2a80f 100644 --- a/src/kernel/timers.cpp +++ b/src/kernel/timers.cpp @@ -8,6 +8,9 @@ #include #include #include +#ifdef INCLUDEOS_SMP_ENABLE +#include +#endif using namespace std::chrono; typedef Timers::duration_t duration_t; diff --git a/src/net/buffer_store.cpp b/src/net/buffer_store.cpp index 13eecba202..c6d7e9ebbc 100644 --- a/src/net/buffer_store.cpp +++ b/src/net/buffer_store.cpp @@ -23,6 +23,9 @@ #include #include #include +#ifdef INCLUDEOS_SMP_ENABLE +#include +#endif #ifdef __MACH__ extern void* aligned_alloc(size_t alignment, size_t size); diff --git a/src/platform/x86_pc/acpi.hpp b/src/platform/x86_pc/acpi.hpp index e9cb1e2e69..68f3871661 100644 --- a/src/platform/x86_pc/acpi.hpp +++ b/src/platform/x86_pc/acpi.hpp @@ -23,6 +23,9 @@ #include #include #include +#ifdef INCLUDEOS_SMP_ENABLE +#include +#endif namespace x86 { diff --git a/src/platform/x86_pc/apic_revenant.cpp b/src/platform/x86_pc/apic_revenant.cpp index f3354ca719..022c9477fd 100644 --- a/src/platform/x86_pc/apic_revenant.cpp +++ b/src/platform/x86_pc/apic_revenant.cpp @@ -8,6 +8,7 @@ #include #include #include +#include namespace x86 { extern void initialize_cpu_tables_for_cpu(int); diff --git a/src/platform/x86_pc/x2apic.hpp b/src/platform/x86_pc/x2apic.hpp index 8bf1946d37..d8de6b5fa9 100644 --- a/src/platform/x86_pc/x2apic.hpp +++ b/src/platform/x86_pc/x2apic.hpp @@ -26,6 +26,9 @@ #include #include #include +#ifdef INCLUDEOS_SMP_ENABLE +#include +#endif /// x2APIC MSR offsets /// #define x2APIC_ID 0x02 diff --git a/src/platform/x86_pc/xapic.hpp b/src/platform/x86_pc/xapic.hpp index 75838d5a89..d9bc136bdf 100644 --- a/src/platform/x86_pc/xapic.hpp +++ b/src/platform/x86_pc/xapic.hpp @@ -26,6 +26,9 @@ #include #include #include +#ifdef INCLUDEOS_SMP_ENABLE +#include +#endif /// xAPIC MMIO offsets /// #define xAPIC_ID 0x20 diff --git a/src/util/logger.cpp b/src/util/logger.cpp index 2ca9b411ab..e165bf083a 100644 --- a/src/util/logger.cpp +++ b/src/util/logger.cpp @@ -16,6 +16,7 @@ // limitations under the License. #include +#include #include Logger::Logger(Log& log, Log::size_type pos) diff --git a/src/util/statman.cpp b/src/util/statman.cpp index 41062f847f..87cfbc3e50 100644 --- a/src/util/statman.cpp +++ b/src/util/statman.cpp @@ -18,6 +18,9 @@ #include #include #include +#ifdef INCLUDEOS_SMP_ENABLE +#include +#endif // this is done to make sure construction only happens here static Statman statman_instance; diff --git a/test/kernel/integration/rng/service.cpp b/test/kernel/integration/rng/service.cpp index 4791cabfbd..fca167b4e7 100644 --- a/test/kernel/integration/rng/service.cpp +++ b/test/kernel/integration/rng/service.cpp @@ -22,6 +22,7 @@ #include #include #include // hist +#include // time() static const size_t BUFLEN = 4096; void Service::start() diff --git a/test/kernel/integration/spinlocks/service.cpp b/test/kernel/integration/spinlocks/service.cpp index aece41467e..b12e519b0f 100644 --- a/test/kernel/integration/spinlocks/service.cpp +++ b/test/kernel/integration/spinlocks/service.cpp @@ -1,6 +1,7 @@ #include #include #include +#include void Service::start() { diff --git a/test/kernel/unit/spinlocks.cpp b/test/kernel/unit/spinlocks.cpp index e6d462c44c..ec54395404 100644 --- a/test/kernel/unit/spinlocks.cpp +++ b/test/kernel/unit/spinlocks.cpp @@ -2,6 +2,7 @@ #include #include #include +#include CASE("lock/unlock") { From f00392d865ca07d1a2c041a15a6e73681a49fa1c Mon Sep 17 00:00:00 2001 From: Mazunki Hoksaas Date: Sat, 18 Oct 2025 16:33:22 +0200 Subject: [PATCH 2/9] replace deprecated std::aligned_storage with custom sbo buffer --- api/util/delegate.hpp | 42 +++++++++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/api/util/delegate.hpp b/api/util/delegate.hpp index 4343d1234e..f4b4d04b18 100644 --- a/api/util/delegate.hpp +++ b/api/util/delegate.hpp @@ -21,6 +21,7 @@ #include #include #include +#include // std::launder // ----- SYNOPSIS ----- @@ -68,6 +69,20 @@ class empty_delegate_error : public std::bad_function_call } }; +template +struct sbo_storage { + alignas(Align) std::byte data[Size]; + + template + constexpr T& as() noexcept { + return *std::launder(reinterpret_cast(data)); + } + template + constexpr const T& as() const noexcept { + return *std::launder(reinterpret_cast(data)); + } +}; + // ----- IMPLEMENTATION ----- namespace detail @@ -163,7 +178,7 @@ template< > class inplace_triv { public: - using storage_t = std::aligned_storage_t; + using storage_t = sbo_storage; using invoke_ptr_t = R(*)(storage_t&, Args&&...); explicit inplace_triv() noexcept : @@ -178,7 +193,10 @@ template< > explicit inplace_triv(T&& closure) : invoke_ptr_{ static_cast( [](storage_t& storage, Args&&... args) -> R - { return reinterpret_cast(storage)(std::forward(args)...); } + { + auto& closure = storage.template as(); + return closure(std::forward(args)...); + } )} { static_assert(sizeof(C) <= size, @@ -211,12 +229,12 @@ template< bool empty() const noexcept { - return reinterpret_cast(storage_) == nullptr; + return storage_.template as () == nullptr; } template T* target() const noexcept { - return reinterpret_cast(&storage_); + return &storage_.template as(); } private: @@ -233,7 +251,7 @@ template< > class inplace { public: - using storage_t = std::aligned_storage_t; + using storage_t = sbo_storage; using invoke_ptr_t = R(*)(storage_t&, Args&&...); using copy_ptr_t = void(*)(storage_t&, storage_t&); @@ -251,12 +269,18 @@ template< > explicit inplace(T&& closure) noexcept : invoke_ptr_{ static_cast( [](storage_t& storage, Args&&... args) -> R - { return reinterpret_cast(storage)(std::forward(args)...); } + { + auto& closure = storage.template as(); + return closure(std::forward(args)...); + } ) }, copy_ptr_{ copy_op() }, destructor_ptr_{ static_cast( [](storage_t& storage) noexcept -> void - { reinterpret_cast(storage).~C(); } + { + auto& closure = storage.template as(); + closure.~C(); + } ) } { static_assert(sizeof(C) <= size, @@ -337,7 +361,7 @@ template< template T* target() const noexcept { - return reinterpret_cast(&storage_); + return &storage_.template as (); } private: @@ -357,7 +381,7 @@ template< { return [](S& dst, S& src) noexcept -> void { - new(&dst)T{ reinterpret_cast(src) }; + new(&dst)T{ src.template as() }; }; } From cbdad21ccda4e6b176f04dcd42f0c782f0203896 Mon Sep 17 00:00:00 2001 From: Mazunki Hoksaas Date: Sat, 18 Oct 2025 16:41:49 +0200 Subject: [PATCH 3/9] replace deprecated std::aligned_storage with alignas() --- api/util/fixed_vector.hpp | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/api/util/fixed_vector.hpp b/api/util/fixed_vector.hpp index 3508ac70e6..7c5e508f9a 100644 --- a/api/util/fixed_vector.hpp +++ b/api/util/fixed_vector.hpp @@ -29,6 +29,7 @@ #include #include #include +#include enum class Fixedvector_Init { UNINIT @@ -54,14 +55,14 @@ class Fixed_vector { T& push_back(const T& e) noexcept { assert(count < N); (*this)[count] = e; - return (*this)[count++]; + return reinterpret_raw()[count++]; } // construct into template T& emplace_back(Args&&... args) noexcept { assert(count < N); - new (&element[count]) T(args...); - return (*this)[count++]; + new (static_cast(reinterpret_raw() + count)) T(std::forward(args)...); + return reinterpret_raw()[count++]; } /** @@ -108,36 +109,36 @@ class Fixed_vector { { return capacity() - size(); } T& operator[] (uint32_t i) noexcept { - return *(T*) (element + i); + return reinterpret_raw()[i]; } T* at (uint32_t i) noexcept { if (i >= size()) return nullptr; - return (T*) (element + i); + return reinterpret_raw() + i; } T* data() noexcept { - return (T*) &element[0]; + return reinterpret_raw(); } T* begin() noexcept { - return (T*) &element[0]; + return reinterpret_raw(); } T* end() noexcept { - return (T*) &element[count]; + return reinterpret_raw() + count; } const T* data() const noexcept { - return (T*) &element[0]; + return reinterpret_raw(); } const T* begin() const noexcept { - return (T*) &element[0]; + return reinterpret_raw(); } const T* end() const noexcept { - return (T*) &element[count]; + return reinterpret_raw() + count; } T& back() noexcept { assert(not empty()); - return (T&)element[count-1]; + return reinterpret_raw()[count-1]; } constexpr int capacity() const noexcept { @@ -151,7 +152,7 @@ class Fixed_vector { // source of the same type T, with @size elements // Note: size and capacity are not related, and they don't have to match void copy(T* src, uint32_t size) { - memcpy(element, src, size * sizeof(T)); + memcpy(reinterpret_raw(), src, size * sizeof(T)); count = size; } @@ -163,7 +164,10 @@ class Fixed_vector { private: uint32_t count; - typename std::aligned_storage::type element[N]; + alignas(T) std::byte storage[sizeof(T) * N]; + + T* reinterpret_raw() noexcept { return std::launder(reinterpret_cast< T*>(storage)); } + const T* reinterpret_raw() const noexcept { return std::launder(reinterpret_cast(storage)); } }; From c9c926f57df911f37d402695b544b9a0d40cb480 Mon Sep 17 00:00:00 2001 From: Mazunki Hoksaas Date: Thu, 23 Oct 2025 19:20:51 +0200 Subject: [PATCH 4/9] bump c++20 to c++23 --- cmake/includeos.cmake | 2 +- cmake/library.cmake | 4 ++-- cmake/linux.service.cmake | 4 ++-- cmake/os.cmake | 2 +- lib/LiveUpdate/CMakeLists.txt | 2 +- test/CMakeLists.txt | 4 ++-- vmbuild/CMakeLists.txt | 6 +++--- 7 files changed, 12 insertions(+), 12 deletions(-) diff --git a/cmake/includeos.cmake b/cmake/includeos.cmake index f8a06bf979..6b0eb87b1c 100644 --- a/cmake/includeos.cmake +++ b/cmake/includeos.cmake @@ -1,6 +1,6 @@ #includeos standard settings for compilation and linkers -set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) diff --git a/cmake/library.cmake b/cmake/library.cmake index cca47bd3d9..53cd836053 100644 --- a/cmake/library.cmake +++ b/cmake/library.cmake @@ -57,11 +57,11 @@ if (debug) endif() if (CMAKE_COMPILER_IS_GNUCC) - set(CMAKE_CXX_FLAGS "-m32 -MMD ${CAPABS} ${WARNS} -nostdlib -fno-omit-frame-pointer -c -std=c++20 -D_LIBCPP_HAS_NO_THREADS=1") + set(CMAKE_CXX_FLAGS "-m32 -MMD ${CAPABS} ${WARNS} -nostdlib -fno-omit-frame-pointer -c -std=c++23 -D_LIBCPP_HAS_NO_THREADS=1") set(CMAKE_C_FLAGS "-m32 -MMD ${CAPABS} ${WARNS} -nostdlib -fno-omit-frame-pointer -c") else() # these kinda work with llvm - set(CMAKE_CXX_FLAGS "-MMD ${CAPABS} ${OPTIMIZE} ${WARNS} -nostdlib -nostdlibinc -fno-omit-frame-pointer -c -std=c++20 -fno-threadsafe-statics -D_LIBCPP_HAS_NO_THREADS=1") + set(CMAKE_CXX_FLAGS "-MMD ${CAPABS} ${OPTIMIZE} ${WARNS} -nostdlib -nostdlibinc -fno-omit-frame-pointer -c -std=c++23 -fno-threadsafe-statics -D_LIBCPP_HAS_NO_THREADS=1") set(CMAKE_C_FLAGS "-MMD ${CAPABS} ${OPTIMIZE} ${WARNS} -nostdlib -nostdlibinc -fno-omit-frame-pointer -c") endif() diff --git a/cmake/linux.service.cmake b/cmake/linux.service.cmake index e571bb34f1..70af96b41a 100644 --- a/cmake/linux.service.cmake +++ b/cmake/linux.service.cmake @@ -2,9 +2,9 @@ # Linux Userspace CMake script # #################################### -#set(CMAKE_CXX_STANDARD 20) +#set(CMAKE_CXX_STANDARD 23) set(COMMON "-g -O2 -Wall -Wextra") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++20 ${COMMON}") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++23 ${COMMON}") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${COMMON}") option(BUILD_PLUGINS "Build all plugins as libraries" OFF) diff --git a/cmake/os.cmake b/cmake/os.cmake index bca6ddc079..a82515fe61 100644 --- a/cmake/os.cmake +++ b/cmake/os.cmake @@ -2,7 +2,7 @@ if (NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Release") endif() -set (CMAKE_CXX_STANDARD 20) +set (CMAKE_CXX_STANDARD 23) set (CMAKE_CXX_STANDARD_REQUIRED ON) diff --git a/lib/LiveUpdate/CMakeLists.txt b/lib/LiveUpdate/CMakeLists.txt index 4809165b08..f9a5a8b36b 100644 --- a/lib/LiveUpdate/CMakeLists.txt +++ b/lib/LiveUpdate/CMakeLists.txt @@ -4,7 +4,7 @@ set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) project(includeos C CXX) -set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index b26c2a6aa9..b26c16e097 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.31.6) project(unittests C CXX) -set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) @@ -46,7 +46,7 @@ if (DEBUG_INFO) set(NO_DEBUG "") endif() -set(CMAKE_CXX_FLAGS "-g -O0 -std=c++20 -Wall -Wextra -Wno-frame-address -Wno-unused-function -Wno-int-to-pointer-cast -D__id_t_defined -DUNITTESTS -DURI_THROW_ON_ERROR ${NO_INFO} ${NO_DEBUG} -DGSL_THROW_ON_CONTRACT_VIOLATION -Dlest_FEATURE_AUTO_REGISTER=1 -DHAVE_LEST_MAIN -DPAGE_SIZE=4096") +set(CMAKE_CXX_FLAGS "-g -O0 -std=c++23 -Wall -Wextra -Wno-frame-address -Wno-unused-function -Wno-int-to-pointer-cast -D__id_t_defined -DUNITTESTS -DURI_THROW_ON_ERROR ${NO_INFO} ${NO_DEBUG} -DGSL_THROW_ON_CONTRACT_VIOLATION -Dlest_FEATURE_AUTO_REGISTER=1 -DHAVE_LEST_MAIN -DPAGE_SIZE=4096") set(TEST ${CMAKE_CURRENT_SOURCE_DIR}) diff --git a/vmbuild/CMakeLists.txt b/vmbuild/CMakeLists.txt index c06be578ae..a76e7c181d 100644 --- a/vmbuild/CMakeLists.txt +++ b/vmbuild/CMakeLists.txt @@ -4,15 +4,15 @@ project (vmbuilder) include(CheckCXXCompilerFlag) set(CMAKE_BUILD_TYPE Release) -check_cxx_compiler_flag(-std=c++20 HAVE_FLAG_STD_CXX20) +check_cxx_compiler_flag(-std=c++23 HAVE_FLAG_STD_CXX20) if(NOT HAVE_FLAG_STD_CXX20) - message(FATAL_ERROR "The provided compiler: " ${CMAKE_CXX_COMPILER} "\n does not support c++20 standard please make sure your CC and CXX points to a compiler that supports c++20") + message(FATAL_ERROR "The provided compiler: " ${CMAKE_CXX_COMPILER} "\n does not support c++23 standard please make sure your CC and CXX points to a compiler that supports c++23") endif() set(SOURCES vmbuild.cpp) set(ELF_SYMS_SOURCES elf_syms.cpp ../src/util/crc32.cpp) -set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_FLAGS "-Wall -Wextra -O2 -g") From 34ba7e8af4760722e7e4a102d282f9326db8ec6a Mon Sep 17 00:00:00 2001 From: Mazunki Hoksaas Date: Thu, 23 Oct 2025 19:55:46 +0200 Subject: [PATCH 5/9] make sure unique_ptr has a complete type upon invocation Since C++23 std::unique_ptr is constexpr See: https://en.cppreference.com/w/cpp/memory/unique_ptr.html --- api/posix/tcp_fd.hpp | 42 ++++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/api/posix/tcp_fd.hpp b/api/posix/tcp_fd.hpp index fad3db4180..82d387ae18 100644 --- a/api/posix/tcp_fd.hpp +++ b/api/posix/tcp_fd.hpp @@ -21,9 +21,30 @@ #include "sockfd.hpp" -struct TCP_FD_Conn; struct TCP_FD_Listen; +struct TCP_FD_Conn +{ + TCP_FD_Conn(net::tcp::Connection_ptr c); + ~TCP_FD_Conn() = default; + + void retrieve_buffer(); + void set_default_read(); + + ssize_t send(const void *, size_t, int fl); + ssize_t recv(void*, size_t, int fl); + int close(); + int shutdown(int); + + std::string to_string() const { return conn->to_string(); } + + net::tcp::Connection_ptr conn; + net::tcp::buffer_t buffer; + size_t buf_offset; + bool recv_disc = false; +}; + + class TCP_FD : public SockFD { public: using id_t = int; @@ -68,25 +89,6 @@ class TCP_FD : public SockFD { friend struct TCP_FD_Listen; }; -struct TCP_FD_Conn -{ - TCP_FD_Conn(net::tcp::Connection_ptr c); - - void retrieve_buffer(); - void set_default_read(); - - ssize_t send(const void *, size_t, int fl); - ssize_t recv(void*, size_t, int fl); - int close(); - int shutdown(int); - - std::string to_string() const { return conn->to_string(); } - - net::tcp::Connection_ptr conn; - net::tcp::buffer_t buffer; - size_t buf_offset; - bool recv_disc = false; -}; struct TCP_FD_Listen { From 3a4f01acbcc67fe86f0016d5448181c6b613117a Mon Sep 17 00:00:00 2001 From: Mazunki Hoksaas Date: Thu, 23 Oct 2025 20:24:57 +0200 Subject: [PATCH 6/9] bump tests from c11 to c23 --- test/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index b26c16e097..01f28689d4 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -34,7 +34,7 @@ FILE(WRITE ${CMAKE_BINARY_DIR}/version.h #include_directories(${CMAKE_BINARY_DIR}) -set(CMAKE_C_FLAGS "-g -O0 -std=c11 -Wall -Wextra") +set(CMAKE_C_FLAGS "-g -O0 -std=c23 -Wall -Wextra") set(NO_INFO "-DNO_INFO=1") if(INFO) From cd56a3188649fc7d138bb6b721f5690d8d16b752 Mon Sep 17 00:00:00 2001 From: Mazunki Hoksaas Date: Thu, 23 Oct 2025 20:44:12 +0200 Subject: [PATCH 7/9] bump llvm 19=>20 --- overlay.nix | 2 +- unittests.nix | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/overlay.nix b/overlay.nix index 3dd7506890..0839577a51 100644 --- a/overlay.nix +++ b/overlay.nix @@ -5,7 +5,7 @@ final: prev: { stdenvIncludeOS = prev.pkgsStatic.lib.makeScope prev.pkgsStatic.newScope (self: { - llvmPkgs = prev.pkgsStatic.llvmPackages_19; + llvmPkgs = prev.pkgsStatic.llvmPackages_20; stdenv = self.llvmPkgs.libcxxStdenv; # Use this as base stdenv # Import unpatched musl for building libcxx. Libcxx needs some linux headers to be passed through. diff --git a/unittests.nix b/unittests.nix index d5ec8cd5e0..322f28578a 100644 --- a/unittests.nix +++ b/unittests.nix @@ -1,6 +1,6 @@ { nixpkgs ? ./pinned.nix, pkgs ? import nixpkgs { config = { }; overlays = [ ]; }, - stdenv ? pkgs.llvmPackages_19.libcxxStdenv, + stdenv ? pkgs.llvmPackages_20.libcxxStdenv, withCcache ? false, }: stdenv.mkDerivation rec { From 76f3df6e3d2a9b43a84f486666f2a858d43c06d4 Mon Sep 17 00:00:00 2001 From: Mazunki Hoksaas Date: Thu, 23 Oct 2025 20:44:35 +0200 Subject: [PATCH 8/9] ensure alignof has a complete type of fs::Dirent --- api/fs/common.hpp | 4 ---- api/fs/dirent.hpp | 6 ++++++ 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/api/fs/common.hpp b/api/fs/common.hpp index 5954c53a0a..2ddb00be57 100644 --- a/api/fs/common.hpp +++ b/api/fs/common.hpp @@ -205,10 +205,6 @@ namespace fs { { error_t error; Dirvec_ptr entries; - auto begin() { return entries->begin(); } - auto end() { return entries->end(); } - auto cbegin() const { return entries->cbegin(); } - auto cend() const { return entries->cend(); } }; } //< fs diff --git a/api/fs/dirent.hpp b/api/fs/dirent.hpp index a1549e6517..9c5c91d638 100644 --- a/api/fs/dirent.hpp +++ b/api/fs/dirent.hpp @@ -194,5 +194,11 @@ namespace fs { } //< namespace fs +namespace fs { + inline auto begin(List& l) { return l.entries->begin(); } + inline auto end(List& l) { return l.entries->end(); } + inline auto cbegin(const List& l) { return l.entries->cbegin(); } + inline auto cend(const List& l) { return l.entries->cend(); } +} //< namespace fs #endif //< FS_DIRENT_HPP From 3741a2a9fed6973d89e894af99d511b291de4b9e Mon Sep 17 00:00:00 2001 From: Mazunki Hoksaas Date: Thu, 23 Oct 2025 21:14:43 +0200 Subject: [PATCH 9/9] fix missing mutex include --- api/util/alloc_buddy.hpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/api/util/alloc_buddy.hpp b/api/util/alloc_buddy.hpp index bc6e291fd2..798f4ceccc 100644 --- a/api/util/alloc_buddy.hpp +++ b/api/util/alloc_buddy.hpp @@ -25,6 +25,9 @@ #include #include #include +#ifdef INCLUDEOS_SMP_ENABLE +#include +#endif #include #include