[package]
name = "llvm-ir"
version = "0.11.3"
authors = ["Craig Disselkoen <craigdissel@gmail.com>"]
edition = "2018"
description = "LLVM IR in natural Rust data structures"
documentation = "https://docs.rs/llvm-ir"
repository = "https://github.com/cdisselkoen/llvm-ir"
readme = "README.md"
keywords = ["llvm", "ir"]
license = "MIT"
build = "build.rs"

[dependencies]
llvm-sys-90 = { package = "llvm-sys", version = "90.2.0", optional = true }
llvm-sys-100 = { package = "llvm-sys", version = "100.2.0", optional = true }
llvm-sys-110 = { package = "llvm-sys", version = "110.0.0", optional = true }
llvm-sys-120 = { package = "llvm-sys", version = "120.2.0", optional = true }
llvm-sys-130 = { package = "llvm-sys", version = "130.0.0", optional = true }
llvm-sys-140 = { package = "llvm-sys", version = "140.0.0", optional = true }
llvm-sys-150 = { package = "llvm-sys", version = "150.1.0", optional = true }
llvm-sys-160 = { package = "llvm-sys", version = "160.1.2", optional = true }
llvm-sys-170 = { package = "llvm-sys", version = "170.0.1", optional = true }
llvm-sys-181 = { package = "llvm-sys", version = "181.0.0", optional = true }
llvm-sys-191 = { package = "llvm-sys", version = "191.0.0", optional = true }
either = "1.9"
log = "0.4"
ordered-float = "4.6.0"

[dev-dependencies]
env_logger = "0.10"
itertools = "0.11"

[features]
# Select the LLVM version to be compatible with.
# You _must_ enable exactly one of the following features.
llvm-9 = ["llvm-sys-90", "llvm-9-or-lower", "llvm-9-or-greater"]
llvm-10 = ["llvm-sys-100", "llvm-10-or-lower", "llvm-10-or-greater"]
llvm-11 = ["llvm-sys-110", "llvm-11-or-lower", "llvm-11-or-greater"]
llvm-12 = ["llvm-sys-120", "llvm-12-or-lower", "llvm-12-or-greater"]
llvm-13 = ["llvm-sys-130", "llvm-13-or-lower", "llvm-13-or-greater"]
llvm-14 = ["llvm-sys-140", "llvm-14-or-lower", "llvm-14-or-greater"]
llvm-15 = ["llvm-sys-150", "llvm-15-or-lower", "llvm-15-or-greater"]
llvm-16 = ["llvm-sys-160", "llvm-16-or-lower", "llvm-16-or-greater"]
llvm-17 = ["llvm-sys-170", "llvm-17-or-lower", "llvm-17-or-greater"]
llvm-18 = ["llvm-sys-181", "llvm-18-or-lower", "llvm-18-or-greater"]
llvm-19 = ["llvm-sys-191", "llvm-19-or-lower", "llvm-19-or-greater"]

###
# For convenience, these automatically-enabled features allow us to avoid
# checking complex combinations of features all the time. They are not meant to
# be manually enabled; use the above llvm-x features instead
llvm-9-or-greater = []
llvm-10-or-greater = ["llvm-9-or-greater"]
llvm-11-or-greater = ["llvm-10-or-greater"]
llvm-12-or-greater = ["llvm-11-or-greater"]
llvm-13-or-greater = ["llvm-12-or-greater"]
llvm-14-or-greater = ["llvm-13-or-greater"]
llvm-15-or-greater = ["llvm-14-or-greater"]
llvm-16-or-greater = ["llvm-15-or-greater"]
llvm-17-or-greater = ["llvm-16-or-greater"]
llvm-18-or-greater = ["llvm-17-or-greater"]
llvm-19-or-greater = ["llvm-18-or-greater"]

llvm-9-or-lower = ["llvm-10-or-lower"]
llvm-10-or-lower = ["llvm-11-or-lower"]
llvm-11-or-lower = ["llvm-12-or-lower"]
llvm-12-or-lower = ["llvm-13-or-lower"]
llvm-13-or-lower = ["llvm-14-or-lower"]
llvm-14-or-lower = ["llvm-15-or-lower"]
llvm-15-or-lower = ["llvm-16-or-lower"]
llvm-16-or-lower = ["llvm-17-or-lower"]
llvm-17-or-lower = ["llvm-18-or-lower"]
llvm-18-or-lower = ["llvm-19-or-lower"]
llvm-19-or-lower = []
###

# The `strict-versioning` feature requires an exact match between the
# system LLVM version and the version selected with the above features.
#
# The `?` in the below ensures that we only enable the feature if the dependency
# is already present.
# This avoids activating all the optional dependencies when `strict-versioning`
# is activated.
strict-versioning = [
    "llvm-sys-90?/strict-versioning",
    "llvm-sys-100?/strict-versioning",
    "llvm-sys-110?/strict-versioning",
    "llvm-sys-120?/strict-versioning",
    "llvm-sys-130?/strict-versioning",
    "llvm-sys-140?/strict-versioning",
    "llvm-sys-150?/strict-versioning",
    "llvm-sys-160?/strict-versioning",
    "llvm-sys-170?/strict-versioning",
    "llvm-sys-181?/strict-versioning",
    "llvm-sys-191?/strict-versioning",
]

# The `prefer-dynamic` feature is only available on llvm-sys versions >= 120.
prefer-dynamic = [
    "llvm-sys-120?/prefer-dynamic",
    "llvm-sys-130?/prefer-dynamic",
    "llvm-sys-140?/prefer-dynamic",
    "llvm-sys-150?/prefer-dynamic",
    "llvm-sys-160?/prefer-dynamic",
    "llvm-sys-170?/prefer-dynamic",
    "llvm-sys-181?/prefer-dynamic",
    "llvm-sys-191?/prefer-dynamic",
]

[package.metadata.docs.rs]
# Generate docs.rs documentation with the llvm-10 feature
features = ["llvm-10"]