about summary refs log tree commit diff
path: root/tvix/eval/src/builtins/mod.rs
diff options
context:
space:
mode:
authorAdam Joseph <adam@westernsemico.com>2022-10-12T09·26-0700
committertazjin <tazjin@tvl.su>2022-10-24T12·20+0000
commitf7ba502005d6376328e1e2591d70973d4f1d6b15 (patch)
treec1a78d6a960cc4766b69d77de00e5b4f599c4f83 /tvix/eval/src/builtins/mod.rs
parente2f0967d3fd44cac78ac50425bc2dbe65fd4a8c4 (diff)
feat(tvix/eval): implement builtins.currentSystem r/5190
This commit implements builtins.currentSystem, by capturing the
cargo environment variable `TARGET` and exposing it to rustc as
`TVIX_CURRENT_SYSTEM` so it can be inserted into the source code
using `env!()`.

The resulting value needs to be massaged a bit, since it is an "LLVM
triple".  The current code should work for all the platforms for
which cppnix works (thanks qyliss for generating the list!).  It
does *not* reject all of the triples that cppnix's configure.ac
rejects -- it is much more forgiving.  We can tighten this up in a
future commit.

Signed-off-by: Adam Joseph <adam@westernsemico.com>
Change-Id: I947f504b2af5a7fee8cf0cb301421d2fc9174ce1
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6986
Tested-by: BuildkiteCI
Reviewed-by: tazjin <tazjin@tvl.su>
Diffstat (limited to '')
-rw-r--r--tvix/eval/src/builtins/mod.rs7
1 files changed, 7 insertions, 0 deletions
diff --git a/tvix/eval/src/builtins/mod.rs b/tvix/eval/src/builtins/mod.rs
index 2209edd962..25d00070e9 100644
--- a/tvix/eval/src/builtins/mod.rs
+++ b/tvix/eval/src/builtins/mod.rs
@@ -663,6 +663,8 @@ fn placeholders() -> Vec<Builtin> {
         },
     )]
 }
+// we set TVIX_CURRENT_SYSTEM in build.rs
+pub const CURRENT_PLATFORM: &str = env!("TVIX_CURRENT_SYSTEM");
 
 fn builtins_set() -> NixAttrs {
     let mut map: BTreeMap<NixString, Value> = BTreeMap::new();
@@ -673,6 +675,11 @@ fn builtins_set() -> NixAttrs {
         Value::String("2.3-compat-tvix-0.1".into()),
     );
 
+    map.insert(
+        "currentSystem".into(),
+        crate::systems::llvm_triple_to_nix_double(CURRENT_PLATFORM).into(),
+    );
+
     let mut add_builtins = |builtins: Vec<Builtin>| {
         for builtin in builtins {
             map.insert(builtin.name().into(), Value::Builtin(builtin));