203 Stars
Updated Last
1 Year Ago
Started In
December 2012


CI TagBot codecov docs-stable docs-dev GitHub Discussions Genie Downloads

This package provides a Julia language wrapper for libclang: the stable, C-exported interface to the LLVM Clang compiler. The libclang API documentation provides background on the functionality available through libclang, and thus through the Julia wrapper. The repository also hosts related tools built on top of libclang functionality.


pkg> add Clang

If you'd like to use the old generator(Clang.jl v0.13), please checkout this branch for the documentation. Should you have any questions on how to upgrade the generator script, feel free to submit a post/request in the Discussions area.

Binding Generator

Clang.jl provides a module Clang.Generators for auto-generating C library bindings for Julia language from C headers.

Quick start

Write a config file generator.toml:

library_name = "libclang"
output_file_path = "./LibClang.jl"
module_name = "LibClang"
jll_pkg_name = "Clang_jll"
export_symbol_prefixes = ["CX", "clang_"]

and a Julia script generator.jl:

using Clang.Generators
using Clang.LibClang.Clang_jll  # replace this with your jll package


include_dir = normpath(Clang_jll.artifact_dir, "include")
clang_dir = joinpath(include_dir, "clang-c")

options = load_options(joinpath(@__DIR__, "generator.toml"))

# add compiler flags, e.g. "-DXXXXXXXXX"
args = get_default_args()  # Note you must call this function firstly and then append your own flags
push!(args, "-I$include_dir")

headers = [joinpath(clang_dir, header) for header in readdir(clang_dir) if endswith(header, ".h")]
# there is also an experimental `detect_headers` function for auto-detecting top-level headers in the directory
# headers = detect_headers(clang_dir, args)

# create context
ctx = create_context(headers, args, options)

# run generator

Please refer to this toml file for a full list of configuration options.


The binding generator is currently used by many projects in the Julia package ecosystem and you can take them as good examples.

Other Users:

Used By Packages