From 72b5ef6715a2d1d40027f4bcf74d2ed6ce89e443 Mon Sep 17 00:00:00 2001 From: Jiaming Yuan Date: Sat, 27 Sep 2025 07:25:02 +0800 Subject: [PATCH] Fix wasm build. --- CMakeLists.txt | 4 +++- cmake/Utils.cmake | 10 ++++++---- src/c_api/c_api.cc | 4 +++- src/common/threading_utils.h | 2 +- 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 41f1b1f48a9c..f8630d670956 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -253,7 +253,9 @@ if(FORCE_COLORED_OUTPUT AND (CMAKE_GENERATOR STREQUAL "Ninja") AND set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fdiagnostics-color=always") endif() -find_package(Threads REQUIRED) +if(NOT (CMAKE_SYSTEM_NAME STREQUAL "Emscripten")) + find_package(Threads REQUIRED) +endif() # -- OpenMP include(cmake/FindOpenMPMacOS.cmake) diff --git a/cmake/Utils.cmake b/cmake/Utils.cmake index ebc38de68607..50a464f053a1 100644 --- a/cmake/Utils.cmake +++ b/cmake/Utils.cmake @@ -261,10 +261,12 @@ endmacro() # handles dependencies macro(xgboost_target_link_libraries target) - if(BUILD_STATIC_LIB) - target_link_libraries(${target} PUBLIC Threads::Threads ${CMAKE_THREAD_LIBS_INIT}) - else() - target_link_libraries(${target} PRIVATE Threads::Threads ${CMAKE_THREAD_LIBS_INIT}) + if(NOT (CMAKE_SYSTEM_NAME STREQUAL "Emscripten")) + if(BUILD_STATIC_LIB) + target_link_libraries(${target} PUBLIC Threads::Threads ${CMAKE_THREAD_LIBS_INIT}) + else() + target_link_libraries(${target} PRIVATE Threads::Threads ${CMAKE_THREAD_LIBS_INIT}) + endif() endif() if(USE_OPENMP) diff --git a/src/c_api/c_api.cc b/src/c_api/c_api.cc index 173856d213d8..75794e49d0c1 100644 --- a/src/c_api/c_api.cc +++ b/src/c_api/c_api.cc @@ -1579,7 +1579,9 @@ XGB_DLL int XGBoosterLoadModelFromBuffer(BoosterHandle handle, const void *buf, API_BEGIN(); CHECK_HANDLE(); xgboost_CHECK_C_ARG_PTR(buf); - auto buffer = common::Span{static_cast(buf), len}; + using CharT = std::add_const_t; + using IdxType = common::Span::index_type; + auto buffer = common::Span{static_cast(buf), static_cast(len)}; // Don't warn, we have to guess the format with buffer input. auto in = DispatchModelType(buffer, "", false); common::MemoryFixSizeBuffer fs((void *)buf, len); // NOLINT(*) diff --git a/src/common/threading_utils.h b/src/common/threading_utils.h index 4bbd280a21ee..b20b1bc08069 100644 --- a/src/common/threading_utils.h +++ b/src/common/threading_utils.h @@ -267,7 +267,7 @@ void ParallelFor1d(Index size, std::int32_t n_threads, Func&& fn) { static_assert(std::is_void_v>); auto const n_blocks = DivRoundUp(size, kBlockOfRowsSize); common::ParallelFor(n_blocks, n_threads, [&](auto block_id) { - auto const block_beg = block_id * kBlockOfRowsSize; + std::size_t const block_beg = block_id * kBlockOfRowsSize; auto const block_size = std::min(static_cast(size - block_beg), kBlockOfRowsSize); fn(common::Range1d{block_beg, block_beg + block_size}); });