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.

87 lines
2.3KB

  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. print(f"Building {plugin_dir} for mac")
  19. 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}'
  20. make = f'{env} make -j$(nproc) -C {plugin_dir}'
  21. system(f'{make} clean')
  22. system(f'{make} cleandep')
  23. system(f'{make} dep')
  24. system(f'{make} dist')
  25. stage_package(plugin_dir)
  26. system(f'{make} clean')
  27. print(f"Built {plugin_dir} for mac")
  28. def build_win(plugin_dir):
  29. print(f"Building {plugin_dir} for win")
  30. env = f'CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ STRIP=x86_64-w64-mingw32-strip RACK_DIR={RACK_SDK}'
  31. make = f'{env} make -j$(nproc) -C {plugin_dir}'
  32. system(f'{make} clean')
  33. system(f'{make} cleandep')
  34. system(f'{make} dep')
  35. system(f'{make} dist')
  36. stage_package(plugin_dir)
  37. system(f'{make} clean')
  38. print(f"Built {plugin_dir} for win")
  39. def build_lin(plugin_dir):
  40. print(f"Building {plugin_dir} for lin")
  41. make = f'make -j$(nproc)'
  42. plugin_abs = os.path.abspath(plugin_dir)
  43. # TODO Make this Docker image publicly available
  44. # 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.
  45. 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'
  46. system(f'{docker} {make} clean')
  47. system(f'{docker} {make} cleandep')
  48. system(f'{docker} {make} dep')
  49. system(f'{docker} {make} dist')
  50. stage_package(plugin_dir)
  51. system(f'{docker} {make} clean')
  52. print(f"Built {plugin_dir} for lin")
  53. def build(plugin_dir):
  54. try:
  55. build_lin(plugin_dir)
  56. build_mac(plugin_dir)
  57. build_win(plugin_dir)
  58. move_stage()
  59. finally:
  60. delete_stage()
  61. if __name__ == "__main__":
  62. plugin_dir = sys.argv[1]
  63. if not plugin_dir:
  64. raise "No plugin_dir given"
  65. build(plugin_dir)