[clang] [llvm] [CMake] Honor symbol export lists for Emscripten (PR #229715)
Anutosh Bhat via cfe-commits
cfe-commits at lists.llvm.org
Wed Oct 7 11:51:55 PDT 2026
https://github.com/anutosh491 updated https://github.com/llvm/llvm-project/pull/229715
>From 88caae3b521dcc19a65cdcf778d69cf02bd0a769 Mon Sep 17 00:00:00 2001
From: anutosh491 <andersonbhat491 at gmail.com>
Date: Wed, 7 Oct 2026 15:38:55 +0530
Subject: [PATCH] [CMake] Honor symbol export lists for Emscripten
Use --export for Emscripten symbol lists and enable libclang's generic export list.
---
clang/tools/libclang/CMakeLists.txt | 2 +-
llvm/cmake/modules/AddLLVM.cmake | 13 +++++++++++++
2 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/clang/tools/libclang/CMakeLists.txt b/clang/tools/libclang/CMakeLists.txt
index 38f577499dd22e..0f78e2913b4ef9 100644
--- a/clang/tools/libclang/CMakeLists.txt
+++ b/clang/tools/libclang/CMakeLists.txt
@@ -95,7 +95,7 @@ if(MSVC)
set(LLVM_EXPORTED_SYMBOL_FILE)
endif()
-if (UNIX AND NOT APPLE AND NOT "${CMAKE_SYSTEM_NAME}" MATCHES "AIX" AND NOT CYGWIN)
+if (UNIX AND NOT APPLE AND NOT "${CMAKE_SYSTEM_NAME}" MATCHES "AIX|Emscripten" AND NOT CYGWIN)
set(LLVM_EXPORTED_SYMBOL_FILE)
set(USE_VERSION_SCRIPT ${LLVM_HAVE_LINK_VERSION_SCRIPT})
endif()
diff --git a/llvm/cmake/modules/AddLLVM.cmake b/llvm/cmake/modules/AddLLVM.cmake
index 3169756c0f28af..8f71a9f9b7086d 100644
--- a/llvm/cmake/modules/AddLLVM.cmake
+++ b/llvm/cmake/modules/AddLLVM.cmake
@@ -164,6 +164,19 @@ function(add_llvm_symbol_exports target_name export_file)
set(native_export_file "${export_file}")
set_property(TARGET ${target_name} APPEND_STRING PROPERTY
LINK_FLAGS " -Wl,-bE:${export_file}")
+ elseif(CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
+ # wasm-ld uses explicit exports, not ELF version scripts. These also
+ # pull the exported API definitions out of static dependency archives.
+ set(native_export_file "${target_name}.exports")
+ add_custom_command(OUTPUT ${native_export_file}
+ COMMAND sed -e "s/^/-Wl,--export=/" < ${export_file} > ${native_export_file}
+ DEPENDS ${export_file}
+ VERBATIM
+ COMMENT "Creating export file for ${target_name}")
+ # Forward each response-file entry through the Emscripten driver.
+ set_property(TARGET ${target_name} APPEND PROPERTY
+ LINK_OPTIONS "-Wl,--no-export-dynamic"
+ "@${CMAKE_CURRENT_BINARY_DIR}/${native_export_file}")
elseif(LLVM_HAVE_LINK_VERSION_SCRIPT)
# Gold and BFD ld require a version script rather than a plain list.
set(native_export_file "${target_name}.exports")
More information about the cfe-commits
mailing list