[package]
name = "inkwell"
version = "0.5.0"
authors = ["Daniel Kolsoi <thadan64@gmail.com>"]
description = "Inkwell aims to help you pen your own programming languages by safely wrapping llvm-sys."
documentation = "https://thedan64.github.io/inkwell/"
repository = "https://github.com/TheDan64/inkwell"
readme = "README.md"
keywords = ["llvm", "safe", "wrapper"]
license = "Apache-2.0"
categories = ["development-tools::ffi"]
edition = "2021"

[features]
default = ["target-all"]

# Please update internal_macros::FEATURE_VERSIONS when adding a new LLVM version
llvm4-0 = ["llvm-sys-40"]
llvm5-0 = ["llvm-sys-50"]
llvm6-0 = ["llvm-sys-60"]
llvm7-0 = ["llvm-sys-70"]
llvm8-0 = ["llvm-sys-80"]
llvm9-0 = ["llvm-sys-90"]
llvm10-0 = ["llvm-sys-100"]
llvm11-0 = ["llvm-sys-110"]
llvm12-0 = ["llvm-sys-120"]
llvm13-0 = ["llvm-sys-130"]
llvm14-0 = ["llvm-sys-140"]
llvm15-0 = ["llvm-sys-150"]
llvm16-0 = ["llvm-sys-160"]
llvm17-0 = ["llvm-sys-170"]
llvm18-0 = ["llvm-sys-180"]

# Don't link against LLVM libraries. This is useful if another dependency is
# installing LLVM. See llvm-sys for more details. We can't enable a single
# `no-llvm-linking` feature across the board of llvm versions, as it'll cause
# cargo to try and download and compile them all. See
# https://github.com/rust-lang/cargo/issues/3494
llvm4-0-no-llvm-linking = ["llvm4-0", "llvm-sys-40/no-llvm-linking"]
llvm5-0-no-llvm-linking = ["llvm5-0", "llvm-sys-50/no-llvm-linking"]
llvm6-0-no-llvm-linking = ["llvm6-0", "llvm-sys-60/no-llvm-linking"]
llvm7-0-no-llvm-linking = ["llvm7-0", "llvm-sys-70/no-llvm-linking"]
llvm8-0-no-llvm-linking = ["llvm8-0", "llvm-sys-80/no-llvm-linking"]
llvm9-0-no-llvm-linking = ["llvm9-0", "llvm-sys-90/no-llvm-linking"]
llvm10-0-no-llvm-linking = ["llvm10-0", "llvm-sys-100/no-llvm-linking"]
llvm11-0-no-llvm-linking = ["llvm11-0", "llvm-sys-110/no-llvm-linking"]
llvm12-0-no-llvm-linking = ["llvm12-0", "llvm-sys-120/no-llvm-linking"]
llvm13-0-no-llvm-linking = ["llvm13-0", "llvm-sys-130/no-llvm-linking"]
llvm14-0-no-llvm-linking = ["llvm14-0", "llvm-sys-140/no-llvm-linking"]
llvm15-0-no-llvm-linking = ["llvm15-0", "llvm-sys-150/no-llvm-linking"]
llvm16-0-no-llvm-linking = ["llvm16-0", "llvm-sys-160/no-llvm-linking"]
llvm17-0-no-llvm-linking = ["llvm17-0", "llvm-sys-170/no-llvm-linking"]
llvm18-0-no-llvm-linking = ["llvm18-0", "llvm-sys-180/no-llvm-linking"]

# Linking preference.
# If none of these are enabled, it defaults to force static linking.
#
# Force dynamic linking against LLVM libraries. See llvm-sys for more details
llvm12-0-force-dynamic = ["llvm12-0", "llvm-sys-120/force-dynamic"]
llvm13-0-force-dynamic = ["llvm13-0", "llvm-sys-130/force-dynamic"]
llvm14-0-force-dynamic = ["llvm14-0", "llvm-sys-140/force-dynamic"]
llvm15-0-force-dynamic = ["llvm15-0", "llvm-sys-150/force-dynamic"]
llvm16-0-force-dynamic = ["llvm16-0", "llvm-sys-160/force-dynamic"]
llvm17-0-force-dynamic = ["llvm17-0", "llvm-sys-170/force-dynamic"]
llvm18-0-force-dynamic = ["llvm18-0", "llvm-sys-180/force-dynamic"]

# Prefer dynamic linking against LLVM libraries. See llvm-sys for more details
llvm12-0-prefer-dynamic = ["llvm12-0", "llvm-sys-120/prefer-dynamic"]
llvm13-0-prefer-dynamic = ["llvm13-0", "llvm-sys-130/prefer-dynamic"]
llvm14-0-prefer-dynamic = ["llvm14-0", "llvm-sys-140/prefer-dynamic"]
llvm15-0-prefer-dynamic = ["llvm15-0", "llvm-sys-150/prefer-dynamic"]
llvm16-0-prefer-dynamic = ["llvm16-0", "llvm-sys-160/prefer-dynamic"]
llvm17-0-prefer-dynamic = ["llvm17-0", "llvm-sys-170/prefer-dynamic"]
llvm18-0-prefer-dynamic = ["llvm18-0", "llvm-sys-180/prefer-dynamic"]

# Force static linking against LLVM libraries. See llvm-sys for more details
llvm12-0-force-static = ["llvm12-0", "llvm-sys-120/force-static"]
llvm13-0-force-static = ["llvm13-0", "llvm-sys-130/force-static"]
llvm14-0-force-static = ["llvm14-0", "llvm-sys-140/force-static"]
llvm15-0-force-static = ["llvm15-0", "llvm-sys-150/force-static"]
llvm16-0-force-static = ["llvm16-0", "llvm-sys-160/force-static"]
llvm17-0-force-static = ["llvm17-0", "llvm-sys-170/force-static"]
llvm18-0-force-static = ["llvm18-0", "llvm-sys-180/force-static"]

# Prefer static linking against LLVM libraries. See llvm-sys for more details
llvm12-0-prefer-static = ["llvm12-0", "llvm-sys-120/prefer-static"]
llvm13-0-prefer-static = ["llvm13-0", "llvm-sys-130/prefer-static"]
llvm14-0-prefer-static = ["llvm14-0", "llvm-sys-140/prefer-static"]
llvm15-0-prefer-static = ["llvm15-0", "llvm-sys-150/prefer-static"]
llvm16-0-prefer-static = ["llvm16-0", "llvm-sys-160/prefer-static"]
llvm17-0-prefer-static = ["llvm17-0", "llvm-sys-170/prefer-static"]
llvm18-0-prefer-static = ["llvm18-0", "llvm-sys-180/prefer-static"]

# Don't force linking to libffi on non-windows platforms. Without this feature
# inkwell always links to libffi on non-windows platforms.
no-libffi-linking = []
target-x86 = []
target-arm = []
target-mips = []
target-aarch64 = []
target-amdgpu = []
target-systemz = []
target-hexagon = []
target-nvptx = []
target-msp430 = []
target-xcore = []
target-powerpc = []
target-sparc = []
target-bpf = []
target-lanai = []
target-webassembly = []
target-riscv = []
target-loongarch = []
target-syncvm = []
target-all = [
    "target-x86",
    "target-arm",
    "target-mips",
    "target-aarch64",
    "target-amdgpu",
    "target-systemz",
    "target-hexagon",
    "target-nvptx",
    "target-msp430",
    "target-xcore",
    "target-powerpc",
    "target-sparc",
    "target-bpf",
    "target-lanai",
    "target-webassembly",
    "target-riscv",
    "target-loongarch",
]
experimental = ["static-alloc"]
nightly = ["inkwell_internals/nightly"]

[dependencies]
inkwell_internals = { path = "./internal_macros", version = "0.10.0" }

llvm-sys-40 = { package = "llvm-sys", version = "40.4", optional = true }
llvm-sys-50 = { package = "llvm-sys", version = "50.4", optional = true }
llvm-sys-60 = { package = "llvm-sys", version = "60.6", optional = true }
llvm-sys-70 = { package = "llvm-sys", version = "70.4", optional = true }
llvm-sys-80 = { package = "llvm-sys", version = "80.3", optional = true }
llvm-sys-90 = { package = "llvm-sys", version = "90.2.1", optional = true }
llvm-sys-100 = { package = "llvm-sys", version = "100.2.3", optional = true }
llvm-sys-110 = { package = "llvm-sys", version = "110.0.3", optional = true }
llvm-sys-120 = { package = "llvm-sys", version = "120.2.4", optional = true }
llvm-sys-130 = { package = "llvm-sys", version = "130.0.4", optional = true }
llvm-sys-140 = { package = "llvm-sys", version = "140.0.2", optional = true }
llvm-sys-150 = { package = "llvm-sys", version = "150.0.3", optional = true }
llvm-sys-160 = { package = "llvm-sys", version = "160.1.0", optional = true }
llvm-sys-170 = { package = "llvm-sys", version = "170.2.0", optional = true }
llvm-sys-180 = { package = "llvm-sys", version = "181.2.0", optional = true }

either = "1.5"
libc = "0.2"
once_cell = "1.16"
thiserror = "1.0.48"

static-alloc = { version = "0.2", optional = true }
serde = { version = "1.0", default-features = false, features = ["derive"], optional = true }

[dev-dependencies]
regex = "1"

[badges]
codecov = { repository = "TheDan64/inkwell" }
