dawn/node: Fetch and use node 16.13

Fixed: dawn:1329
Change-Id: Ifbc97961f1cafa804908d24d61da72ce0f59dae0
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/85061
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Ben Clayton <bclayton@google.com>
This commit is contained in:
Ben Clayton 2022-03-28 19:55:42 +00:00 committed by Dawn LUCI CQ
parent ac0f60c307
commit 6f8ff744da
3 changed files with 104 additions and 7 deletions

1
.gitignore vendored
View File

@ -19,6 +19,7 @@
/third_party/jsoncpp
/third_party/llvm-build
/third_party/markupsafe
/third_party/node
/third_party/node-addon-api
/third_party/node-api-headers
/third_party/swiftshader

61
DEPS
View File

@ -19,6 +19,11 @@ vars = {
'dawn_gn_version': 'git_revision:bd99dbf98cbdefe18a4128189665c5761263bcfb',
'dawn_go_version': 'version:1.16',
'node_darwin_arm64_sha': '31859fc1fa0994a95f44f09c367d6ff63607cfde',
'node_darwin_x64_sha': '16dfd094763b71988933a31735f9dea966f9abd6',
'node_linux_x64_sha': 'ab9544e24e752d3d17f335fb7b2055062e582d11',
'node_win_x64_sha': '5ef847033c517c499f56f9d136d159b663bab717',
# GN variable required by //testing that will be output in the gclient_args.gni
'generate_location_tags': False,
}
@ -158,7 +163,7 @@ deps = {
'condition': 'build_with_chromium',
},
# Dependencies required to build Dawn NodeJS bindings
# Dependencies required to build / run Dawn NodeJS bindings
'third_party/node-api-headers': {
'url': '{github_git}/nodejs/node-api-headers.git@d68505e4055ecb630e14c26c32e5c2c65e179bba',
'condition': 'dawn_node',
@ -320,6 +325,60 @@ hooks = [
'tools/cmake-win32/',
],
},
# Node binaries, when dawn_node is enabled
{
'name': 'node_linux64',
'pattern': '.',
'condition': 'dawn_node and host_os == "linux"',
'action': [ 'download_from_google_storage',
'--no_resume',
'--extract',
'--no_auth',
'--bucket', 'chromium-nodejs/16.13.0',
Var('node_linux_x64_sha'),
'-o', 'third_party/node/node-linux-x64.tar.gz',
],
},
{
'name': 'node_mac',
'pattern': '.',
'condition': 'dawn_node and host_os == "mac"',
'action': [ 'download_from_google_storage',
'--no_resume',
'--extract',
'--no_auth',
'--bucket', 'chromium-nodejs/16.13.0',
Var('node_darwin_x64_sha'),
'-o', 'third_party/node/node-darwin-x64.tar.gz',
],
},
{
'name': 'node_mac_arm64',
'pattern': '.',
'condition': 'dawn_node and host_os == "mac"',
'action': [ 'download_from_google_storage',
'--no_resume',
'--extract',
'--no_auth',
'--bucket', 'chromium-nodejs/16.13.0',
Var('node_darwin_arm64_sha'),
'-o', 'third_party/node/node-darwin-arm64.tar.gz',
],
},
{
'name': 'node_win',
'pattern': '.',
'condition': 'dawn_node and host_os == "win"',
'action': [ 'download_from_google_storage',
'--no_resume',
'--no_auth',
'--bucket', 'chromium-nodejs/16.13.0',
Var('node_win_x64_sha'),
'-o', 'third_party/node/node.exe',
],
},
]
recursedeps = [

View File

@ -135,7 +135,7 @@ func run() error {
var flags dawnNodeFlags
flag.StringVar(&dawnNode, "dawn-node", "", "path to dawn.node module")
flag.StringVar(&cts, "cts", "", "root directory of WebGPU CTS")
flag.StringVar(&node, "node", "", "path to node executable")
flag.StringVar(&node, "node", defaultNodePath(), "path to node executable")
flag.StringVar(&npx, "npx", "", "path to npx executable")
flag.StringVar(&resultsPath, "output", "", "path to write test results file")
flag.StringVar(&expectationsPath, "expect", "", "path to expectations file")
@ -188,11 +188,7 @@ func run() error {
// Find node
if node == "" {
var err error
node, err = exec.LookPath("node")
if err != nil {
return fmt.Errorf("add node to PATH or specify with --node")
}
return fmt.Errorf("cannot find path to node. Specify with --node")
}
// Find npx
if npx == "" {
@ -1073,3 +1069,44 @@ func saveExpectations(path string, ex testcaseStatuses) error {
return nil
}
// defaultNodePath looks for the node binary, first in dawn's third_party
// directory, falling back to PATH. This is used as the default for the --node
// command line flag.
func defaultNodePath() string {
if dir := thisDir(); dir != "" {
node := filepath.Join(dir, "../../../../../../../third_party/node")
if info, err := os.Stat(node); err == nil && info.IsDir() {
path := ""
switch fmt.Sprintf("%v/%v", runtime.GOOS, runtime.GOARCH) { // See `go tool dist list`
case "darwin/amd64":
path = filepath.Join(node, "node-darwin-x64/bin/node")
case "darwin/arm64":
path = filepath.Join(node, "node-darwin-arm64/bin/node")
case "linux/amd64":
path = filepath.Join(node, "node-linux-x64/bin/node")
case "windows/amd64":
path = filepath.Join(node, "node.exe")
}
if _, err := os.Stat(path); err == nil {
return path
}
}
}
if path, err := exec.LookPath("node"); err == nil {
return path
}
return ""
}
// thisDir returns the path to the directory that holds the .go file of the
// caller function
func thisDir() string {
_, file, _, ok := runtime.Caller(1)
if !ok {
return ""
}
return filepath.Dir(file)
}