build.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import os
  2. import sys
  3. assert __name__ == "__main__"
  4. os.system("python3 preprocess.py")
  5. def DONE(code=0):
  6. exit(code)
  7. linux_common = "-Wfatal-errors --std=c++17 -O2 -Wall -Wno-sign-compare -Wno-unused-variable -fno-rtti -stdlib=libc++"
  8. linux_cmd = "clang++ -o pocketpy src/main.cpp " + linux_common
  9. linux_lib_cmd = "clang++ -fPIC -shared -o pocketpy.so src/tmp.cpp " + linux_common
  10. class LibBuildEnv:
  11. def __enter__(self):
  12. with open("src/tmp.cpp", "w", encoding='utf-8') as f:
  13. f.write('#include "pocketpy.h"')
  14. def __exit__(self, *args):
  15. if os.path.exists("src/tmp.cpp"):
  16. os.remove("src/tmp.cpp")
  17. windows_common = "CL -std:c++17 /utf-8 -GR- -EHsc -O2"
  18. windows_cmd = windows_common + " -Fe:pocketpy src/main.cpp"
  19. windows_lib_cmd = windows_common + " -LD -Fe:pocketpy src/tmp.cpp"
  20. if sys.argv.__len__() == 1:
  21. os.system(linux_cmd)
  22. DONE()
  23. if "windows" in sys.argv:
  24. if "-lib" in sys.argv:
  25. with LibBuildEnv():
  26. os.system(windows_lib_cmd)
  27. else:
  28. os.system(windows_cmd)
  29. DONE()
  30. if "linux" in sys.argv:
  31. if "-lib" in sys.argv:
  32. with LibBuildEnv():
  33. os.system(linux_lib_cmd)
  34. else:
  35. os.system(linux_cmd)
  36. DONE()
  37. if "web" in sys.argv:
  38. os.system(r'''
  39. rm -rf web/lib/
  40. mkdir -p web/lib/
  41. em++ src/main.cpp -fno-rtti -fexceptions -O3 -sEXPORTED_FUNCTIONS=_pkpy_delete,_pkpy_new_repl,_pkpy_repl_input,_pkpy_new_vm,_pkpy_vm_add_module,_pkpy_vm_eval,_pkpy_vm_exec,_pkpy_vm_get_global -sEXPORTED_RUNTIME_METHODS=ccall -o web/lib/pocketpy.js
  42. ''')
  43. DONE()