|
- import os
- import sys
-
-
- RACK_SDK = os.path.abspath("Rack-SDK")
-
-
- def system(cmd):
- if os.system(cmd):
- raise Exception(f"Failed command: {cmd}")
-
-
- def stage_package(plugin_dir):
- system('mkdir -p stage')
- system(f'mv {plugin_dir}/dist/*.zip stage/')
-
-
- def delete_stage():
- system(f'rm -rf stage')
-
-
- def build_mac(plugin_dir):
- 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}'
- make = f'{env} make -j$(nproc) -C {plugin_dir}'
- system(f'{make} clean')
- system(f'{make} dist')
- stage_package(plugin_dir)
- system(f'{make} clean')
-
-
- def build_win(plugin_dir):
- env = f'CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ STRIP=x86_64-w64-mingw32-strip RACK_DIR={RACK_SDK}'
- make = f'{env} make -j$(nproc) -C {plugin_dir}'
- system(f'{make} clean')
- system(f'{make} dist')
- stage_package(plugin_dir)
- system(f'{make} clean')
-
-
- def build_lin(plugin_dir):
- env = f'-e RACK_DIR=/Rack-SDK'
- make = f'make -j$(nproc)'
- plugin_abs = os.path.abspath(plugin_dir)
- # TODO Make this Docker image publicly available
- # 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.
- docker = f'docker run --rm -v {RACK_SDK}:/Rack-SDK -v {plugin_abs}:/workdir -w /workdir -u vortico {env} a0b9c87ec456'
- system(f'{docker} {make} clean')
- system(f'{docker} {make} dist')
- stage_package(plugin_dir)
- system(f'{docker} {make} clean')
-
-
- def build(plugin_dir):
- try:
- build_lin(plugin_dir)
- build_win(plugin_dir)
- build_mac(plugin_dir)
- except Exception as e:
- delete_stage()
- print(e)
- return False
- return True
-
-
- if __name__ == "__main__":
- plugin_dir = sys.argv[1]
- if not plugin_dir:
- raise "No plugin_dir given"
- build(plugin_dir)
|