#!/usr/bin/env python3

# Copyright 2022 Google LLC
#
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import os
import subprocess
import sys
import sysconfig

EMSDK_ROOT = os.path.join('third_party', 'externals', 'emsdk')

EMSDK_PATH = os.path.join(EMSDK_ROOT, 'emsdk.py')

EMSDK_VERSION = '3.1.15'

def main():
    if sysconfig.get_platform() in ['linux-aarch64', 'linux-arm64']:
        # This platform cannot install emsdk at the provided version. See
        # https://github.com/emscripten-core/emsdk/blob/main/emscripten-releases-tags.json#L5
        # for the latest version
        return
    try:
        subprocess.check_call([sys.executable, EMSDK_PATH, 'install', EMSDK_VERSION])
    except subprocess.CalledProcessError:
        print ('Failed to install emsdk')
        return 1
    try:
        subprocess.check_call([sys.executable, EMSDK_PATH, 'activate', EMSDK_VERSION])
    except subprocess.CalledProcessError:
        print ('Failed to activate emsdk')
        return 1


if __name__ == '__main__':
  sys.exit(main())
