@@ -28,6 +28,10 @@ use std::{
2828const OVERRIDE_RUSTUP_TOOLCHAIN_ENV_VAR : & str = "PALLET_REVIVE_FIXTURES_RUSTUP_TOOLCHAIN" ;
2929const OVERRIDE_STRIP_ENV_VAR : & str = "PALLET_REVIVE_FIXTURES_STRIP" ;
3030const OVERRIDE_OPTIMIZE_ENV_VAR : & str = "PALLET_REVIVE_FIXTURES_OPTIMIZE" ;
31+ /// Do not build the fixtures, they will resolve to `None`.
32+ ///
33+ /// Depending on the usage, they will probably panic at runtime.
34+ const SKIP_PALLET_REVIVE_FIXTURES : & str = "SKIP_PALLET_REVIVE_FIXTURES" ;
3135
3236/// A contract entry.
3337#[ derive( Clone ) ]
@@ -250,7 +254,10 @@ fn compile_with_standard_json(
250254 . stderr ( std:: process:: Stdio :: piped ( ) )
251255 . spawn ( )
252256 . with_context ( || {
253- format ! ( "Failed to execute {}. Make sure {} is installed." , compiler, compiler)
257+ format ! (
258+ "Failed to execute {compiler}. Make sure {compiler} is installed or \
259+ set env variable `{SKIP_PALLET_REVIVE_FIXTURES}=1` to skip fixtures compilation."
260+ )
254261 } ) ?;
255262
256263 let mut stdin = compiler_output. stdin . as_ref ( ) . unwrap ( ) ;
@@ -436,6 +443,21 @@ fn generate_fixture_location(temp_dir: &Path, out_dir: &Path, entries: &[Entry])
436443 let mut file = fs:: File :: create ( temp_dir. join ( "fixture_location.rs" ) )
437444 . context ( "Failed to create fixture_location.rs" ) ?;
438445
446+ let ( fixtures, fixtures_resolc) = if env:: var ( SKIP_PALLET_REVIVE_FIXTURES ) . is_err ( ) {
447+ (
448+ format ! (
449+ r#"Some(include_bytes!(concat!("{}", "/", $name, ".polkavm")))"# ,
450+ out_dir. display( )
451+ ) ,
452+ format ! (
453+ r#"Some(include_bytes!(concat!("{}", "/", $name, ".resolc.polkavm")))"# ,
454+ out_dir. display( )
455+ ) ,
456+ )
457+ } else {
458+ ( "None" . into ( ) , "None" . into ( ) )
459+ } ;
460+
439461 write ! (
440462 file,
441463 r#"
@@ -445,14 +467,14 @@ fn generate_fixture_location(temp_dir: &Path, out_dir: &Path, entries: &[Entry])
445467 #[macro_export]
446468 macro_rules! fixture {{
447469 ($name: literal) => {{
448- include_bytes!(concat!("{0}", "/", $name, ".polkavm"))
470+ {fixtures}
449471 }};
450472 }}
451473
452474 #[macro_export]
453475 macro_rules! fixture_resolc {{
454476 ($name: literal) => {{
455- include_bytes!(concat!("{0}", "/", $name, ".resolc.polkavm"))
477+ {fixtures_resolc}
456478 }};
457479 }}
458480 "# ,
@@ -494,19 +516,21 @@ pub fn main() -> Result<()> {
494516 return Ok ( ( ) ) ;
495517 }
496518
497- // Compile Rust contracts
498- let rust_entries: Vec < _ > = entries
499- . iter ( )
500- . filter ( |e| matches ! ( e. contract_type, ContractType :: Rust ) )
501- . collect ( ) ;
502- if !rust_entries. is_empty ( ) {
503- create_cargo_toml ( & fixtures_dir, rust_entries. into_iter ( ) , & build_dir) ?;
504- invoke_build ( & build_dir) ?;
505- write_output ( & build_dir, & out_dir, entries. clone ( ) ) ?;
506- }
519+ if env:: var ( SKIP_PALLET_REVIVE_FIXTURES ) . is_err ( ) {
520+ // Compile Rust contracts
521+ let rust_entries: Vec < _ > = entries
522+ . iter ( )
523+ . filter ( |e| matches ! ( e. contract_type, ContractType :: Rust ) )
524+ . collect ( ) ;
525+ if !rust_entries. is_empty ( ) {
526+ create_cargo_toml ( & fixtures_dir, rust_entries. into_iter ( ) , & build_dir) ?;
527+ invoke_build ( & build_dir) ?;
528+ write_output ( & build_dir, & out_dir, entries. clone ( ) ) ?;
529+ }
507530
508- // Compile Solidity contracts
509- compile_solidity_contracts ( & contracts_dir, & out_dir, & entries) ?;
531+ // Compile Solidity contracts
532+ compile_solidity_contracts ( & contracts_dir, & out_dir, & entries) ?;
533+ }
510534
511535 let temp_dir: PathBuf =
512536 env:: var ( "OUT_DIR" ) . context ( "Failed to fetch `OUT_DIR` env variable" ) ?. into ( ) ;
0 commit comments