You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

78 lines
2.0KB

  1. import os
  2. import sys
  3. RACK_SDK = os.path.abspath("Rack-SDK")
  4. STAGE_DIR = "stage"
  5. PACKAGE_DIR = "../packages"
  6. def system(cmd):
  7. err = os.system(cmd)
  8. if err:
  9. raise Exception(f"Command failed with error {err}: {cmd}")
  10. def stage_package(plugin_dir):
  11. system(f'mkdir -p {STAGE_DIR}')
  12. system(f'mv {plugin_dir}/dist/*.zip {STAGE_DIR}/')
  13. def move_stage():
  14. system(f'mv -vi {STAGE_DIR}/* {PACKAGE_DIR}/')
  15. def delete_stage():
  16. system(f'rm -rf {STAGE_DIR}')
  17. def build_mac(plugin_dir):
  18. env = f'CC=x86_64-apple-darwin15-clang CXX=x86_64-apple-darwin15-clang++-libc++ STRIP=x86_64-apple-darwin15-strip RACK_DIR={RACK_SDK}'
  19. make = f'{env} make -j$(nproc) -C {plugin_dir}'
  20. system(f'{make} clean')
  21. system(f'{make} dep')
  22. system(f'{make} dist')
  23. stage_package(plugin_dir)
  24. system(f'{make} clean')
  25. def build_win(plugin_dir):
  26. env = f'CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ STRIP=x86_64-w64-mingw32-strip RACK_DIR={RACK_SDK}'
  27. make = f'{env} make -j$(nproc) -C {plugin_dir}'
  28. system(f'{make} clean')
  29. system(f'{make} dep')
  30. system(f'{make} dist')
  31. stage_package(plugin_dir)
  32. system(f'{make} clean')
  33. def build_lin(plugin_dir):
  34. make = f'make -j$(nproc)'
  35. plugin_abs = os.path.abspath(plugin_dir)
  36. # TODO Make this Docker image publicly available
  37. # It's essentially just Ubuntu 16.04 with plugin build dependencies installed, the workdir, and a user account set up so it matches my own machine's UID to solve file permissions issues.
  38. docker = f'docker run --rm -v {RACK_SDK}:/Rack-SDK -v {plugin_abs}:/workdir -w /workdir -u vortico -e RACK_DIR=/Rack-SDK rackplugin:1'
  39. system(f'{docker} {make} clean')
  40. system(f'{docker} {make} dep')
  41. system(f'{docker} {make} dist')
  42. stage_package(plugin_dir)
  43. system(f'{docker} {make} clean')
  44. def build(plugin_dir):
  45. try:
  46. build_lin(plugin_dir)
  47. build_win(plugin_dir)
  48. build_mac(plugin_dir)
  49. move_stage()
  50. finally:
  51. delete_stage()
  52. if __name__ == "__main__":
  53. plugin_dir = sys.argv[1]
  54. if not plugin_dir:
  55. raise "No plugin_dir given"
  56. build(plugin_dir)