https://github.com/GkvJwa updated https://github.com/llvm/llvm-project/pull/171465
>From 9ea767497b9af2a3f13e3b6e05de9574a47313a8 Mon Sep 17 00:00:00 2001 From: GkvJwa <[email protected]> Date: Tue, 9 Dec 2025 23:55:02 +0800 Subject: [PATCH] Add DllMain entry point to libclang.dll --- clang/tools/libclang/CMakeLists.txt | 4 ++++ clang/tools/libclang/DllMain.cpp | 31 +++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 clang/tools/libclang/DllMain.cpp diff --git a/clang/tools/libclang/CMakeLists.txt b/clang/tools/libclang/CMakeLists.txt index b0105f5a5f79f..a3b95fd49b68d 100644 --- a/clang/tools/libclang/CMakeLists.txt +++ b/clang/tools/libclang/CMakeLists.txt @@ -135,6 +135,7 @@ endif() add_clang_library(libclang ${ENABLE_SHARED} ${ENABLE_STATIC} INSTALL_WITH_TOOLCHAIN OUTPUT_NAME ${output_name} ${SOURCES} + PARTIAL_SOURCES_INTENDED DEPENDS ClangDriverOptions @@ -168,6 +169,9 @@ if(ENABLE_SHARED) # If llvm/libclang-cpp dll is also being built for windows clang c++ symbols will still be # implicitly be exported from libclang. target_compile_definitions(libclang PRIVATE CLANG_BUILD_STATIC) + if(LLVM_ENABLE_RPMALLOC) + target_sources(libclang PRIVATE DllMain.cpp) + endif() elseif(APPLE) set(LIBCLANG_LINK_FLAGS " -Wl,-compatibility_version -Wl,1") set(LIBCLANG_LINK_FLAGS "${LIBCLANG_LINK_FLAGS} -Wl,-current_version -Wl,${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}") diff --git a/clang/tools/libclang/DllMain.cpp b/clang/tools/libclang/DllMain.cpp new file mode 100644 index 0000000000000..fe33fde5f929b --- /dev/null +++ b/clang/tools/libclang/DllMain.cpp @@ -0,0 +1,31 @@ +//===- DllMain.cpp --------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include <windows.h> + +extern "C" { + +void rpmalloc_finalize(void); +void rpmalloc_thread_finalize(int release_caches); + +BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved) { + switch (reason) { + case DLL_PROCESS_ATTACH: + break; + case DLL_PROCESS_DETACH: + rpmalloc_finalize(); + break; + case DLL_THREAD_ATTACH: + break; + case DLL_THREAD_DETACH: + rpmalloc_thread_finalize(1); + break; + } + return TRUE; +} +} _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
