#!/usr/bin/env perl use strict; use warnings; use diagnostics; use FindBin; use lib $FindBin::Bin; use Util; use TUI; use POSIX qw(strftime); use feature 'say'; 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/build.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"; sleep(1); } # 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 = ( "Locate mmap_space in .text.wamr_mmap", "Let the compiler decide where mmap_space is located" ); 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 = ( "Compile AOT with --xip", "Compile AOT without --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_aot", # "wamr_mmap", # "--xip", )); # 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 "Locate mmap_space in .text.wamr_mmap" ) ? "true" : "false"; local $ENV{WAMR_USE_XIP} = ( $xip_variant eq "Compile AOT with --xip" ) ? "true" : "false"; my $date = strftime("%m-%d_%H-%M-%S", localtime); just( "build", $experiment, $target, $mode ); my $mmap = $variant eq "Locate mmap_space in .text.wamr_mmap" ? "mmap" : ""; my $xip = $xip_variant eq "Compile AOT with --xip" ? "xip" : ""; system( "echo '$mode $mmap $info $xip' > $local_root/build-$experiment/0.info" ); my $mmap_name = $mmap eq "mmap" ? "_mmap" : ""; my $xip_name = $xip eq "xip" ? "_xip" : ""; system( join " ", ( "mv", "$local_root/build-$experiment", "$local_builds_dir/${date}_${experiment}_${target}_${mode}${mmap_name}${xip_name}", ) ); } } } } }