blob: d7351f5de7fc683275c5380d9194f883b1336fc4 [file] [log] [blame] [view]
Chih-Hung Hsiehfab43802020-04-07 14:24:01 -07001# clang-sys
2
Haibo Huang8b9513e2020-07-13 22:05:39 -07003![Crate](https://img.shields.io/crates/v/clang-sys.svg)
4![Documentation](https://docs.rs/clang-sys/badge.svg)
5![CI](https://github.com/KyleMayes/clang-sys/workflows/CI/badge.svg?branch=master)
Chih-Hung Hsiehfab43802020-04-07 14:24:01 -07006
7Rust bindings for `libclang`.
8
9If you are interested in a Rust wrapper for these bindings, see
10[clang-rs](https://github.com/KyleMayes/clang-rs).
11
12Supported on the stable, beta, and nightly Rust channels.<br/>
13Minimum supported Rust version: **1.36.0**
14
15Released under the Apache License 2.0.
16
17## Documentation
18
19There are two versions of the documentation, one for the API exposed when
20linking dynamically or statically and one for the API exposed when linking at
21runtime (see the
22[Dependencies](https://github.com/KyleMayes/clang-sys#dependencies) section
23of the README for more information on the linking options).
24
25The only difference between the APIs exposed is that when linking at runtime a
26few additional types and functions are exposed to manage the loaded `libclang`
27shared library.
28
29* Runtime - [Documentation](https://kylemayes.github.io/clang-sys/runtime/clang_sys)
30* Dynamic / Static - [Documentation](https://kylemayes.github.io/clang-sys/default/clang_sys)
31
32## Supported Versions
33
34To target a version of `libclang`, enable one of the following Cargo features:
35
36* `clang_3_5` - requires `libclang` 3.5 or later
37* `clang_3_6` - requires `libclang` 3.6 or later
38* `clang_3_7` - requires `libclang` 3.7 or later
39* `clang_3_8` - requires `libclang` 3.8 or later
40* `clang_3_9` - requires `libclang` 3.9 or later
41* `clang_4_0` - requires `libclang` 4.0 or later
42* `clang_5_0` - requires `libclang` 5.0 or later
43* `clang_6_0` - requires `libclang` 6.0 or later
44* `clang_7_0` - requires `libclang` 7.0 or later
45* `clang_8_0` - requires `libclang` 8.0 or later
46* `clang_9_0` - requires `libclang` 9.0 or later
Haibo Huang8b9513e2020-07-13 22:05:39 -070047* `clang_10_0` - requires `libclang` 10.0 or later
Chih-Hung Hsiehfab43802020-04-07 14:24:01 -070048
49If you do not enable one of these features, the API provided by `libclang` 3.5 will be available by
50default.
51
52## Dependencies
53
54By default, this crate will attempt to link to `libclang` dynamically. In this case, this crate
55depends on the `libclang` shared library (`libclang.so` on Linux, `libclang.dylib` on macOS,
56`libclang.dll` on Windows). If you want to link to `libclang` statically instead, enable the
57`static` Cargo feature. In this case, this crate depends on the LLVM and Clang static libraries. If
58you don't want to link to `libclang` at compiletime but instead want to load it at runtime, enable
59the `runtime` Cargo feature.
60
61These libraries can be either be installed as a part of Clang or downloaded
62[here](http://llvm.org/releases/download.html).
63
64**Note:** The downloads for LLVM and Clang 3.8 and later do not include the `libclang.a` static
65library. This means you cannot link to any of these versions of `libclang` statically unless you
66build it from source.
67
68### Versioned Dependencies
69
70This crate supports finding versioned instances of `libclang.so` (e.g.,`libclang-3.9.so`).
71In the case where there are multiple instances to choose from, this crate will prefer instances with
72higher versions. For example, the following instances of `libclang.so` are listed in descending
73order of preference:
74
751. `libclang-4.0.so`
762. `libclang-4.so`
773. `libclang-3.9.so`
784. `libclang-3.so`
795. `libclang.so`
80
81**Note:** On BSD distributions, versioned instances of `libclang.so` matching the pattern
82`libclang.so.*` (e.g., `libclang.so.7.0`) are also included.
83
84**Note:** On Linux distributions when the `runtime` features is enabled, versioned instances of
85`libclang.so` matching the pattern `libclang.so.*` (e.g., `libclang.so.1`) are also included.
86
87## Environment Variables
88
89The following environment variables, if set, are used by this crate to find the required libraries
90and executables:
91
92* `LLVM_CONFIG_PATH` **(compiletime)** - provides a full path to an `llvm-config` executable
93 (including the executable itself [i.e., `/usr/local/bin/llvm-config-8.0`])
94* `LIBCLANG_PATH` **(compiletime)** - provides a path to a directory containing a `libclang` shared
95 library or a full path to a specific `libclang` shared library
96* `LIBCLANG_STATIC_PATH` **(compiletime)** - provides a path to a directory containing LLVM and
97 Clang static libraries
98* `CLANG_PATH` **(runtime)** - provides a path to a `clang` executable
99
100## Linking
101
102### Dynamic
103
104`libclang` shared libraries will be searched for in the following directories:
105
106* the directory provided by the `LIBCLANG_PATH` environment variable
107* the `bin` and `lib` directories in the directory provided by `llvm-config --libdir`
108* the directories provided by `LD_LIBRARY_PATH` environment variable
109* a list of likely directories for the target platform (e.g., `/usr/local/lib` on Linux)
110* **macOS only:** the toolchain directory in the directory provided by `xcode-select --print-path`
111
112On Linux, running an executable that has been dynamically linked to `libclang` may require you to
113add a path to `libclang.so` to the `LD_LIBRARY_PATH` environment variable. The same is true on OS
114X, except the `DYLD_LIBRARY_PATH` environment variable is used instead.
115
116On Windows, running an executable that has been dynamically linked to `libclang` requires that
117`libclang.dll` can be found by the executable at runtime. See
118[here](https://msdn.microsoft.com/en-us/library/7d83bc18.aspx) for more information.
119
120### Static
121
122The availability of `llvm-config` is not optional for static linking. Ensure that an instance of
123this executable can be found on your system's path or set the `LLVM_CONFIG_PATH` environment
124variable. The required LLVM and Clang static libraries will be searched for in the same way as
125shared libraries are searched for, except the `LIBCLANG_STATIC_PATH` environment variable is used in
126place of the `LIBCLANG_PATH` environment variable.
127
128### Runtime
129
130The `clang_sys::load` function is used to load a `libclang` shared library for use in the thread in
131which it is called. The `clang_sys::unload` function will unload the `libclang` shared library.
132`clang_sys::load` searches for a `libclang` shared library in the same way one is searched for when
133linking to `libclang` dynamically at compiletime.