build.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import os
  2. import sys
  3. import shutil
  4. assert __name__ == "__main__"
  5. os.system("python3 preprocess.py")
  6. def DONE(code=0):
  7. exit(code)
  8. src_file_list = []
  9. for file in os.listdir("src"):
  10. if file.endswith(".cpp") and file != "main.cpp" and file != "tmp.cpp":
  11. src_file_list.append("src/" + file)
  12. main_src_arg = " ".join(src_file_list+["src/main.cpp"])
  13. tmp_src_arg = " ".join(src_file_list+["src/tmp.cpp"])
  14. linux_common = " -Wfatal-errors --std=c++17 -O2 -Wall -fno-rtti -stdlib=libc++ -Iinclude/ "
  15. linux_cmd = "clang++ -o pocketpy " + main_src_arg + linux_common
  16. linux_lib_cmd = "clang++ -fPIC -shared -o pocketpy.so " + tmp_src_arg + linux_common
  17. class LibBuildEnv:
  18. def __enter__(self):
  19. shutil.copy("c_bindings/pocketpy_c.h", "src/")
  20. shutil.copy("c_bindings/pocketpy_c.cpp", "src/tmp.cpp")
  21. def __exit__(self, *args):
  22. if os.path.exists("src/pocketpy_c.h"):
  23. os.remove("src/pocketpy_c.h")
  24. if os.path.exists("src/tmp.cpp"):
  25. os.remove("src/tmp.cpp")
  26. windows_common = "CL -std:c++17 /utf-8 -GR- -EHsc -O2"
  27. windows_cmd = windows_common + " -Fe:pocketpy src/main.cpp"
  28. windows_lib_cmd = windows_common + " -LD -Fe:pocketpy src/tmp.cpp"
  29. if sys.argv.__len__() == 1:
  30. os.system(linux_cmd)
  31. DONE()
  32. if "windows" in sys.argv:
  33. if "-lib" in sys.argv:
  34. with LibBuildEnv():
  35. os.system(windows_lib_cmd)
  36. else:
  37. os.system(windows_cmd)
  38. DONE()
  39. if "linux" in sys.argv:
  40. if "-lib" in sys.argv:
  41. with LibBuildEnv():
  42. os.system(linux_lib_cmd)
  43. else:
  44. os.system(linux_cmd)
  45. DONE()
  46. if "web" in sys.argv:
  47. os.system(r'''
  48. rm -rf web/lib/
  49. mkdir -p web/lib/
  50. em++ src/main.cpp -fno-rtti -fexceptions -O3 -sEXPORTED_FUNCTIONS=_pkpy_new_repl,_pkpy_repl_input,_pkpy_new_vm -sEXPORTED_RUNTIME_METHODS=ccall -o web/lib/pocketpy.js
  51. ''')
  52. DONE()
  53. print("invalid usage!!")
  54. exit(2)