From 61481a1fac75d7db5ff1aee9b6aa8d54e73771a6 Mon Sep 17 00:00:00 2001 From: Kasper Date: Thu, 29 May 2025 23:10:28 +0300 Subject: [PATCH] allow building with zig cc/c++ --- CMakeLists.txt | 10 +++++++--- cmake/zig-toolchain.cmake | 6 ++++++ src/filewatcher/filewatcher.c | 2 +- src/hiload.c | 4 ++-- src/logger.c | 2 +- src/logger.h | 35 +++++++++++++++++++++++++---------- src/moduler.c | 5 +---- test/manual/minimal_lib.cpp | 2 +- 8 files changed, 44 insertions(+), 22 deletions(-) create mode 100644 cmake/zig-toolchain.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index df223a1..9d6b37b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,8 +6,10 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON) set(CMAKE_C_STANDARD 11) set(CMAKE_C_STANDARD_REQUIRED) -set(BUILD_AUDITOR OFF) -set(BUILD_TESTS OFF) +set(BUILD_AUDITOR OFF CACHE BOOL "Build the independent auditor library.") +set(BUILD_TESTS OFF CACHE BOOL "Build tests.") + + # Conditionally define _GNU_SOURCE for Linux systems if(UNIX AND NOT APPLE) @@ -47,7 +49,9 @@ target_compile_options(hiload PRIVATE $<$:-Wno-declaration-after-statement -Wno-padded> ) -target_link_libraries(hiload dl elf) +target_link_libraries(hiload + dl + elf) # Specify the public headers location target_include_directories(hiload PUBLIC diff --git a/cmake/zig-toolchain.cmake b/cmake/zig-toolchain.cmake new file mode 100644 index 0000000..c722481 --- /dev/null +++ b/cmake/zig-toolchain.cmake @@ -0,0 +1,6 @@ + +set (CMAKE_C_COMPILER zig cc) +set (CMAKE_CXX_COMPILER zig c++) +set (CMAKE_C_COMPILER_TARGET ${TARGET}) +set (CMAKE_CXX_COMPILER_TARGET ${TARGET}) +set (USING_ZIG TRUE) diff --git a/src/filewatcher/filewatcher.c b/src/filewatcher/filewatcher.c index 65c4aa9..757cd7b 100644 --- a/src/filewatcher/filewatcher.c +++ b/src/filewatcher/filewatcher.c @@ -179,7 +179,7 @@ static void file_watcher_ctx_destroy(FileWatcherContext *ctx) { // Declare the thread func int file_watcher_watch(void *arg); -FileWatcher *filewatcher_create() { +FileWatcher *filewatcher_create(void) { // Allocate context FileWatcher *fw = malloc(sizeof(FileWatcher)); diff --git a/src/hiload.c b/src/hiload.c index 4d4af12..03e1aa9 100644 --- a/src/hiload.c +++ b/src/hiload.c @@ -236,7 +236,7 @@ int hi_init(size_t n, const char **enabled_modules) { return 0; } -void hi_deinit() { +void hi_deinit(void) { moduler_deinit(); module_data_free(&context.modules); filewatcher_destroy(context.filewatcher); @@ -244,7 +244,7 @@ void hi_deinit() { memset(&context, 0, sizeof(context)); } -HiResult hi_reload() { +HiResult hi_reload(void) { handle_file_events(context.filewatcher, &context.modules); reload_dirty_modules(&context); diff --git a/src/logger.c b/src/logger.c index 2f90021..2cf87d3 100644 --- a/src/logger.c +++ b/src/logger.c @@ -8,6 +8,6 @@ void log_set_verbose(bool value) { atomic_store_explicit(&hiload_verbose_log, value, memory_order_relaxed); } -bool log_get_verbose() { +bool log_get_verbose(void) { return atomic_load_explicit(&hiload_verbose_log, memory_order_relaxed); } diff --git a/src/logger.h b/src/logger.h index e81790e..1533eb1 100644 --- a/src/logger.h +++ b/src/logger.h @@ -3,7 +3,7 @@ #include "../3rd/sc/logger/sc_log.h" void log_set_verbose(bool value); -bool log_get_verbose(); +bool log_get_verbose(void); #define log_init() (sc_log_init()) #define log_set_level(level) (sc_log_set_level((level))) @@ -14,12 +14,27 @@ bool log_get_verbose(); #define log_warn(...) (sc_log_warn(__VA_ARGS__)) #define log_error(...) (sc_log_error(__VA_ARGS__)) -#define log_debugv(...) do { if (log_get_verbose()) { \ - log_debug(__VA_ARGS__); } } while(0) -#define log_infov(...) do { if (log_get_verbose()) { \ - log_info(__VA_ARGS__); } } while(0) -#define log_warnv(...) do { if (log_get_verbose()) { \ - log_warn(__VA_ARGS__); } } while(0) -#define log_errorv(...) do { if (log_get_verbose()) { \ - log_error(__VA_ARGS__); } } while(0) - +#define log_debugv(...) \ + do { \ + if (log_get_verbose()) { \ + log_debug(__VA_ARGS__); \ + } \ + } while (0) +#define log_infov(...) \ + do { \ + if (log_get_verbose()) { \ + log_info(__VA_ARGS__); \ + } \ + } while (0) +#define log_warnv(...) \ + do { \ + if (log_get_verbose()) { \ + log_warn(__VA_ARGS__); \ + } \ + } while (0) +#define log_errorv(...) \ + do { \ + if (log_get_verbose()) { \ + log_error(__VA_ARGS__); \ + } \ + } while (0) diff --git a/src/moduler.c b/src/moduler.c index 5a956b9..dd202e8 100644 --- a/src/moduler.c +++ b/src/moduler.c @@ -243,7 +243,6 @@ static HiResult moduler_patch_functions(VectorSymbol *psymbols, return HI_FAIL; } - int found_count = 0; size_t rela_count = relasz / sizeof(ElfW(Rela)); printf("Processing %zu relocations\n", rela_count); @@ -277,8 +276,6 @@ static HiResult moduler_patch_functions(VectorSymbol *psymbols, *got_entry = s->address; log_debug("Found GOT entry for '%s' at %p (points to %p)\n", name, got_entry, *got_entry); - - found_count++; } } } @@ -438,7 +435,7 @@ void moduler_init(const VectorModuleData *modules) { } } -void moduler_deinit() { +void moduler_deinit(void) { SymbolData symdata = {0}; vector_foreach(&symbol_data, symdata) { symbols_term(&symdata.symbols); } vector_term(&symbol_data); diff --git a/test/manual/minimal_lib.cpp b/test/manual/minimal_lib.cpp index b72e1c2..72aee34 100644 --- a/test/manual/minimal_lib.cpp +++ b/test/manual/minimal_lib.cpp @@ -5,7 +5,7 @@ namespace minimal_lib { int getNewValue(int x) { static int value = 0; - value = value + x; + value = 42; return value; }