add emscripten package

This commit is contained in:
Danny McClanahan
2022-04-23 03:22:41 -04:00
parent 4f2b9ca6dc
commit 29dbae0c20

View File

@@ -0,0 +1,74 @@
# Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import os
import re
import sys
from textwrap import dedent
from spack import *
class Emscripten(Package):
"""An LLVM-to-WebAssembly Compiler"""
homepage = "https://emscripten.org"
git = "https://github.com/emscripten-core/emscripten.git"
url = "https://github.com/emscripten-core/emscripten/archive/refs/tags/3.0.0.tar.gz"
version('latest', branch='main')
version('3.0.0', sha256='c5524755b785d8f4b83eb3214fdd3ac4b2e1b1a4644df4c63f06e5968f48f90e')
executables = ['emcc', 'em\+\+', 'emconfigure', 'emcmake']
# Need f-strings to run emcc, so 3.7+.
depends_on('python@3.7:')
depends_on('npm', type='build')
depends_on('llvm@14:+lld+clang targets=webassembly')
depends_on('binaryen')
depends_on('openjdk')
phases = ['install']
@classmethod
def determine_version(cls, exe_path):
try:
exe = Executable(exe_path)
output = exe('--version', output=str, error=str).splitlines()[0]
m = re.search(r' ([0-9]+\.[0-9]+\.[0-9]+(?:\-git)?)$', output)
if m is None:
return None
(v,) = m.groups()
return Version(v)
except spack.util.executable.ProcessError:
pass
return None
def install(self, spec, prefix):
npm = which('npm')
npm('install')
with open('.emscripten', 'w') as f:
f.write(dedent("""\
NODE_JS = '{node_js}'
LLVM_ROOT = '{llvm}'
BINARYEN_ROOT = '{binaryen}'
EMSCRIPTEN_ROOT = '{emscripten}'
JAVA = '{java}'
COMPILER_ENGINE = NODE_JS
JS_ENGINES = [NODE_JS]
""".format(
node_js=str(which('node')),
llvm=os.path.dirname(str(which('lld'))),
binaryen=str(self.spec['binaryen'].prefix),
emscripten=str(prefix),
java=str(which('java')),
)))
install_tree('.', str(prefix))
def setup_run_environment(self, env):
env.prepend_path('PATH', self.prefix)