Skip to content

Commit 7ba5173

Browse files
authored
Disable gas cfg when enable-gas=false (#1904)
Closes #1901
1 parent 62ed793 commit 7ba5173

File tree

2 files changed

+101
-4
lines changed

2 files changed

+101
-4
lines changed

scarb/src/ops/resolve.rs

+7-4
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ use crate::core::registry::Registry;
1515
use crate::core::resolver::Resolve;
1616
use crate::core::workspace::Workspace;
1717
use crate::core::{
18-
DepKind, DependencyVersionReq, FeatureName, ManifestDependency, PackageName, SourceId, Target,
19-
TargetKind, TestTargetProps, TestTargetType,
18+
DepKind, DependencyVersionReq, FeatureName, ManifestCompilerConfig, ManifestDependency,
19+
PackageName, SourceId, Target, TargetKind, TestTargetProps, TestTargetType,
2020
};
2121
use crate::internal::to_version::ToVersion;
2222
use crate::ops::lockfile::{read_lockfile, write_lockfile};
@@ -414,7 +414,7 @@ fn cairo_compilation_unit_for_target(
414414
let packages = solution.packages.as_ref().unwrap();
415415
let cairo_plugins = solution.cairo_plugins.as_ref().unwrap();
416416

417-
let cfg_set = build_cfg_set(&member_target);
417+
let cfg_set = build_cfg_set(&member_target, &member.manifest.compiler_config);
418418
let no_test_cfg_set = cfg_set
419419
.iter()
420420
.filter(|cfg| **cfg != Cfg::name("test"))
@@ -764,11 +764,14 @@ impl<'a> PackageSolutionCollector<'a> {
764764
}
765765

766766
/// Build a set of `cfg` items to enable while building the compilation unit.
767-
fn build_cfg_set(target: &Target) -> CfgSet {
767+
fn build_cfg_set(target: &Target, compiler_config: &ManifestCompilerConfig) -> CfgSet {
768768
let mut cfg = CfgSet::from_iter([Cfg::kv("target", target.kind.clone())]);
769769
if target.is_test() {
770770
cfg.insert(Cfg::name("test"));
771771
}
772+
if !compiler_config.enable_gas {
773+
cfg.insert(Cfg::kv("gas", "disabled"));
774+
}
772775
cfg
773776
}
774777

scarb/tests/gas_cfg.rs

+94
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
use assert_fs::prelude::*;
2+
use assert_fs::TempDir;
3+
use indoc::indoc;
4+
use scarb_test_support::command::{CommandExt, Scarb};
5+
use scarb_test_support::project_builder::ProjectBuilder;
6+
7+
#[test]
8+
fn gas_enabled_by_default() {
9+
let t = TempDir::new().unwrap();
10+
ProjectBuilder::start()
11+
.name("hello")
12+
.lib_cairo(indoc! {r#"
13+
#[cfg(not(gas: "disabled"))]
14+
fn f() -> felt252 { 42 }
15+
16+
#[cfg(gas: "disabled")]
17+
fn f() -> felt252 { 21 }
18+
19+
fn main() -> felt252 {
20+
f()
21+
}
22+
"#})
23+
.build(&t);
24+
25+
Scarb::quick_snapbox()
26+
.arg("build")
27+
.current_dir(&t)
28+
.assert()
29+
.success();
30+
31+
t.child("target/dev/hello.sierra.json")
32+
.assert(predicates::str::contains(
33+
r#""debug_name":"Const<felt252, 42>""#,
34+
));
35+
}
36+
37+
#[test]
38+
fn gas_disabled_with_config() {
39+
let t = TempDir::new().unwrap();
40+
ProjectBuilder::start()
41+
.name("hello")
42+
.manifest_extra(indoc! {r#"
43+
[cairo]
44+
enable-gas = false
45+
"#})
46+
.lib_cairo(indoc! {r#"
47+
#[cfg(not(gas: "disabled"))]
48+
fn f() -> felt252 { 42 }
49+
50+
#[cfg(gas: "disabled")]
51+
fn f() -> felt252 { 21 }
52+
53+
fn main() -> felt252 {
54+
f()
55+
}
56+
"#})
57+
.build(&t);
58+
59+
Scarb::quick_snapbox()
60+
.arg("build")
61+
.current_dir(&t)
62+
.assert()
63+
.success();
64+
65+
t.child("target/dev/hello.sierra.json")
66+
.assert(predicates::str::contains(
67+
r#""debug_name":"Const<felt252, 21>""#,
68+
));
69+
}
70+
71+
#[test]
72+
fn gas_disabled_in_metadata() {
73+
let t = TempDir::new().unwrap();
74+
ProjectBuilder::start()
75+
.name("hello")
76+
.manifest_extra(indoc! {r#"
77+
[cairo]
78+
enable-gas = false
79+
"#})
80+
.build(&t);
81+
82+
let metadata = Scarb::quick_snapbox()
83+
.arg("--json")
84+
.arg("metadata")
85+
.arg("--format-version")
86+
.arg("1")
87+
.current_dir(&t)
88+
.stdout_json::<scarb_metadata::Metadata>();
89+
90+
let unit = &metadata.compilation_units[0];
91+
assert!(unit
92+
.cfg
93+
.contains(&scarb_metadata::Cfg::KV("gas".into(), "disabled".into())));
94+
}

0 commit comments

Comments
 (0)