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.

79 lines
2.2KB

  1. import os
  2. import sys
  3. RACK_SDK = os.path.abspath("Rack-SDK")
  4. STAGE_DIR = "stage"
  5. def system(cmd):
  6. print(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 delete_stage():
  14. system(f'rm -rf {STAGE_DIR}')
  15. def build_mac(plugin_dir):
  16. print(f"Building {plugin_dir} for mac")
  17. env = f'CC=x86_64-apple-darwin17-clang CXX=x86_64-apple-darwin17-clang++-libc++ STRIP=x86_64-apple-darwin17-strip RACK_DIR={RACK_SDK}'
  18. make = f'{env} make -j$(nproc) -C {plugin_dir}'
  19. system(f'{make} clean')
  20. system(f'{make} cleandep')
  21. system(f'{make} dep')
  22. system(f'{make} dist')
  23. stage_package(plugin_dir)
  24. system(f'{make} clean')
  25. print(f"Built {plugin_dir} for mac")
  26. def build_win(plugin_dir):
  27. print(f"Building {plugin_dir} for win")
  28. env = f'CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ STRIP=x86_64-w64-mingw32-strip RACK_DIR={RACK_SDK}'
  29. make = f'{env} make -j$(nproc) -C {plugin_dir}'
  30. system(f'{make} clean')
  31. system(f'{make} cleandep')
  32. system(f'{make} dep')
  33. system(f'{make} dist')
  34. stage_package(plugin_dir)
  35. system(f'{make} clean')
  36. print(f"Built {plugin_dir} for win")
  37. def build_lin(plugin_dir):
  38. print(f"Building {plugin_dir} for lin")
  39. make = f'make -j$(nproc)'
  40. plugin_abs = os.path.abspath(plugin_dir)
  41. # TODO Make this Docker image publicly available
  42. # 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.
  43. 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'
  44. system(f'{docker} {make} clean')
  45. system(f'{docker} {make} cleandep')
  46. system(f'{docker} {make} dep')
  47. system(f'{docker} {make} dist')
  48. stage_package(plugin_dir)
  49. system(f'{docker} {make} clean')
  50. print(f"Built {plugin_dir} for lin")
  51. def build(plugin_dir):
  52. build_lin(plugin_dir)
  53. build_mac(plugin_dir)
  54. build_win(plugin_dir)
  55. if __name__ == "__main__":
  56. plugin_dir = sys.argv[1]
  57. if not plugin_dir:
  58. raise "No plugin_dir given"
  59. build(plugin_dir)