#!/usr/bin/env perl use strict; use warnings; use diagnostics; use FindBin; use lib $FindBin::Bin; use Util; use TUI; use feature 'say'; my $date = Util::date_now; my $local_root = '/home/christoph/Notes/TU/MastersThesis/FailNix'; my $local_builds_dir = "$local_root/builds"; my $local_experiments_dir = "$local_root/targets/wasm-module"; my $justbin = "$local_root/just-bin/just"; my $justfile = "$local_root/scripts/nixos.just"; my @targets = ( "fail", "linux", "linux-baremetal" ); my @modes = ( "c", "aot", "interp" ); sub just { say "Running: just @_..."; system("$justbin -d $local_root -f $justfile @_") and die "Build failed"; } # Find and select experiments my @experiments = map { s/\.cpp//r } Util::find_files($local_experiments_dir); my @selected_experiments = TUI::select_from_list( "Select Experiments to Build", 1, @experiments ); die "No experiment selected" unless @selected_experiments; # Select targets my @selected_targets = TUI::select_from_list( "Select Target Platforms", 1, @targets ); die "No target selected" unless @selected_targets; # Select modes my @selected_modes = TUI::select_from_list( "Select Execution Modes", 1, @modes ); die "No mode selected" unless @selected_modes; # Select WAMR mmap variant my @wamr_variants = ( "no .wamr_mmap", ".wamr_mmap" ); my @selected_variants = TUI::select_from_list( "Select WAMR mmap Variant", 1, @wamr_variants ); die "No variant selected" unless @selected_variants; # Select XIP variant my @xip_variants = ( "no --xip", "--xip" ); my @selected_xip_variants = TUI::select_from_list( "Select WAMRC XIP Variant", 1, @xip_variants ); die "No XIP variant selected" unless @selected_xip_variants; # Select 0.info contents my $info = join " ", TUI::select_from_list( "Select '0.info' Contents for ", 1, ( "baseline", "--catch-outer", "--catch-text", # ".wamr_mmap", ".wamr_aot", )); # Build everything # TODO: linux-baremetal target is broken system( "mkdir", "-p", "$local_builds_dir" ); foreach my $experiment (@selected_experiments) { foreach my $target (@selected_targets) { foreach my $mode (@selected_modes) { foreach my $variant (@selected_variants) { foreach my $xip_variant (@selected_xip_variants) { # These variables control which libiwasm and wamrc flags are used local $ENV{WAMR_USE_MMAP} = ( $variant eq ".wamr_mmap" ) ? "true" : "false"; local $ENV{WAMR_USE_XIP} = ( $xip_variant eq "--xip" ) ? "true" : "false"; just( "build", $experiment, $target, $mode ); my $mmap = $variant eq ".wamr_mmap" ? ".wamr_mmap" : ""; my $xip = $xip_variant eq "--xip" ? "--xip" : ""; system( "echo '$mode $mmap $info $xip' > $local_root/build-$experiment/0.info" ); system( join " ", ( "mv", "$local_root/build-$experiment", "$local_builds_dir/${date}_$experiment-$target-$mode", ) ); } } } } }