build.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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. linux_common = "-Wfatal-errors --std=c++17 -O2 -Wall -Wno-sign-compare -Wno-unused-variable -fno-rtti -stdlib=libc++"
  9. linux_cmd = "clang++ -o pocketpy src/main.cpp " + linux_common
  10. linux_lib_cmd = "clang++ -fPIC -shared -o pocketpy.so src/tmp.cpp " + linux_common
  11. class LibBuildEnv:
  12. def __enter__(self):
  13. shutil.copy("c_bindings/pocketpy_c.h", "src/")
  14. shutil.copy("c_bindings/pocketpy_c.cpp", "src/tmp.cpp")
  15. def __exit__(self, *args):
  16. if os.path.exists("src/pocketpy_c.h"):
  17. os.remove("src/pocketpy_c.h")
  18. if os.path.exists("src/tmp.cpp"):
  19. os.remove("src/tmp.cpp")
  20. windows_common = "CL -std:c++17 /utf-8 -GR- -EHsc -O2"
  21. windows_cmd = windows_common + " -Fe:pocketpy src/main.cpp"
  22. windows_lib_cmd = windows_common + " -LD -Fe:pocketpy src/tmp.cpp"
  23. if sys.argv.__len__() == 1:
  24. os.system(linux_cmd)
  25. DONE()
  26. if "windows" in sys.argv:
  27. if "-lib" in sys.argv:
  28. with LibBuildEnv():
  29. os.system(windows_lib_cmd)
  30. else:
  31. os.system(windows_cmd)
  32. DONE()
  33. if "linux" in sys.argv:
  34. if "-lib" in sys.argv:
  35. with LibBuildEnv():
  36. os.system(linux_lib_cmd)
  37. else:
  38. os.system(linux_cmd)
  39. DONE()
  40. if "web" in sys.argv:
  41. os.system(r'''
  42. rm -rf web/lib/
  43. mkdir -p web/lib/
  44. 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
  45. ''')
  46. DONE()
  47. print("invalid usage!!")
  48. exit(2)