# Copyright (C) 2021 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# This is the init script that is passed to `emcc --em-config=.emscripten`
# (Wasm toolchain). It sets vars to locate the various emsdk / llvm dirs.

import os
import sys
from platform import system

# We cannot use __file__ here.
this_file = os.getenv('EM_CONFIG')
if this_file is None:
  sys.stderr.write('Could not find EM_CONFIG in .emscripten\n')
  sys.exit(1)

root_dir = os.path.dirname(os.path.dirname(os.path.dirname(this_file)))
buildools_os = 'mac' if system().lower() == 'darwin' else 'linux64'
node_path = os.path.join(root_dir, 'buildtools', buildools_os, 'nodejs')
emsdk_path = os.path.join(root_dir, 'buildtools', buildools_os, 'emsdk')

# Exported vars.
NODE_JS = os.path.join(node_path, 'bin', 'node')
LLVM_ROOT = os.path.join(emsdk_path, 'bin')
BINARYEN_ROOT = emsdk_path
EMSCRIPTEN_ROOT = os.path.join(emsdk_path, 'emscripten')
COMPILER_ENGINE = NODE_JS
JS_ENGINES = [NODE_JS]
