mirror of
https://github.com/zekexiao/pocketlang.git
synced 2025-02-06 04:37:47 +08:00
adcd7dce45
Stack miss calculation bug fix & minor changes
49 lines
1.5 KiB
Python
49 lines
1.5 KiB
Python
import os, shutil, platform
|
|
from os.path import join, isdir, abspath, dirname, exists
|
|
from shutil import which
|
|
|
|
## The absolute path of this file's directory, when run as a script.
|
|
## This file is not intended to be included in other files at the moment.
|
|
THIS_PATH = abspath(dirname(__file__))
|
|
|
|
POCKET_SOURCE_DIR = join(THIS_PATH, "../../../pocketlang/src/")
|
|
JS_API_PATH = join(THIS_PATH, "io_api.js")
|
|
MAIN_C = join(THIS_PATH, "main.c")
|
|
TARGET_DIR = join(THIS_PATH, "../static/wasm/")
|
|
TARGET_NAME = "pocketlang.html"
|
|
|
|
def main():
|
|
|
|
## Check the compiler is available.
|
|
if not which("emcc"):
|
|
msg = "emcc Not found."
|
|
if platform.system().lower() == "windows":
|
|
msg += " (Did you forget to run 'call emsdk_env.bat')"
|
|
print(msg)
|
|
exit(1)
|
|
|
|
## Make the target dir (which is gitignored and couldn't be exists).
|
|
if not exists(TARGET_DIR):
|
|
os.mkdir(TARGET_DIR)
|
|
|
|
sources = ' '.join(collect_source_files())
|
|
include = '-I' + join(POCKET_SOURCE_DIR, 'include/')
|
|
output = join(TARGET_DIR, TARGET_NAME)
|
|
exports = "\"EXPORTED_RUNTIME_METHODS=['ccall','cwrap']\""
|
|
js_api = JS_API_PATH
|
|
|
|
cmd = f"emcc {include} {MAIN_C} {sources} -o {output} " +\
|
|
f"-s {exports} --js-library {js_api}"
|
|
print(cmd)
|
|
os.system(cmd)
|
|
|
|
def collect_source_files():
|
|
sources = []
|
|
for file in os.listdir(POCKET_SOURCE_DIR):
|
|
if isdir(file): continue
|
|
if file.endswith('.c'): sources.append(join(POCKET_SOURCE_DIR, file))
|
|
return sources
|
|
|
|
if __name__ == "__main__":
|
|
main()
|