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.

84 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. print(cmd)
  8. err = os.system(cmd)
  9. if err:
  10. raise Exception(f"Command failed with error {err}: {cmd}")
  11. def stage_package(plugin_dir):
  12. system(f'mkdir -p {STAGE_DIR}')
  13. system(f'mv {plugin_dir}/dist/*.zip {STAGE_DIR}/')
  14. def move_stage():
  15. system(f'mv -vi {STAGE_DIR}/* {PACKAGE_DIR}/')
  16. def delete_stage():
  17. system(f'rm -rf {STAGE_DIR}')
  18. def build_mac(plugin_dir):
  19. print(f"Building {plugin_dir} for mac")
  20. 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}'
  21. make = f'{env} make -j$(nproc) -C {plugin_dir}'
  22. system(f'{make} clean')
  23. system(f'{make} cleandep')
  24. system(f'{make} dep')
  25. system(f'{make} dist')
  26. stage_package(plugin_dir)
  27. system(f'{make} clean')
  28. print(f"Built {plugin_dir} for mac")
  29. def build_win(plugin_dir):
  30. print(f"Building {plugin_dir} for win")
  31. env = f'CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ STRIP=x86_64-w64-mingw32-strip RACK_DIR={RACK_SDK}'
  32. make = f'{env} make -j$(nproc) -C {plugin_dir}'
  33. system(f'{make} clean')
  34. system(f'{make} cleandep')
  35. system(f'{make} dep')
  36. system(f'{make} dist')
  37. stage_package(plugin_dir)
  38. system(f'{make} clean')
  39. print(f"Built {plugin_dir} for win")
  40. def build_lin(plugin_dir):
  41. print(f"Building {plugin_dir} for lin")
  42. make = f'make -j$(nproc)'
  43. plugin_abs = os.path.abspath(plugin_dir)
  44. # TODO Make this Docker image publicly available
  45. # 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.
  46. 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'
  47. system(f'{docker} {make} clean')
  48. system(f'{docker} {make} cleandep')
  49. system(f'{docker} {make} dep')
  50. system(f'{docker} {make} dist')
  51. stage_package(plugin_dir)
  52. system(f'{docker} {make} clean')
  53. print(f"Built {plugin_dir} for lin")
  54. def build(plugin_dir):
  55. build_lin(plugin_dir)
  56. build_mac(plugin_dir)
  57. build_win(plugin_dir)
  58. if __name__ == "__main__":
  59. plugin_dir = sys.argv[1]
  60. if not plugin_dir:
  61. raise "No plugin_dir given"
  62. build(plugin_dir)