From 24e43a913f29ac3b314354e8ce5175f135bcc64f Mon Sep 17 00:00:00 2001 From: Stefan Boberg Date: Fri, 7 Nov 2025 14:49:13 +0100 Subject: 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 --- thirdparty/ryml/tools/parse_emit.cpp | 116 +++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 thirdparty/ryml/tools/parse_emit.cpp (limited to 'thirdparty/ryml/tools/parse_emit.cpp') diff --git a/thirdparty/ryml/tools/parse_emit.cpp b/thirdparty/ryml/tools/parse_emit.cpp new file mode 100644 index 000000000..6ae807964 --- /dev/null +++ b/thirdparty/ryml/tools/parse_emit.cpp @@ -0,0 +1,116 @@ +#ifdef RYML_SINGLE_HEADER +#include +#else +#include +#include +#include +#endif +#include + +#include +#include + + +using namespace c4; + + +//----------------------------------------------------------------------------- + +struct timed_section +{ + using myclock = std::chrono::steady_clock; + using msecs = std::chrono::duration; + + csubstr name; + myclock::time_point start; + + msecs since() const { return myclock::now() - start; } + timed_section(csubstr n) : name(n), start(myclock::now()) {} + ~timed_section() + { + fprintf(stderr, "%.6fms: %.*s\n", since().count(), (int)name.len, name.str); + fflush(stderr); + } +}; + +#define TS(name) timed_section name##__##__LINE__(#name) + + +//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- + +int main(int argc, const char *argv[]) +{ + bool print_emitted_to_stdout = true; + csubstr file; + // LCOV_EXCL_START + auto show_usage = [argv]{ + printf("usage: %s [-s] \n", argv[0]); + }; + if(argc == 2) + { + file = to_csubstr(argv[1]); + } + else if(argc > 2) + { + file = to_csubstr(argv[2]); + csubstr arg = to_csubstr(argv[1]); + if(arg == "-s") + { + print_emitted_to_stdout = false; + } + else + { + show_usage(); + return 1; + } + } + else + { + show_usage(); + return 1; + } + // LCOV_EXCL_STOP + + TS(TOTAL); + + C4_CHECK_MSG(fs::path_exists(file.str), "cannot find file: %s (cwd=%s)", file.str, fs::cwd().c_str()); + + { + TS(objects); + std::string contents, output; + yml::Tree tree; + { + TS(read_file); + fs::file_get_contents(file.str, &contents); + } + { + TS(tree_reserve); + size_t nlines; + { + TS(count_lines); + nlines = to_csubstr(contents).count('\n'); + } + fprintf(stderr, "reserving #lines=%zu\n", nlines); + tree.reserve(nlines); + } + { + TS(parse_yml); + yml::parse_in_place(file, to_substr(contents), &tree); + } + { + TS(emit_to_buffer); + output.resize(contents.size()); // resize, not just reserve + yml::emitrs_yaml(tree, &output); + } + if(print_emitted_to_stdout) + { + TS(print_stdout); + fwrite(output.data(), 1, output.size(), stdout); + putchar('\n'); + } + } + + return 0; +} -- cgit v1.2.3