From 174e4e9734bc48e4c99f296adc5a171d96368244 Mon Sep 17 00:00:00 2001 From: Tobiasz Laskowski Date: Fri, 14 Feb 2025 20:19:41 +0000 Subject: [PATCH 1/4] Update to bdwgc 8.2 --- CMakeLists.txt | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3929e00a..cc0d6aed 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -276,15 +276,15 @@ if (STATIC_BOEHMGC OR WIN32) set ( BoehmGC_CONFIGS DEPENDS libatomic_ops - URL https://github.com/ivmai/bdwgc/releases/download/v7.6.26/gc-7.6.26.tar.gz - URL_HASH SHA256=d38e306efa54e1aebaf283b462a6396849e88b80c350f40a2e9715519374ff0b + URL https://github.com/bdwgc/bdwgc/releases/download/v8.2.12/gc-8.2.12.tar.gz + URL_HASH SHA256=42e5194ad06ab6ffb806c83eb99c03462b495d979cda782f3c72c08af833cd4e ) set(GC_INCLUDE_DIR ${CMAKE_BINARY_DIR}/libs/src/BoehmGC-build/include) if (WIN32) set(GC_LIBRARIES - ${CMAKE_BINARY_DIR}/libs/src/BoehmGC-build/${CMAKE_CFG_INTDIR}/gcmt-dll.lib + ${CMAKE_BINARY_DIR}/libs/src/BoehmGC-build/${CMAKE_CFG_INTDIR}/gc.lib ) ExternalProject_Add(BoehmGC ${EP_CONFIGS} @@ -301,14 +301,14 @@ if (STATIC_BOEHMGC OR WIN32) ${CMAKE_BINARY_DIR}/libs/src/BoehmGC/include ${CMAKE_BINARY_DIR}/libs/src/BoehmGC-build/include/gc ) - add_custom_command(OUTPUT ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/gcmt-dll.dll + add_custom_command(OUTPUT ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/gc.dll DEPENDS BoehmGC - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/libs/src/BoehmGC-build/${CMAKE_CFG_INTDIR}/gcmt-dll.dll ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/libs/src/BoehmGC-build/${CMAKE_CFG_INTDIR}/gc.dll ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} ) - add_custom_target(gcmt-dll.dll ALL - DEPENDS ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/gcmt-dll.dll + add_custom_target(gc.dll ALL + DEPENDS ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/gc.dll ) - add_dependencies(nekovm gcmt-dll.dll) + add_dependencies(nekovm gc.dll) else() if (APPLE) set(GC_CFLAGS "-w -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}") @@ -573,7 +573,7 @@ if (WIN32) include(InstallRequiredSystemLibraries) install ( FILES - ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/gcmt-dll.dll + ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/gc.dll DESTINATION . ) else() From e483e786199c25491f8a95be9119f3f553894cd4 Mon Sep 17 00:00:00 2001 From: Tobiasz Laskowski Date: Fri, 14 Feb 2025 20:27:20 +0000 Subject: [PATCH 2/4] Use more fine grained cmake flag on windows On windows, we have to disable thread local allocation as it does not work with the dll build of bdwgc. With version 8.2, it is possible to use the more finegrained `-Denable_thread_local_alloc` flag instead of `-Denable_parallel_mark` which also disables parallel marking. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cc0d6aed..91486d46 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -292,7 +292,7 @@ if (STATIC_BOEHMGC OR WIN32) CMAKE_ARGS -Wno-dev -Denable_threads=ON - -Denable_parallel_mark=OFF + -Denable_thread_local_alloc=OFF -DCMAKE_USE_WIN32_THREADS_INIT=ON -DCMAKE_CXX_STANDARD=14 PATCH_COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_BINARY_DIR}/libs/src/libatomic_ops ${CMAKE_BINARY_DIR}/libs/src/BoehmGC/libatomic_ops From d0c69e27e5445694643acd6b8df966200468c2df Mon Sep 17 00:00:00 2001 From: Tobiasz Laskowski Date: Tue, 23 Dec 2025 13:24:25 +0000 Subject: [PATCH 3/4] [cmake] Add libatomic_ops only for msvc Other compilers should support builtin atomics so don't require libatomic_ops with gc 8.2 --- CMakeLists.txt | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 91486d46..e9cedbf5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -263,25 +263,31 @@ add_executable(nekovm # We need to build from source on Windows regardless if (STATIC_BOEHMGC OR WIN32) - ExternalProject_Add(libatomic_ops - ${EP_CONFIGS} - URL https://github.com/bdwgc/libatomic_ops/releases/download/v7.10.0/libatomic_ops-7.10.0.tar.gz - URL_HASH SHA256=0db3ebff755db170f65e74a64ec4511812e9ee3185c232eeffeacd274190dfb0 - CONFIGURE_COMMAND echo skip config - BUILD_COMMAND echo skip build - INSTALL_COMMAND echo skip install - ) - set_target_properties(libatomic_ops PROPERTIES ${EP_PROPS}) - set ( BoehmGC_CONFIGS - DEPENDS libatomic_ops URL https://github.com/bdwgc/bdwgc/releases/download/v8.2.12/gc-8.2.12.tar.gz URL_HASH SHA256=42e5194ad06ab6ffb806c83eb99c03462b495d979cda782f3c72c08af833cd4e ) set(GC_INCLUDE_DIR ${CMAKE_BINARY_DIR}/libs/src/BoehmGC-build/include) + if (MSVC) + ExternalProject_Add(libatomic_ops + ${EP_CONFIGS} + URL https://github.com/bdwgc/libatomic_ops/releases/download/v7.10.0/libatomic_ops-7.10.0.tar.gz + URL_HASH SHA256=0db3ebff755db170f65e74a64ec4511812e9ee3185c232eeffeacd274190dfb0 + CONFIGURE_COMMAND echo skip config + BUILD_COMMAND echo skip build + INSTALL_COMMAND echo skip install + ) + set_target_properties(libatomic_ops PROPERTIES ${EP_PROPS}) + + list(APPEND BoehmGC_CONFIGS + DEPENDS libatomic_ops + PATCH_COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_BINARY_DIR}/libs/src/libatomic_ops ${CMAKE_BINARY_DIR}/libs/src/BoehmGC/libatomic_ops + ) + endif() + if (WIN32) set(GC_LIBRARIES ${CMAKE_BINARY_DIR}/libs/src/BoehmGC-build/${CMAKE_CFG_INTDIR}/gc.lib @@ -295,7 +301,6 @@ if (STATIC_BOEHMGC OR WIN32) -Denable_thread_local_alloc=OFF -DCMAKE_USE_WIN32_THREADS_INIT=ON -DCMAKE_CXX_STANDARD=14 - PATCH_COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_BINARY_DIR}/libs/src/libatomic_ops ${CMAKE_BINARY_DIR}/libs/src/BoehmGC/libatomic_ops INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_BINARY_DIR}/libs/src/BoehmGC/include @@ -323,7 +328,6 @@ if (STATIC_BOEHMGC OR WIN32) ExternalProject_Add(BoehmGC ${EP_CONFIGS} ${BoehmGC_CONFIGS} - PATCH_COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_BINARY_DIR}/libs/src/libatomic_ops ${CMAKE_BINARY_DIR}/libs/src/BoehmGC/libatomic_ops CONFIGURE_COMMAND cd ${CMAKE_BINARY_DIR}/libs/src/BoehmGC && ./configure --prefix=${CMAKE_BINARY_DIR}/libs/src/BoehmGC-build From b75b775f51cff9d815782d0d53c03fd7fcb8de1e Mon Sep 17 00:00:00 2001 From: Tobiasz Laskowski Date: Fri, 18 Sep 2026 14:55:51 +0100 Subject: [PATCH 4/4] [cmake] Fix libatomic_ops download dependency --- CMakeLists.txt | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e9cedbf5..f074b2a1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -261,6 +261,8 @@ add_executable(nekovm vm/main.c ) +add_custom_target(download_deps) + # We need to build from source on Windows regardless if (STATIC_BOEHMGC OR WIN32) set ( @@ -286,6 +288,7 @@ if (STATIC_BOEHMGC OR WIN32) DEPENDS libatomic_ops PATCH_COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_BINARY_DIR}/libs/src/libatomic_ops ${CMAKE_BINARY_DIR}/libs/src/BoehmGC/libatomic_ops ) + add_dependencies(download_deps libatomic_ops-download) endif() if (WIN32) @@ -348,16 +351,11 @@ if (STATIC_BOEHMGC OR WIN32) set_target_properties(BoehmGC PROPERTIES ${EP_PROPS}) add_dependencies(libneko BoehmGC) + add_dependencies(download_deps BoehmGC-download) else() find_package(BoehmGC REQUIRED) endif() -add_custom_target(download_deps) -if (STATIC_BOEHMGC OR WIN32) - add_dependencies(download_deps libatomic_ops-download) - add_dependencies(download_deps BoehmGC-download) -endif() - target_include_directories(libneko PRIVATE ${GC_INCLUDE_DIR}) target_link_libraries(libneko ${GC_LIBRARIES})