diff options
| author | Stefan Boberg <[email protected]> | 2025-11-07 14:49:13 +0100 |
|---|---|---|
| committer | GitHub Enterprise <[email protected]> | 2025-11-07 14:49:13 +0100 |
| commit | 24e43a913f29ac3b314354e8ce5175f135bcc64f (patch) | |
| tree | ca442937ceeb63461012b33a4576e9835099f106 /src | |
| parent | get oplog attachments (#622) (diff) | |
| download | zen-24e43a913f29ac3b314354e8ce5175f135bcc64f.tar.xz zen-24e43a913f29ac3b314354e8ce5175f135bcc64f.zip | |
switch to xmake for package management (#611)
This change removes our dependency on vcpkg for package management, in favour of bringing some code in-tree in the `thirdparty` folder as well as using the xmake build-in package management feature. For the latter, all the package definitions are maintained in the zen repo itself, in the `repo` folder.
It should now also be easier to build the project as it will no longer depend on having the right version of vcpkg installed, which has been a common problem for new people coming in to the codebase. Now you should only need xmake to build.
* Bumps xmake requirement on github runners to 2.9.9 to resolve an issue where xmake on Windows invokes cmake with `v144` toolchain which does not exist
* BLAKE3 is now in-tree at `thirdparty/blake3`
* cpr is now in-tree at `thirdparty/cpr`
* cxxopts is now in-tree at `thirdparty/cxxopts`
* fmt is now in-tree at `thirdparty/fmt`
* robin-map is now in-tree at `thirdparty/robin-map`
* ryml is now in-tree at `thirdparty/ryml`
* sol2 is now in-tree at `thirdparty/sol2`
* spdlog is now in-tree at `thirdparty/spdlog`
* utfcpp is now in-tree at `thirdparty/utfcpp`
* xmake package repo definitions is in `repo`
* implemented support for sanitizers. ASAN is supported on windows, TSAN, UBSAN, MSAN etc are supported on Linux/MacOS though I have not yet tested it extensively on MacOS
* the zencore encryption implementation also now supports using mbedTLS which is used on MacOS, though for now we still use openssl on Linux
* crashpad
* bumps libcurl to 8.11.0 (from 8.8.0) which should address a rare build upload bug
Diffstat (limited to 'src')
28 files changed, 334 insertions, 94 deletions
diff --git a/src/zen/xmake.lua b/src/zen/xmake.lua index f225984c9..55d073a86 100644 --- a/src/zen/xmake.lua +++ b/src/zen/xmake.lua @@ -6,6 +6,8 @@ target("zen") add_files("**.cpp") add_files("zen.cpp", {unity_ignored = true }) add_deps("zencore", "zenhttp", "zenremotestore", "zenstore", "zenutil") + add_deps("cxxopts", "fmt") + add_packages("json11") add_includedirs(".") set_symbols("debug") @@ -27,5 +29,3 @@ target("zen") add_ldflags("-framework Security") add_ldflags("-framework SystemConfiguration") end - - add_packages("vcpkg::cxxopts", "vcpkg::mimalloc", "vcpkg::fmt") diff --git a/src/zenbase/include/zenbase/zenbase.h b/src/zenbase/include/zenbase/zenbase.h index 63a7e9f88..2aec1f314 100644 --- a/src/zenbase/include/zenbase/zenbase.h +++ b/src/zenbase/include/zenbase/zenbase.h @@ -83,6 +83,7 @@ __pragma(warning(disable : 4267)) /* C4267: '=': conversion from 'size_t' to 'US' */ \ __pragma(warning(disable : 4127)) /* C4127: conditional expression is constant */ \ __pragma(warning(disable : 4189)) /* C4189: local variable is initialized but not referenced */ \ + __pragma(warning(disable : 4702)) /* C4702: unreachable code */ \ __pragma(warning(disable : 5105)) /* C5105: macro expansion producing 'defined' has undefined behavior */ # elif ZEN_COMPILER_CLANG # define ZEN_THIRD_PARTY_INCLUDES_START \ diff --git a/src/zencore-test/xmake.lua b/src/zencore-test/xmake.lua index 8bf5231eb..f0e3d45ac 100644 --- a/src/zencore-test/xmake.lua +++ b/src/zencore-test/xmake.lua @@ -6,4 +6,4 @@ target("zencore-test") add_headerfiles("**.h") add_files("*.cpp") add_deps("zencore") - add_packages("vcpkg::doctest") + add_deps("doctest") diff --git a/src/zencore/compactbinaryyaml.cpp b/src/zencore/compactbinaryyaml.cpp index 3a9705684..5122e952a 100644 --- a/src/zencore/compactbinaryyaml.cpp +++ b/src/zencore/compactbinaryyaml.cpp @@ -15,8 +15,8 @@ #include <vector> ZEN_THIRD_PARTY_INCLUDES_START -#include <ryml/ryml.hpp> -#include <ryml/ryml_std.hpp> +#include <ryml.hpp> +#include <ryml_std.hpp> ZEN_THIRD_PARTY_INCLUDES_END namespace zen { diff --git a/src/zencore/crypto.cpp b/src/zencore/crypto.cpp index 78bea0c17..09eebb6ae 100644 --- a/src/zencore/crypto.cpp +++ b/src/zencore/crypto.cpp @@ -9,14 +9,37 @@ #include <string> #include <string_view> +// On Windows we can use the built-in BCrypt API, on other platforms we currently +// support either OpenSSL or mbedTLS. The preference is to use OpenSSL if available +// mostly for historical reasons. We should investigate making mbedTLS the default +// on non-Windows platforms in future as it is more lightweight. + +#if ZEN_PLATFORM_WINDOWS +# define ZEN_USE_BCRYPT 1 +#else +# define ZEN_USE_BCRYPT 0 +#endif + #ifndef ZEN_USE_OPENSSL -# if ZEN_PLATFORM_WINDOWS +# if ZEN_USE_BCRYPT # define ZEN_USE_OPENSSL 0 # else # define ZEN_USE_OPENSSL 1 # endif #endif +#ifndef ZEN_USE_MBEDTLS +# if ZEN_PLATFORM_WINDOWS +# define ZEN_USE_MBEDTLS 0 +# elif !ZEN_USE_OPENSSL +# define ZEN_USE_MBEDTLS 1 +# else +# define ZEN_USE_MBEDTLS 0 +# endif +#endif + +static_assert(ZEN_USE_OPENSSL + ZEN_USE_MBEDTLS + ZEN_USE_BCRYPT <= 1, "Only one crypto backend can be selected"); + ZEN_THIRD_PARTY_INCLUDES_START #include <fmt/format.h> @@ -24,6 +47,8 @@ ZEN_THIRD_PARTY_INCLUDES_START # include <openssl/conf.h> # include <openssl/err.h> # include <openssl/evp.h> +#elif ZEN_USE_MBEDTLS +# include <mbedtls/cipher.h> #else # include <zencore/windows.h> # include <bcrypt.h> @@ -43,8 +68,104 @@ namespace crypto { Encrypt }; -#if ZEN_USE_OPENSSL +#if ZEN_USE_MBEDTLS + + class MbedCipherCtx + { + public: + MbedCipherCtx() { mbedtls_cipher_init(&m_Ctx); } + ~MbedCipherCtx() { mbedtls_cipher_free(&m_Ctx); } + + mbedtls_cipher_context_t* operator&() { return &m_Ctx; } + mbedtls_cipher_context_t* get() { return &m_Ctx; } + + private: + mbedtls_cipher_context_t m_Ctx; + }; + + MemoryView Transform(TransformMode Mode, + MemoryView Key, + MemoryView IV, + MemoryView In, + MutableMemoryView Out, + std::optional<std::string>& Reason) + { + const mbedtls_cipher_info_t* CipherInfo = mbedtls_cipher_info_from_type(MBEDTLS_CIPHER_AES_256_CBC); + if (CipherInfo == nullptr) + { + Reason = "failed to get mbedTLS cipher info"sv; + return MemoryView(); + } + + MbedCipherCtx Ctx; + int ret = mbedtls_cipher_setup(Ctx.get(), CipherInfo); + if (ret != 0) + { + Reason = fmt::format("mbedTLS cipher setup failed, ret={}", ret); + return MemoryView(); + } + + // key length in bits + ret = mbedtls_cipher_setkey(Ctx.get(), + reinterpret_cast<const unsigned char*>(Key.GetData()), + static_cast<int>(Key.GetSize() * 8), + (Mode == TransformMode::Encrypt) ? MBEDTLS_ENCRYPT : MBEDTLS_DECRYPT); + if (ret != 0) + { + Reason = fmt::format("mbedTLS setkey failed, ret={}", ret); + return MemoryView(); + } + + ret = mbedtls_cipher_set_iv(Ctx.get(), reinterpret_cast<const unsigned char*>(IV.GetData()), static_cast<size_t>(IV.GetSize())); + if (ret != 0) + { + Reason = fmt::format("mbedTLS set_iv failed, ret={}", ret); + return MemoryView(); + } + + ret = mbedtls_cipher_set_padding_mode(Ctx.get(), MBEDTLS_PADDING_PKCS7); + + if (ret != 0) + { + Reason = fmt::format("mbedTLS padding mode configuration failed, ret={}", ret); + return MemoryView(); + } + ret = mbedtls_cipher_reset(Ctx.get()); + if (ret != 0) + { + Reason = fmt::format("mbedTLS reset failed, ret={}", ret); + return MemoryView(); + } + + size_t olen = 0; + size_t total = 0; + + ret = mbedtls_cipher_update(Ctx.get(), + reinterpret_cast<const unsigned char*>(In.GetData()), + static_cast<size_t>(In.GetSize()), + reinterpret_cast<unsigned char*>(Out.GetData()), + &olen); + if (ret != 0) + { + Reason = fmt::format("mbedTLS update failed, ret={}", ret); + return MemoryView(); + } + + total = olen; + + ret = mbedtls_cipher_finish(Ctx.get(), reinterpret_cast<unsigned char*>(Out.GetData()) + total, &olen); + if (ret != 0) + { + Reason = fmt::format("mbedTLS finish failed, ret={}", ret); + return MemoryView(); + } + + total += olen; + + return Out.Left(static_cast<size_t>(total)); + } +#elif ZEN_USE_OPENSSL class EvpContext { public: @@ -368,7 +489,9 @@ TEST_CASE("crypto.aes") DecryptionBuffer.resize(PlainText.size() + Aes::BlockSize); MemoryView EncryptedView = Aes::Encrypt(Key, IV, MakeMemoryView(PlainText), MakeMutableMemoryView(EncryptionBuffer), Reason); + CHECK(Reason.has_value() == false); MemoryView DecryptedView = Aes::Decrypt(Key, IV, EncryptedView, MakeMutableMemoryView(DecryptionBuffer), Reason); + CHECK(Reason.has_value() == false); std::string_view EncryptedDecryptedText = std::string_view(reinterpret_cast<const char*>(DecryptedView.GetData()), DecryptedView.GetSize()); diff --git a/src/zencore/include/zencore/memory/fmalloc.h b/src/zencore/include/zencore/memory/fmalloc.h index 5b476429e..0c183cfd0 100644 --- a/src/zencore/include/zencore/memory/fmalloc.h +++ b/src/zencore/include/zencore/memory/fmalloc.h @@ -6,6 +6,53 @@ #include <zenbase/zenbase.h> +// Detect if any sanitizers are enabled. + +#if defined(__has_feature) +# if __has_feature(address_sanitizer) +# define ZEN_ADDRESS_SANITIZER 1 +# endif +# if __has_feature(thread_sanitizer) +# define ZEN_THREAD_SANITIZER 1 +# endif +# if __has_feature(memory_sanitizer) +# define ZEN_MEMORY_SANITIZER 1 +# endif +# if __has_feature(leak_sanitizer) +# define ZEN_LEAK_SANITIZER 1 +# endif +#elif defined(__SANITIZE_ADDRESS__) // For Windows +# define ZEN_ADDRESS_SANITIZER 1 +#endif + +#if !defined(ZEN_ADDRESS_SANITIZER) +# define ZEN_ADDRESS_SANITIZER 0 +#endif + +#if !defined(ZEN_THREAD_SANITIZER) +# define ZEN_THREAD_SANITIZER 0 +#endif + +#if !defined(ZEN_MEMORY_SANITIZER) +# define ZEN_MEMORY_SANITIZER 0 +#endif + +#if !defined(ZEN_LEAK_SANITIZER) +# define ZEN_LEAK_SANITIZER 0 +#endif + +// If sanitizers are enabled, we cannot override new/delete ourselves + +#if !defined(ZEN_OVERRIDE_NEW_DELETE) +# if ZEN_ADDRESS_SANITIZER || ZEN_THREAD_SANITIZER || ZEN_MEMORY_SANITIZER || ZEN_LEAK_SANITIZER +# define ZEN_OVERRIDE_NEW_DELETE 0 +# endif +#endif + +#if !defined(ZEN_OVERRIDE_NEW_DELETE) +# define ZEN_OVERRIDE_NEW_DELETE 1 +#endif + namespace zen { enum diff --git a/src/zencore/include/zencore/memory/newdelete.h b/src/zencore/include/zencore/memory/newdelete.h index 2ec92b91b..a5b65ccbb 100644 --- a/src/zencore/include/zencore/memory/newdelete.h +++ b/src/zencore/include/zencore/memory/newdelete.h @@ -2,18 +2,25 @@ #pragma once +// This header overrides global new/delete operators to route them through Zen's memory +// allocation system. This header should only be included once, from the program's main +// compilation unit + #include <zenbase/zenbase.h> +#include <zencore/memory/fmalloc.h> #include <new> -#if defined(_MSC_VER) -# if (_MSC_VER >= 1900) && !defined(__EDG__) -# define ZEN_RESTRICT __declspec(allocator) __declspec(restrict) +#if ZEN_OVERRIDE_NEW_DELETE + +# if defined(_MSC_VER) +# if (_MSC_VER >= 1900) && !defined(__EDG__) +# define ZEN_RESTRICT __declspec(allocator) __declspec(restrict) +# else +# define ZEN_RESTRICT __declspec(restrict) +# endif # else -# define ZEN_RESTRICT __declspec(restrict) +# define ZEN_RESTRICT # endif -#else -# define ZEN_RESTRICT -#endif ////////////////////////////////////////////////////////////////////////// @@ -29,13 +36,13 @@ void zen_free_aligned(void* p, size_t alignment) noexcept; ////////////////////////////////////////////////////////////////////////// -#if defined(_MSC_VER) && defined(_Ret_notnull_) && defined(_Post_writable_byte_size_) -# define zen_decl_new(n) [[nodiscard]] _VCRT_ALLOCATOR _Ret_notnull_ _Post_writable_byte_size_(n) -# define zen_decl_new_nothrow(n) [[nodiscard]] _VCRT_ALLOCATOR _Ret_maybenull_ _Success_(return != NULL) _Post_writable_byte_size_(n) -#else -# define zen_decl_new(n) [[nodiscard]] -# define zen_decl_new_nothrow(n) [[nodiscard]] -#endif +# if defined(_MSC_VER) && defined(_Ret_notnull_) && defined(_Post_writable_byte_size_) +# define zen_decl_new(n) [[nodiscard]] _VCRT_ALLOCATOR _Ret_notnull_ _Post_writable_byte_size_(n) +# define zen_decl_new_nothrow(n) [[nodiscard]] _VCRT_ALLOCATOR _Ret_maybenull_ _Success_(return != NULL) _Post_writable_byte_size_(n) +# else +# define zen_decl_new(n) [[nodiscard]] +# define zen_decl_new_nothrow(n) [[nodiscard]] +# endif void operator delete(void* p) noexcept @@ -87,7 +94,7 @@ operator new[](std::size_t n, const std::nothrow_t& tag) noexcept return zen_new_nothrow(n); } -#if (__cplusplus >= 201402L || _MSC_VER >= 1916) +# if (__cplusplus >= 201402L || _MSC_VER >= 1916) void operator delete(void* p, std::size_t n) noexcept { @@ -98,9 +105,9 @@ operator delete[](void* p, std::size_t n) noexcept { zen_free_size(p, n); }; -#endif +# endif -#if (__cplusplus > 201402L || defined(__cpp_aligned_new)) +# if (__cplusplus > 201402L || defined(__cpp_aligned_new)) void operator delete(void* p, std::align_val_t al) noexcept { @@ -152,7 +159,9 @@ operator new[](std::size_t n, std::align_val_t al, const std::nothrow_t&) noexce { return zen_new_aligned_nothrow(n, static_cast<size_t>(al)); } -#endif +# endif + +#endif // ZEN_OVERRIDE_NEW_DELETE // EASTL operator new diff --git a/src/zencore/include/zencore/xxhash.h b/src/zencore/include/zencore/xxhash.h index 1616e5f93..fc55b513b 100644 --- a/src/zencore/include/zencore/xxhash.h +++ b/src/zencore/include/zencore/xxhash.h @@ -6,7 +6,9 @@ #include <zencore/memoryview.h> +ZEN_THIRD_PARTY_INCLUDES_START #include <xxh3.h> +ZEN_THIRD_PARTY_INCLUDES_END #include <compare> #include <string_view> diff --git a/src/zencore/memory/memory.cpp b/src/zencore/memory/memory.cpp index fced2a4d3..fc8de5d02 100644 --- a/src/zencore/memory/memory.cpp +++ b/src/zencore/memory/memory.cpp @@ -39,19 +39,23 @@ InitGMalloc() FMalloc* InitMalloc = GMalloc; // Pick a default base allocator based on availability/platform + // when using sanitizers, we should use the default/ansi allocator -#if ZEN_MIMALLOC_ENABLED +#if ZEN_OVERRIDE_NEW_DELETE + +# if ZEN_MIMALLOC_ENABLED if (Malloc == MallocImpl::None) { Malloc = MallocImpl::Mimalloc; } -#endif +# endif -#if ZEN_RPMALLOC_ENABLED +# if ZEN_RPMALLOC_ENABLED if (Malloc == MallocImpl::None) { Malloc = MallocImpl::Rpmalloc; } +# endif #endif // Process any command line overrides @@ -287,6 +291,8 @@ zen_free_aligned(void* Ptr, size_t Alignment) noexcept // EASTL operator new +#if ZEN_OVERRIDE_NEW_DELETE + void* operator new[](size_t size, const char* pName, int flags, unsigned debugFlags, const char* file, int line) { @@ -310,3 +316,29 @@ operator new[](size_t size, return zen_new_aligned(size, alignment); } + +#else + +void* +operator new[](size_t size, const char* pName, int flags, unsigned debugFlags, const char* file, int line) +{ + ZEN_UNUSED(pName, flags, debugFlags, file, line); + return ::operator new[](size); +} + +void* +operator new[](size_t size, + size_t alignment, + size_t alignmentOffset, + const char* pName, + int flags, + unsigned debugFlags, + const char* file, + int line) +{ + ZEN_UNUSED(alignmentOffset, pName, flags, debugFlags, file, line); + ZEN_ASSERT_SLOW(alignmentOffset == 0); // currently not supported + return ::operator new[](size, std::align_val_t(alignment)); +} + +#endif diff --git a/src/zencore/xmake.lua b/src/zencore/xmake.lua index 24011d300..ef462ad03 100644 --- a/src/zencore/xmake.lua +++ b/src/zencore/xmake.lua @@ -21,36 +21,38 @@ target('zencore') end if has_config("zenmimalloc") then - add_packages("vcpkg::mimalloc") + add_packages("mimalloc") end add_deps("zenbase") add_deps("spdlog") add_deps("utfcpp") add_deps("oodle") + add_deps("blake3") add_deps("ue-trace") add_deps("timesinceprocessstart") + add_deps("doctest") + add_deps("fmt") + add_deps("ryml") + + add_packages("json11") + if is_plat("linux") then + add_packages("openssl3") -- required for crypto + elseif is_plat("macosx") then + add_packages("mbedtls") -- required for crypto + end + add_packages( - "vcpkg::blake3", - "vcpkg::json11", - "vcpkg::ryml", - "vcpkg::c4core", - "vcpkg::openssl" -- required for crypto - ) - - add_packages( - "vcpkg::doctest", - "vcpkg::eastl", - "vcpkg::fmt", - "vcpkg::gsl-lite", - "vcpkg::lz4", - "vcpkg::xxhash", + "gsl-lite", + "eastl", + "lz4", + "xxhash", {public=true} ) if has_config("zensentry") then - add_packages("vcpkg::sentry-native") + add_packages("sentry-native") if is_os("windows") then add_cxxflags("/wd4996") @@ -67,7 +69,7 @@ target('zencore') -- be specified after the former with GCC-like toolchains. xmake however -- is unaware of this and simply globs files from vcpkg's output. The -- line below forces breakpad_client to be to the right of sentry_native - add_syslinks("breakpad_client") + -- add_syslinks("breakpad_client") end if is_plat("macosx") then diff --git a/src/zenhttp-test/xmake.lua b/src/zenhttp-test/xmake.lua index a7ee731f9..54ef78920 100644 --- a/src/zenhttp-test/xmake.lua +++ b/src/zenhttp-test/xmake.lua @@ -6,7 +6,7 @@ target("zenhttp-test") add_headerfiles("**.h") add_files("*.cpp") add_deps("zenhttp") - add_packages("vcpkg::doctest") + add_deps("doctest") if is_plat("macosx") then add_ldflags("-framework CoreFoundation") diff --git a/src/zenhttp/xmake.lua b/src/zenhttp/xmake.lua index 7b49bace1..78876d21b 100644 --- a/src/zenhttp/xmake.lua +++ b/src/zenhttp/xmake.lua @@ -8,27 +8,9 @@ target('zenhttp') add_files("servers/httpsys.cpp", {unity_ignored=true}) add_includedirs("include", {public=true}) add_deps("zencore", "zentelemetry", "transport-sdk", "asio", "cpr") - add_packages( - "vcpkg::curl", -- required by cpr - "vcpkg::openssl", -- required by curl - "vcpkg::zlib", -- required by curl - "vcpkg::gsl-lite", - "vcpkg::http-parser" - ) + add_packages("http_parser", "json11") add_options("httpsys") if is_plat("linux") then - -- The 'vcpkg::openssl' package is two libraries; ssl and crypto, with - -- ssl being dependent on symbols in crypto. When GCC-like linkers read - -- object files from their command line, those object files only resolve - -- symbols of objects previously encountered. Thus crypto must appear - -- after ssl so it can fill out ssl's unresolved symbol table. Xmake's - -- vcpkg support is basic and works by parsing .list files. Openssl's - -- archives are listed alphabetically causing crypto to be _before_ ssl - -- and resulting in link errors. The links are restated here to force - -- xmake to use the correct order, and "syslinks" is used to force the - -- arguments to the end of the line (otherwise they can appear before - -- curl and cause more errors). - add_syslinks("crypto") - add_syslinks("dl") + add_syslinks("dl") -- TODO: is libdl needed? end diff --git a/src/zennet-test/xmake.lua b/src/zennet-test/xmake.lua index c84837610..c9e3f7a07 100644 --- a/src/zennet-test/xmake.lua +++ b/src/zennet-test/xmake.lua @@ -6,8 +6,7 @@ target("zennet-test") add_headerfiles("**.h") add_files("*.cpp") add_deps("zennet") - add_packages("vcpkg::mimalloc") - add_packages("vcpkg::doctest") + add_deps("doctest") if is_plat("macosx") then add_ldflags("-framework CoreFoundation") diff --git a/src/zennet/xmake.lua b/src/zennet/xmake.lua index b44878acc..7a99b6100 100644 --- a/src/zennet/xmake.lua +++ b/src/zennet/xmake.lua @@ -7,6 +7,3 @@ target('zennet') add_files("**.cpp") add_includedirs("include", {public=true}) add_deps("zencore", "zenutil", "asio") - add_packages( - "vcpkg::gsl-lite" - ) diff --git a/src/zenremotestore-test/xmake.lua b/src/zenremotestore-test/xmake.lua index edc356b5b..7a2f5294c 100644 --- a/src/zenremotestore-test/xmake.lua +++ b/src/zenremotestore-test/xmake.lua @@ -6,4 +6,4 @@ target("zenremotestore-test") add_headerfiles("**.h") add_files("*.cpp") add_deps("zenremotestore") - add_packages("vcpkg::doctest") + add_deps("doctest") diff --git a/src/zenremotestore/xmake.lua b/src/zenremotestore/xmake.lua index 35d554710..7afeda85e 100644 --- a/src/zenremotestore/xmake.lua +++ b/src/zenremotestore/xmake.lua @@ -6,6 +6,6 @@ target('zenremotestore') add_headerfiles("**.h") add_files("**.cpp") add_includedirs("include", {public=true}) - add_deps("zencore", "zenstore", "zenutil") - add_packages("vcpkg::robin-map") - add_packages("vcpkg::eastl", {public=true}); + add_deps("zencore", "zenstore", "zenutil", "robin-map") + add_packages("json11") + add_packages("eastl", {public=true}); diff --git a/src/zenserver-test/xmake.lua b/src/zenserver-test/xmake.lua index 8a5107199..2a269cea1 100644 --- a/src/zenserver-test/xmake.lua +++ b/src/zenserver-test/xmake.lua @@ -8,7 +8,7 @@ target("zenserver-test") add_files("zenserver-test.cpp", {unity_ignored = true }) add_deps("zencore", "zenremotestore", "zenhttp") add_deps("zenserver", {inherit=false}) - add_packages("vcpkg::http-parser", "vcpkg::mimalloc") + add_packages("http_parser") if is_plat("macosx") then add_ldflags("-framework CoreFoundation") diff --git a/src/zenserver/storage/zenstorageserver.cpp b/src/zenserver/storage/zenstorageserver.cpp index e2f20f8b6..e4f8c6aa3 100644 --- a/src/zenserver/storage/zenstorageserver.cpp +++ b/src/zenserver/storage/zenstorageserver.cpp @@ -656,6 +656,10 @@ ZenStorageServer::Run() " / /\\ ___/| | \\ / \\| | ( <_> ) | \\/\\ ___/ \n" "/_______ \\___ >___| / /_______ /|__| \\____/|__| \\___ >\n" " \\/ \\/ \\/ \\/ \\/ \n"); + + ExtendableStringBuilder<256> BuildOptions; + GetBuildOptions(BuildOptions); + ZEN_INFO("Build options: {}", BuildOptions); } ZEN_INFO(ZEN_APP_NAME " now running (pid: {})", GetCurrentProcessId()); diff --git a/src/zenserver/xmake.lua b/src/zenserver/xmake.lua index 53d50313c..fb65fa949 100644 --- a/src/zenserver/xmake.lua +++ b/src/zenserver/xmake.lua @@ -18,7 +18,18 @@ target("zenserver") add_includedirs(".") set_symbols("debug") - add_deps("protozero", "asio") + add_deps("protozero", "asio", "cxxopts") + add_deps("sol2") + add_packages("json11") + add_packages("lua") + + if has_config("zenmimalloc") then + add_packages("mimalloc") + end + + if has_config("zensentry") then + add_packages("sentry-native") + end if is_mode("release") then set_optimize("fastest") @@ -48,15 +59,6 @@ target("zenserver") add_options("compute") add_options("exec") - add_packages( - "vcpkg::cxxopts", - "vcpkg::http-parser", - "vcpkg::json11", - "vcpkg::lua", - "vcpkg::mimalloc", - "vcpkg::sol2" - ) - -- to work around some unfortunate Ctrl-C behaviour on Linux/Mac due to -- our use of setsid() at startup we pass in `--no-detach` to zenserver -- ensure that it recieves signals when the user requests termination @@ -84,3 +86,18 @@ target("zenserver") os.execv(targetfile, args, {curdir = rundir, detach = option.get("detach")}) end end) + + after_build(function (target) + if has_config("zensentry") then + local crashpad_handler = "crashpad_handler" + if is_plat("windows") then + crashpad_handler = "crashpad_handler.exe" + end + local pkg = target:pkg("sentry-native") + if pkg then + local installdir = pkg:installdir() + os.cp(path.join(installdir, "bin/" .. crashpad_handler), target:targetdir()) + print("Copied " .. crashpad_handler .. " to output directory") + end + end + end) diff --git a/src/zenserver/zenserver.cpp b/src/zenserver/zenserver.cpp index 787f28693..5408f2f0b 100644 --- a/src/zenserver/zenserver.cpp +++ b/src/zenserver/zenserver.cpp @@ -13,6 +13,7 @@ #include <zencore/iobuffer.h> #include <zencore/jobqueue.h> #include <zencore/logging.h> +#include <zencore/memory/fmalloc.h> #include <zencore/scopeguard.h> #include <zencore/sentryintegration.h> #include <zencore/session.h> @@ -158,6 +159,28 @@ ZenServerBase::Finalize() } void +ZenServerBase::GetBuildOptions(StringBuilderBase& OutOptions) +{ + ZEN_MEMSCOPE(GetZenserverTag()); + + OutOptions << "ZEN_ADDRESS_SANITIZER=" << (ZEN_ADDRESS_SANITIZER ? "1" : "0"); + OutOptions << ","; + OutOptions << "ZEN_USE_SENTRY=" << (ZEN_USE_SENTRY ? "1" : "0"); + OutOptions << ","; + OutOptions << "ZEN_WITH_TESTS=" << (ZEN_WITH_TESTS ? "1" : "0"); + OutOptions << ","; + OutOptions << "ZEN_USE_MIMALLOC=" << (ZEN_USE_MIMALLOC ? "1" : "0"); + OutOptions << ","; + OutOptions << "ZEN_USE_RPMALLOC=" << (ZEN_USE_RPMALLOC ? "1" : "0"); + OutOptions << ","; + OutOptions << "ZEN_WITH_HTTPSYS=" << (ZEN_WITH_HTTPSYS ? "1" : "0"); + OutOptions << ","; + OutOptions << "ZEN_WITH_MEMTRACK=" << (ZEN_WITH_MEMTRACK ? "1" : "0"); + OutOptions << ","; + OutOptions << "ZEN_WITH_TRACE=" << (ZEN_WITH_TRACE ? "1" : "0"); +} + +void ZenServerBase::EnsureIoRunner() { ZEN_MEMSCOPE(GetZenserverTag()); diff --git a/src/zenserver/zenserver.h b/src/zenserver/zenserver.h index 09a994428..4de865a5f 100644 --- a/src/zenserver/zenserver.h +++ b/src/zenserver/zenserver.h @@ -45,6 +45,7 @@ public: protected: int Initialize(const ZenServerConfig& ServerOptions, ZenServerState::ZenServerEntry* ServerEntry); void Finalize(); + void GetBuildOptions(StringBuilderBase& OutOptions); protected: NamedMutex m_ServerMutex; diff --git a/src/zenstore-test/xmake.lua b/src/zenstore-test/xmake.lua index ca260ee52..5b152aa20 100644 --- a/src/zenstore-test/xmake.lua +++ b/src/zenstore-test/xmake.lua @@ -6,4 +6,4 @@ target("zenstore-test") add_headerfiles("**.h") add_files("*.cpp") add_deps("zenstore") - add_packages("vcpkg::doctest") + add_deps("doctest") diff --git a/src/zenstore/gc.cpp b/src/zenstore/gc.cpp index e58bbb6e2..ba1bce974 100644 --- a/src/zenstore/gc.cpp +++ b/src/zenstore/gc.cpp @@ -636,7 +636,7 @@ KeepUnusedReferences(std::span<const IoHash> SortedUsedReferences, std::span<IoH { if (ReferencesRead != ReferencesWrite) { - memcpy(ReferencesWrite, ReferencesRead, sizeof(IoHash::Hash) * Remaining); + memmove(ReferencesWrite, ReferencesRead, sizeof(IoHash::Hash) * Remaining); } ReferencesWrite += Remaining; } diff --git a/src/zenstore/xmake.lua b/src/zenstore/xmake.lua index cf5f30d09..31289a573 100644 --- a/src/zenstore/xmake.lua +++ b/src/zenstore/xmake.lua @@ -7,5 +7,5 @@ target('zenstore') add_files("**.cpp") add_includedirs("include", {public=true}) add_deps("zencore", "zenutil", "zenvfs") - add_packages("vcpkg::robin-map") - add_packages("vcpkg::eastl", {public=true}); + add_deps("robin-map") + add_packages("eastl", {public=true}); diff --git a/src/zentelemetry-test/xmake.lua b/src/zentelemetry-test/xmake.lua index bdc60cee8..0dab67f20 100644 --- a/src/zentelemetry-test/xmake.lua +++ b/src/zentelemetry-test/xmake.lua @@ -6,4 +6,4 @@ target("zentelemetry-test") add_headerfiles("**.h") add_files("*.cpp") add_deps("zentelemetry") - add_packages("vcpkg::doctest") + add_deps("doctest") diff --git a/src/zentelemetry/xmake.lua b/src/zentelemetry/xmake.lua index 552d0718a..7739c0a08 100644 --- a/src/zentelemetry/xmake.lua +++ b/src/zentelemetry/xmake.lua @@ -7,4 +7,4 @@ target('zentelemetry') add_files("**.cpp") add_includedirs("include", {public=true}) add_deps("zencore", "protozero", "spdlog") - add_packages("vcpkg::robin-map") + add_deps("robin-map") diff --git a/src/zenutil-test/xmake.lua b/src/zenutil-test/xmake.lua index 061c79ddf..c77af2482 100644 --- a/src/zenutil-test/xmake.lua +++ b/src/zenutil-test/xmake.lua @@ -6,4 +6,4 @@ target("zenutil-test") add_headerfiles("**.h") add_files("*.cpp") add_deps("zenutil") - add_packages("vcpkg::doctest") + add_deps("doctest") diff --git a/src/zenutil/xmake.lua b/src/zenutil/xmake.lua index 9066ca1ca..bc33adf9e 100644 --- a/src/zenutil/xmake.lua +++ b/src/zenutil/xmake.lua @@ -7,7 +7,8 @@ target('zenutil') add_files("**.cpp") add_includedirs("include", {public=true}) add_deps("zencore", "zenhttp", "spdlog") - add_packages("vcpkg::robin-map") + add_deps("cxxopts") + add_deps("robin-map") if is_plat("linux") then add_includedirs("$(projectdir)/thirdparty/systemd/include") |