mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-16 02:33:28 +00:00
tinygo: add relative and absolute --dir options to wasmtime args (#4431)
main: add relative and absolute --dir options to wasmtime args
This commit is contained in:
+1
-1
@@ -293,7 +293,7 @@ tinygo: ## Build the TinyGo compiler
|
|||||||
@if [ ! -f "$(LLVM_BUILDDIR)/bin/llvm-config" ]; then echo "Fetch and build LLVM first by running:"; echo " $(MAKE) llvm-source"; echo " $(MAKE) $(LLVM_BUILDDIR)"; exit 1; fi
|
@if [ ! -f "$(LLVM_BUILDDIR)/bin/llvm-config" ]; then echo "Fetch and build LLVM first by running:"; echo " $(MAKE) llvm-source"; echo " $(MAKE) $(LLVM_BUILDDIR)"; exit 1; fi
|
||||||
CGO_CPPFLAGS="$(CGO_CPPFLAGS)" CGO_CXXFLAGS="$(CGO_CXXFLAGS)" CGO_LDFLAGS="$(CGO_LDFLAGS)" $(GOENVFLAGS) $(GO) build -buildmode exe -o build/tinygo$(EXE) -tags "byollvm osusergo" -ldflags="-X github.com/tinygo-org/tinygo/goenv.GitSha1=`git rev-parse --short HEAD`" .
|
CGO_CPPFLAGS="$(CGO_CPPFLAGS)" CGO_CXXFLAGS="$(CGO_CXXFLAGS)" CGO_LDFLAGS="$(CGO_LDFLAGS)" $(GOENVFLAGS) $(GO) build -buildmode exe -o build/tinygo$(EXE) -tags "byollvm osusergo" -ldflags="-X github.com/tinygo-org/tinygo/goenv.GitSha1=`git rev-parse --short HEAD`" .
|
||||||
test: wasi-libc check-nodejs-version
|
test: wasi-libc check-nodejs-version
|
||||||
CGO_CPPFLAGS="$(CGO_CPPFLAGS)" CGO_CXXFLAGS="$(CGO_CXXFLAGS)" CGO_LDFLAGS="$(CGO_LDFLAGS)" $(GO) test $(GOTESTFLAGS) -timeout=20m -buildmode exe -tags "byollvm osusergo" $(GOTESTPKGS)
|
CGO_CPPFLAGS="$(CGO_CPPFLAGS)" CGO_CXXFLAGS="$(CGO_CXXFLAGS)" CGO_LDFLAGS="$(CGO_LDFLAGS)" $(GO) test $(GOTESTFLAGS) -v -timeout=1h -buildmode exe -tags "byollvm osusergo" $(GOTESTPKGS)
|
||||||
|
|
||||||
# Standard library packages that pass tests on darwin, linux, wasi, and windows, but take over a minute in wasi
|
# Standard library packages that pass tests on darwin, linux, wasi, and windows, but take over a minute in wasi
|
||||||
TEST_PACKAGES_SLOW = \
|
TEST_PACKAGES_SLOW = \
|
||||||
|
|||||||
@@ -283,46 +283,6 @@ func Test(pkgName string, stdout, stderr io.Writer, options *compileopts.Options
|
|||||||
// Tests are always run in the package directory.
|
// Tests are always run in the package directory.
|
||||||
cmd.Dir = result.MainDir
|
cmd.Dir = result.MainDir
|
||||||
|
|
||||||
// wasmtime is the default emulator used for `-target=wasip1`. wasmtime
|
|
||||||
// is a WebAssembly runtime CLI with WASI enabled by default. However,
|
|
||||||
// only stdio are allowed by default. For example, while STDOUT routes
|
|
||||||
// to the host, other files don't. It also does not inherit environment
|
|
||||||
// variables from the host. Some tests read testdata files, often from
|
|
||||||
// outside the package directory. Other tests require temporary
|
|
||||||
// writeable directories. We allow this by adding wasmtime flags below.
|
|
||||||
if config.EmulatorName() == "wasmtime" {
|
|
||||||
// At this point, The current working directory is at the package
|
|
||||||
// directory. Ex. $GOROOT/src/compress/flate for compress/flate.
|
|
||||||
// buildAndRun has already added arguments for wasmtime, that allow
|
|
||||||
// read-access to files such as "testdata/huffman-zero.in".
|
|
||||||
//
|
|
||||||
// Ex. main(.wasm) --dir=. -- -test.v
|
|
||||||
|
|
||||||
// Below adds additional wasmtime flags in case a test reads files
|
|
||||||
// outside its directory, like "../testdata/e.txt". This allows any
|
|
||||||
// relative directory up to the module root, even if the test never
|
|
||||||
// reads any files.
|
|
||||||
//
|
|
||||||
// Ex. run --dir=.. --dir=../.. --dir=../../..
|
|
||||||
var dirs []string
|
|
||||||
switch config.Target.GOOS {
|
|
||||||
case "wasip1":
|
|
||||||
dirs = dirsToModuleRootRel(result.MainDir, result.ModuleRoot)
|
|
||||||
default:
|
|
||||||
dirs = dirsToModuleRootAbs(result.MainDir, result.ModuleRoot)
|
|
||||||
}
|
|
||||||
|
|
||||||
args := []string{"run"}
|
|
||||||
for _, d := range dirs {
|
|
||||||
args = append(args, "--dir="+d)
|
|
||||||
}
|
|
||||||
|
|
||||||
args = append(args, "--env=PWD="+cmd.Dir)
|
|
||||||
|
|
||||||
args = append(args, cmd.Args[1:]...)
|
|
||||||
cmd.Args = args
|
|
||||||
}
|
|
||||||
|
|
||||||
// Run the test.
|
// Run the test.
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
err = cmd.Run()
|
err = cmd.Run()
|
||||||
@@ -848,12 +808,11 @@ func buildAndRun(pkgName string, config *compileopts.Config, stdout io.Writer, c
|
|||||||
for _, v := range environmentVars {
|
for _, v := range environmentVars {
|
||||||
emuArgs = append(emuArgs, "--env", v)
|
emuArgs = append(emuArgs, "--env", v)
|
||||||
}
|
}
|
||||||
if len(cmdArgs) != 0 {
|
|
||||||
// Use of '--' argument no longer necessary as of Wasmtime v14:
|
// Use of '--' argument no longer necessary as of Wasmtime v14:
|
||||||
// https://github.com/bytecodealliance/wasmtime/pull/6946
|
// https://github.com/bytecodealliance/wasmtime/pull/6946
|
||||||
// args = append(args, "--")
|
// args = append(args, "--")
|
||||||
args = append(args, cmdArgs...)
|
args = append(args, cmdArgs...)
|
||||||
}
|
|
||||||
|
|
||||||
// Set this for nicer backtraces during tests, but don't override the user.
|
// Set this for nicer backtraces during tests, but don't override the user.
|
||||||
if _, ok := os.LookupEnv("WASMTIME_BACKTRACE_DETAILS"); !ok {
|
if _, ok := os.LookupEnv("WASMTIME_BACKTRACE_DETAILS"); !ok {
|
||||||
@@ -903,21 +862,36 @@ func buildAndRun(pkgName string, config *compileopts.Config, stdout io.Writer, c
|
|||||||
|
|
||||||
name = emulator[0]
|
name = emulator[0]
|
||||||
|
|
||||||
|
// wasmtime is a WebAssembly runtime CLI with WASI enabled by default.
|
||||||
|
// By default, only stdio is allowed. For example, while STDOUT routes
|
||||||
|
// to the host, other files don't. It also does not inherit environment
|
||||||
|
// variables from the host. Some tests read testdata files, often from
|
||||||
|
// outside the package directory. Other tests require temporary
|
||||||
|
// writeable directories. We allow this by adding wasmtime flags below.
|
||||||
if name == "wasmtime" {
|
if name == "wasmtime" {
|
||||||
// Wasmtime needs some special flags to pass environment variables
|
// Below adds additional wasmtime flags in case a test reads files
|
||||||
// and allow reading from the current directory.
|
// outside its directory, like "../testdata/e.txt". This allows any
|
||||||
switch config.Options.Target {
|
// relative directory up to the module root, even if the test never
|
||||||
case "wasip1":
|
// reads any files.
|
||||||
emuArgs = append(emuArgs, "--dir=.")
|
if config.TestConfig.CompileTestBinary {
|
||||||
case "wasip2":
|
// Add relative dirs (../, ../..) up to module root (for wasip1)
|
||||||
dir := result.MainDir
|
dirs := dirsToModuleRootRel(result.MainDir, result.ModuleRoot)
|
||||||
if isSingleFile {
|
|
||||||
cwd, _ := os.Getwd()
|
// Add absolute dirs up to module root (for wasip2)
|
||||||
dir = cwd
|
dirs = append(dirs, dirsToModuleRootAbs(result.MainDir, result.ModuleRoot)...)
|
||||||
|
|
||||||
|
for _, d := range dirs {
|
||||||
|
emuArgs = append(emuArgs, "--dir="+d)
|
||||||
}
|
}
|
||||||
emuArgs = append(emuArgs, "--dir="+dir)
|
|
||||||
emuArgs = append(emuArgs, "--env=PWD="+dir)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dir := result.MainDir
|
||||||
|
if isSingleFile {
|
||||||
|
dir, _ = os.Getwd()
|
||||||
|
}
|
||||||
|
emuArgs = append(emuArgs, "--dir=.")
|
||||||
|
emuArgs = append(emuArgs, "--dir="+dir)
|
||||||
|
emuArgs = append(emuArgs, "--env=PWD="+dir)
|
||||||
}
|
}
|
||||||
|
|
||||||
emuArgs = append(emuArgs, emulator[1:]...)
|
emuArgs = append(emuArgs, emulator[1:]...)
|
||||||
|
|||||||
Reference in New Issue
Block a user