@@ -769,9 +769,6 @@ func Run(pkgName string, options *compileopts.Options, cmdArgs []string) error {
769
769
// passes command line arguments and environment variables in a way appropriate
770
770
// for the given emulator.
771
771
func buildAndRun (pkgName string , config * compileopts.Config , stdout io.Writer , cmdArgs , environmentVars []string , timeout time.Duration , run func (cmd * exec.Cmd , result builder.BuildResult ) error ) (builder.BuildResult , error ) {
772
-
773
- isSingleFile := strings .HasSuffix (pkgName , ".go" )
774
-
775
772
// Determine whether we're on a system that supports environment variables
776
773
// and command line parameters (operating systems, WASI) or not (baremetal,
777
774
// WebAssembly in the browser). If we're on a system without an environment,
@@ -784,7 +781,7 @@ func buildAndRun(pkgName string, config *compileopts.Config, stdout io.Writer, c
784
781
needsEnvInVars = true
785
782
}
786
783
}
787
- var args , emuArgs , env []string
784
+ var args , env []string
788
785
var extraCmdEnv []string
789
786
if needsEnvInVars {
790
787
runtimeGlobals := make (map [string ]string )
@@ -804,20 +801,6 @@ func buildAndRun(pkgName string, config *compileopts.Config, stdout io.Writer, c
804
801
"runtime" : runtimeGlobals ,
805
802
}
806
803
}
807
- } else if config .EmulatorName () == "wasmtime" {
808
- for _ , v := range environmentVars {
809
- emuArgs = append (emuArgs , "--env" , v )
810
- }
811
-
812
- // Use of '--' argument no longer necessary as of Wasmtime v14:
813
- // https://github.com/bytecodealliance/wasmtime/pull/6946
814
- // args = append(args, "--")
815
- args = append (args , cmdArgs ... )
816
-
817
- // Set this for nicer backtraces during tests, but don't override the user.
818
- if _ , ok := os .LookupEnv ("WASMTIME_BACKTRACE_DETAILS" ); ! ok {
819
- extraCmdEnv = append (extraCmdEnv , "WASMTIME_BACKTRACE_DETAILS=1" )
820
- }
821
804
} else {
822
805
// Pass environment variables and command line parameters as usual.
823
806
// This also works on qemu-aarch64 etc.
@@ -860,7 +843,7 @@ func buildAndRun(pkgName string, config *compileopts.Config, stdout io.Writer, c
860
843
return result , err
861
844
}
862
845
863
- name = emulator [0 ]
846
+ name , emulator = emulator [0 ], emulator [ 1 : ]
864
847
865
848
// wasmtime is a WebAssembly runtime CLI with WASI enabled by default.
866
849
// By default, only stdio is allowed. For example, while STDOUT routes
@@ -869,11 +852,24 @@ func buildAndRun(pkgName string, config *compileopts.Config, stdout io.Writer, c
869
852
// outside the package directory. Other tests require temporary
870
853
// writeable directories. We allow this by adding wasmtime flags below.
871
854
if name == "wasmtime" {
855
+ var emuArgs []string
856
+
857
+ // Extract the wasmtime subcommand (e.g. "run" or "serve")
858
+ if len (emulator ) > 1 {
859
+ emuArgs = append (emuArgs , emulator [0 ])
860
+ emulator = emulator [1 :]
861
+ }
862
+
863
+ wd , _ := os .Getwd ()
864
+
872
865
// Below adds additional wasmtime flags in case a test reads files
873
866
// outside its directory, like "../testdata/e.txt". This allows any
874
867
// relative directory up to the module root, even if the test never
875
868
// reads any files.
876
869
if config .TestConfig .CompileTestBinary {
870
+ // Set working directory to package dir
871
+ wd = result .MainDir
872
+
877
873
// Add relative dirs (../, ../..) up to module root (for wasip1)
878
874
dirs := dirsToModuleRootRel (result .MainDir , result .ModuleRoot )
879
875
@@ -883,19 +879,25 @@ func buildAndRun(pkgName string, config *compileopts.Config, stdout io.Writer, c
883
879
for _ , d := range dirs {
884
880
emuArgs = append (emuArgs , "--dir=" + d )
885
881
}
882
+ } else {
883
+ emuArgs = append (emuArgs , "--dir=." )
886
884
}
887
885
888
- dir := result .MainDir
889
- if isSingleFile {
890
- dir , _ = os .Getwd ()
886
+ emuArgs = append (emuArgs , "--dir=" + wd )
887
+ emuArgs = append (emuArgs , "--env=PWD=" + wd )
888
+ for _ , v := range environmentVars {
889
+ emuArgs = append (emuArgs , "--env" , v )
891
890
}
892
- emuArgs = append (emuArgs , "--dir=." )
893
- emuArgs = append (emuArgs , "--dir=" + dir )
894
- emuArgs = append (emuArgs , "--env=PWD=" + dir )
891
+
892
+ // Set this for nicer backtraces during tests, but don't override the user.
893
+ if _ , ok := os .LookupEnv ("WASMTIME_BACKTRACE_DETAILS" ); ! ok {
894
+ extraCmdEnv = append (extraCmdEnv , "WASMTIME_BACKTRACE_DETAILS=1" )
895
+ }
896
+
897
+ emulator = append (emuArgs , emulator ... )
895
898
}
896
899
897
- emuArgs = append (emuArgs , emulator [1 :]... )
898
- args = append (emuArgs , args ... )
900
+ args = append (emulator , args ... )
899
901
}
900
902
var cmd * exec.Cmd
901
903
if ctx != nil {
@@ -925,7 +927,7 @@ func buildAndRun(pkgName string, config *compileopts.Config, stdout io.Writer, c
925
927
926
928
// Run binary.
927
929
if config .Options .PrintCommands != nil {
928
- config .Options .PrintCommands (cmd .Path , cmd .Args ... )
930
+ config .Options .PrintCommands (cmd .Path , cmd .Args [ 1 :] ... )
929
931
}
930
932
err = run (cmd , result )
931
933
if err != nil {
0 commit comments