Skip to content

Commit 3e22655

Browse files
committed
Split monolithic raw crates into sys crates
Creating a crate for bwd-gc highlights the fact that it would be nice to fix 2! The file blocklist is a lost less unmaintainable then the more fine-grained one we had before. Fix #9
1 parent edf4d62 commit 3e22655

File tree

56 files changed

+607
-169
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+607
-169
lines changed

Cargo.lock

Lines changed: 62 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
[workspace]
22
members = [
3-
"nix-bindings-bindgen-raw",
3+
"nix-bindings-bdwgc-sys",
4+
"nix-bindings-util-sys",
5+
"nix-bindings-store-sys",
6+
"nix-bindings-expr-sys",
7+
"nix-bindings-fetchers-sys",
8+
"nix-bindings-flake-sys",
49
"nix-bindings-expr",
510
"nix-bindings-fetchers",
611
"nix-bindings-flake",

flake.nix

Lines changed: 19 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,7 @@
2929
{
3030
_file = ./flake.nix;
3131
options.perSystem = flake-parts-lib.mkPerSystemOption (
32-
{ config, pkgs, ... }:
33-
let
34-
cfg = config.nix-bindings-rust;
35-
in
32+
{ pkgs, ... }:
3633
{
3734
options.nix-bindings-rust = {
3835
nixPackage = lib.mkOption {
@@ -49,10 +46,25 @@
4946
A module to load into your nix-cargo-integration
5047
[`perSystem.nci.projects.<name>.depsDrvConfig`](https://flake.parts/options/nix-cargo-integration.html#opt-perSystem.nci.projects._name_.depsDrvConfig) or similar such options.
5148
49+
This provides common build configuration (pkg-config, libclang, etc.) but you must
50+
add the specific Nix C libraries your crates need to `buildInputs`:
51+
- `nix-bindings-util-sys` needs `nix-util-c`
52+
- `nix-bindings-store-sys` needs `nix-store-c`
53+
- `nix-bindings-expr-sys` needs `nix-expr-c`
54+
- `nix-bindings-fetchers-sys` needs `nix-fetchers-c` (Nix >= 2.29)
55+
- `nix-bindings-flake-sys` needs `nix-flake-c`
56+
- `nix-bindings-bdwgc-sys` needs `boehmgc`
57+
5258
Example:
5359
```nix
54-
perSystem = perSystem@{ config, ... }: {
55-
nci.projects."my_project".depsDrvConfig = perSystem.config.nix-bindings-rust.nciBuildConfig;
60+
perSystem = perSystem@{ config, pkgs, ... }: {
61+
nci.projects."my_project".depsDrvConfig = {
62+
imports = [ perSystem.config.nix-bindings-rust.nciBuildConfig ];
63+
mkDerivation.buildInputs = [
64+
perSystem.config.nix-bindings-rust.nixPackage.libs.nix-store-c
65+
# ... add other libs as needed
66+
];
67+
};
5668
}
5769
```
5870
'';
@@ -64,22 +76,7 @@
6476
buildInputs = [
6577
# stdbool.h
6678
pkgs.stdenv.cc
67-
]
68-
++ (
69-
if cfg.nixPackage ? libs then
70-
let
71-
l = cfg.nixPackage.libs;
72-
in
73-
[
74-
l.nix-expr-c
75-
l.nix-store-c
76-
l.nix-util-c
77-
l.nix-fetchers-c or null # Nix >= 2.29
78-
l.nix-flake-c
79-
]
80-
else
81-
[ cfg.nixPackage ]
82-
);
79+
];
8380
nativeBuildInputs = [
8481
pkgs.pkg-config
8582
];

nci.nix

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,24 @@
22
perSystem =
33
{
44
config,
5+
pkgs,
56
...
67
}:
8+
let
9+
cfg = config.nix-bindings-rust;
10+
nixLibs =
11+
if cfg.nixPackage ? libs then
12+
cfg.nixPackage.libs
13+
else
14+
# Fallback for older Nix versions without split libs
15+
{
16+
nix-util-c = cfg.nixPackage;
17+
nix-store-c = cfg.nixPackage;
18+
nix-expr-c = cfg.nixPackage;
19+
nix-fetchers-c = cfg.nixPackage;
20+
nix-flake-c = cfg.nixPackage;
21+
};
22+
in
723
{
824
# https://flake.parts/options/nix-cargo-integration
925
nci.projects.nix-bindings = {
@@ -38,12 +54,46 @@
3854
echo "experimental-features = ca-derivations flakes" > "$NIX_CONF_DIR/nix.conf"
3955
4056
# Init ahead of time, because concurrent initialization is flaky
41-
${config.nix-bindings-rust.nixPackage}/bin/nix-store --init
57+
${cfg.nixPackage}/bin/nix-store --init
4258
4359
echo "Store initialized."
4460
'';
4561
};
4662
};
4763
};
64+
65+
# Per-crate configuration: only provide the specific Nix libs each crate needs
66+
# FIXME should use propagatedBuildInputs
67+
nci.crates.nix-bindings-bdwgc-sys.drvConfig.mkDerivation.buildInputs = [
68+
pkgs.boehmgc
69+
];
70+
nci.crates.nix-bindings-util-sys.drvConfig.mkDerivation.buildInputs = [
71+
nixLibs.nix-util-c
72+
];
73+
nci.crates.nix-bindings-util.drvConfig.mkDerivation.buildInputs =
74+
config.nci.crates.nix-bindings-util-sys.drvConfig.mkDerivation.buildInputs;
75+
nci.crates.nix-bindings-store-sys.drvConfig.mkDerivation.buildInputs =
76+
config.nci.crates.nix-bindings-util-sys.drvConfig.mkDerivation.buildInputs
77+
++ [ nixLibs.nix-store-c ];
78+
nci.crates.nix-bindings-store.drvConfig.mkDerivation.buildInputs =
79+
config.nci.crates.nix-bindings-store-sys.drvConfig.mkDerivation.buildInputs;
80+
nci.crates.nix-bindings-expr-sys.drvConfig.mkDerivation.buildInputs =
81+
config.nci.crates.nix-bindings-store-sys.drvConfig.mkDerivation.buildInputs
82+
++ [
83+
nixLibs.nix-expr-c
84+
pkgs.boehmgc
85+
];
86+
nci.crates.nix-bindings-expr.drvConfig.mkDerivation.buildInputs =
87+
config.nci.crates.nix-bindings-expr-sys.drvConfig.mkDerivation.buildInputs;
88+
nci.crates.nix-bindings-fetchers-sys.drvConfig.mkDerivation.buildInputs =
89+
config.nci.crates.nix-bindings-expr-sys.drvConfig.mkDerivation.buildInputs
90+
++ [ nixLibs.nix-fetchers-c ];
91+
nci.crates.nix-bindings-fetchers.drvConfig.mkDerivation.buildInputs =
92+
config.nci.crates.nix-bindings-fetchers-sys.drvConfig.mkDerivation.buildInputs;
93+
nci.crates.nix-bindings-flake-sys.drvConfig.mkDerivation.buildInputs =
94+
config.nci.crates.nix-bindings-fetchers-sys.drvConfig.mkDerivation.buildInputs
95+
++ [ nixLibs.nix-flake-c ];
96+
nci.crates.nix-bindings-flake.drvConfig.mkDerivation.buildInputs =
97+
config.nci.crates.nix-bindings-flake-sys.drvConfig.mkDerivation.buildInputs;
4898
};
4999
}

nix-bindings-bdwgc-sys/Cargo.toml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
[package]
2+
name = "nix-bindings-bdwgc-sys"
3+
version = "0.1.0"
4+
edition = "2021"
5+
build = "build.rs"
6+
license = "LGPL-2.1"
7+
8+
[lib]
9+
path = "src/lib.rs"
10+
11+
[dependencies]
12+
13+
[build-dependencies]
14+
bindgen = "0.69"
15+
pkg-config = "0.3"

nix-bindings-bdwgc-sys/README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# nix-bindings-bdwgc-sys
2+
3+
This crate contains generated bindings for the Boehm-Demers-Weiser garbage collector (`bdw-gc`).
4+
**You should not have to use this crate directly,** and so you should probably not add it to your dependencies.

nix-bindings-bdwgc-sys/build.rs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
use std::env;
2+
use std::path::PathBuf;
3+
4+
fn main() {
5+
println!("cargo:rerun-if-changed=include/bdwgc.h");
6+
7+
let mut args = Vec::new();
8+
for path in pkg_config::probe_library("bdw-gc")
9+
.unwrap()
10+
.include_paths
11+
.iter()
12+
{
13+
args.push(format!("-I{}", path.to_str().unwrap()));
14+
}
15+
16+
let bindings = bindgen::Builder::default()
17+
.header("include/bdwgc.h")
18+
.clang_args(args)
19+
.parse_callbacks(Box::new(bindgen::CargoCallbacks::new()))
20+
.generate()
21+
.expect("Unable to generate bindings");
22+
23+
let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
24+
bindings
25+
.write_to_file(out_path.join("bindings.rs"))
26+
.expect("Couldn't write bindings!");
27+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
#define GC_THREADS
2+
#include <gc/gc.h>

nix-bindings-bdwgc-sys/src/lib.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#![allow(non_upper_case_globals)]
2+
#![allow(non_camel_case_types)]
3+
#![allow(non_snake_case)]
4+
#![allow(dead_code)]
5+
#![allow(clippy::all)]
6+
7+
include!(concat!(env!("OUT_DIR"), "/bindings.rs"));

nix-bindings-bindgen-raw/README.md

Lines changed: 0 additions & 12 deletions
This file was deleted.

0 commit comments

Comments
 (0)