| commit | ffc4d87f9b2b57f7020fa5fd0f1d3003370c2d80 | [log] [tgz] |
|---|---|---|
| author | Andrew Rogers <andrurogerz@gmail.com> | Mon Jun 16 11:03:48 2025 -0700 |
| committer | GitHub <noreply@github.com> | Mon Jun 16 11:03:48 2025 -0700 |
| tree | 8ac209a0321fc71f1320648d2d7d65691ad38fc7 | |
| parent | 4cd3e41bce449a10f431a3112b6cb8d7bc1b09cf [diff] |
[llvm] annotate interfaces in Passes for DLL export (#143794) ## Purpose This patch is one in a series of code-mods that annotate LLVM’s public interface for export. This patch annotates the `llvm/Passes` library and other pass-related headers. These annotations currently have no meaningful impact on the LLVM build; however, they are a prerequisite to support an LLVM Windows DLL (shared library) build. ## Background This effort is tracked in #109483. Additional context is provided in [this discourse](https://discourse.llvm.org/t/psa-annotating-llvm-public-interface/85307), and documentation for `LLVM_ABI` and related annotations is found in the LLVM repo [here](https://github.com/llvm/llvm-project/blob/main/llvm/docs/InterfaceExportAnnotations.rst). The bulk of these changes were generated automatically using the [Interface Definition Scanner (IDS)](https://github.com/compnerd/ids) tool, followed formatting with `git clang-format`. The following manual adjustments were also applied after running IDS on Linux: - Remove the redundant declaration of the `initializeKCFIPass` function from llvm/include/llvm/InitializePasses.h because IDS only auto-annotates the first declaration it encounters, and the second un-annotated declaration results in an MSVC warning - Add `LLVM_ABI` to a number of private `AnalysisKey` fields in classes that extend the `AnalysisInfoMixin` template class. - Add `LLVM_ABI` to the `ChangeReporter` and `TextChangeReporter` template class definitions in llvm/include/llvm/Passes/StandardInstrumentations.h and remove the extern template instantiations. This is the only way I've found to get everything compiling warning-free when building a DLL because both template classes have methods implemented out-of-line. ## Validation Local builds and tests to validate cross-platform compatibility. This included llvm, clang, and lldb on the following configurations: - Windows with MSVC - Windows with Clang - Linux with GCC - Linux with Clang - Darwin with Clang
Welcome to the LLVM project!
This repository contains the source code for LLVM, a toolkit for the construction of highly optimized compilers, optimizers, and run-time environments.
The LLVM project has multiple components. The core of the project is itself called “LLVM”. This contains all of the tools, libraries, and header files needed to process intermediate representations and convert them into object files. Tools include an assembler, disassembler, bitcode analyzer, and bitcode optimizer.
C-like languages use the Clang frontend. This component compiles C, C++, Objective-C, and Objective-C++ code into LLVM bitcode -- and from there into object files, using LLVM.
Other components include: the libc++ C++ standard library, the LLD linker, and more.
Consult the Getting Started with LLVM page for information on building and running LLVM.
For information on how to contribute to the LLVM project, please take a look at the Contributing to LLVM guide.
Join the LLVM Discourse forums, Discord chat, LLVM Office Hours or Regular sync-ups.
The LLVM project has adopted a code of conduct for participants to all modes of communication within the project.