67 lines
3.3 KiB
JavaScript
67 lines
3.3 KiB
JavaScript
// ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
|
// ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃
|
|
// ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃
|
|
// ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃
|
|
// ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃
|
|
// ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
|
|
// ┃ Copyright (c) 2017, the Perspective Authors. ┃
|
|
// ┃ ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┃
|
|
// ┃ This file is part of the Perspective library, distributed under the terms ┃
|
|
// ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃
|
|
// ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
|
|
|
|
import path from "path";
|
|
import os from "os";
|
|
import fs from "fs";
|
|
import * as dotenv from "dotenv";
|
|
import { getWorkspaceRoot, getWorkspacePackageJson } from "./workspace.mjs";
|
|
|
|
import "zx/globals";
|
|
|
|
const pkg = getWorkspacePackageJson();
|
|
|
|
const emscripten = pkg.emscripten;
|
|
|
|
dotenv.config({ path: "./.perspectiverc", quiet: true });
|
|
|
|
function base() {
|
|
return path.resolve(getWorkspaceRoot(), ".emsdk").replace(/\\/g, "/");
|
|
}
|
|
|
|
function emsdk_checkout() {
|
|
$.sync`git clone https://github.com/emscripten-core/emsdk.git ${base()}`;
|
|
}
|
|
|
|
function emsdk(...args) {
|
|
const basedir = base();
|
|
const suffix = os.type() == "Windows_NT" ? ".bat" : "";
|
|
const emsdkBin = path.join(basedir, "emsdk" + suffix).replace(/\\/g, "/");
|
|
$.sync`${emsdkBin} ${args}`;
|
|
}
|
|
|
|
function toolchain_install() {
|
|
console.log(`-- Installing Emscripten ${emscripten}`);
|
|
$.sync({ cwd: ".emsdk" })`git pull`;
|
|
emsdk("install", emscripten);
|
|
emsdk("activate", emscripten);
|
|
console.log(`-- Emscripten ${emscripten} installed`);
|
|
}
|
|
|
|
function repo_check() {
|
|
return fs.existsSync(path.join(base(), "emsdk_env.sh"));
|
|
}
|
|
|
|
if (!process.env.PSP_SKIP_EMSDK_INSTALL) {
|
|
// if a stale toolchain is still activated in the shell, these vars break
|
|
// emsdk install in a confusing way. ensure they are unset
|
|
for (let ev of ["EMSDK", "EMSDK_NODE", "EMSDK_PYTHON", "SSL_CERT_FILE"]) {
|
|
delete process.env[ev];
|
|
}
|
|
|
|
if (!repo_check()) {
|
|
emsdk_checkout();
|
|
}
|
|
|
|
toolchain_install();
|
|
}
|