def __init__(self): self.config = {'exe': 'default', 'verbose': 0} self.labels = {'exe': 'Executable', 'verbose': 'Verbose'} self.settings = {} self.packages = {} self._profile_path = util.safe_join(util.get_home_dir(), 'profile.json') self.load()
def _run(self, command): result = [] system_dir = join(util.get_home_dir(), 'packages', 'system') if isdir(system_dir): result = util.exec_command(join(system_dir, command + self.ext), stdout=util.AsyncPipe(self._on_run_out), stderr=util.AsyncPipe(self._on_run_out)) else: click.secho('Error: system tools are not installed', fg='red') click.secho('Please run:\n' ' apio install system', fg='yellow') return 1 return result
def run(self, command, variables=[], board=None): """Executes scons for building""" packages_dir = os.path.join(util.get_home_dir(), 'packages') icestorm_dir = os.path.join(packages_dir, 'toolchain-icestorm', 'bin') iverilog_dir = os.path.join(packages_dir, 'toolchain-iverilog', 'bin') scons_dir = os.path.join(packages_dir, 'tool-scons', 'script') sconstruct_name = 'SConstruct' # Give the priority to the packages installed by apio os.environ['PATH'] = os.pathsep.join( [iverilog_dir, icestorm_dir, os.environ['PATH']]) # Add environment variables os.environ['IVL'] = os.path.join(packages_dir, 'toolchain-iverilog', 'lib', 'ivl') os.environ['VLIB'] = os.path.join(packages_dir, 'toolchain-iverilog', 'vlib', 'system.v') # -- Check for the scons if not isdir(scons_dir): click.secho('Error: scons toolchain is not installed', fg='red') click.secho('Please run:\n' ' apio install scons', fg='yellow') # -- Check for the icestorm tools if not isdir(icestorm_dir): click.secho('Error: icestorm toolchain is not installed', fg='red') click.secho('Please run:\n' ' apio install icestorm', fg='yellow') # -- Check for the iverilog tools if not isdir(iverilog_dir): click.secho('Error: iverilog toolchain is not installed', fg='red') click.secho('Please run:\n' ' apio install iverilog', fg='yellow') # -- Check for the SConstruct file if not isfile(join(util.get_project_dir(), sconstruct_name)): click.secho('Using default SConstruct file') variables += [ '-f', join(dirname(__file__), '..', 'resources', sconstruct_name) ] # -- Execute scons if isdir(scons_dir) and isdir(icestorm_dir) and isdir(iverilog_dir): terminal_width, _ = click.get_terminal_size() start_time = time.time() if command == 'build' or \ command == 'upload' or \ command == 'time': if board: processing_board = board else: processing_board = 'custom board' click.echo( "[%s] Processing %s" % (datetime.datetime.now().strftime("%c"), click.style(processing_board, fg="cyan", bold=True))) click.secho("-" * terminal_width, bold=True) click.secho("Executing: scons -Q {0} {1}".format( command, ' '.join(variables))) result = util.exec_command([ os.path.normpath(sys.executable), os.path.join(scons_dir, 'scons'), '-Q', command ] + variables, stdout=util.AsyncPipe(self._on_run_out), stderr=util.AsyncPipe(self._on_run_err)) # -- Print result exit_code = result['returncode'] is_error = exit_code != 0 summary_text = " Took %.2f seconds " % (time.time() - start_time) half_line = "=" * int( ((terminal_width - len(summary_text) - 10) / 2)) click.echo( "%s [%s]%s%s" % (half_line, (click.style(" ERROR ", fg="red", bold=True) if is_error else click.style("SUCCESS", fg="green", bold=True)), summary_text, half_line), err=is_error) if False: if is_error: print(""" ______ _ | ____| | | | |__ _ __ _ __ ___ _ __| | | __| | '__| '__/ _ \| '__| | | |____| | | | | (_) | | |_| |______|_| |_| \___/|_| (_) """) else: print(""" _____ _ / ____| | | | (___ _ _ ___ ___ ___ ___ ___| | \___ \| | | |/ __/ __/ _ \/ __/ __| | ____) | |_| | (_| (_| __/\__ \__ \_| |_____/ \__,_|\___\___\___||___/___(_) """) return exit_code else: return 1
def __init__(self, package, platform='', force=False, checkversion=True): # Parse version if '@' in package: split = package.split('@') self.package = split[0] self.version = split[1] else: self.package = package self.version = None self.force_install = force self.packages_dir = '' self.resources = Resources(platform) if self.package in self.resources.packages: self.profile = Profile() dirname = 'packages' self.packages_dir = util.safe_join(util.get_home_dir(), dirname) # Get data data = self.resources.packages.get(self.package) distribution = self.resources.distribution self.specversion = distribution.get('packages').get(self.package) self.package_name = data.get('release').get('package_name') self.extension = data.get('release').get('extension') platform = platform or self._get_platform() if checkversion: # Check version valid_version = self._get_valid_version( data.get('repository').get('name'), data.get('repository').get('organization'), data.get('release').get('tag_name'), self.version, self.specversion, force ) # Valid version if not valid_version: # Error click.secho( 'Error: No version {} found'.format(self.version), fg='red') exit(1) self.version = valid_version # e.g., [linux_x86_64, linux] platform_os = platform.split('_')[0] self.download_urls = [ { 'url': self.get_download_url(data, platform), 'platform': platform }, { 'url': self.get_download_url(data, platform_os), 'platform': platform_os } ] if self.packages_dir == '': click.secho( 'Error: No such package \'{0}\''.format(self.package), fg='red') exit(1)
def __init__(self, package, platform='', force=False, checkversion=True): # Parse version if '@' in package: split = package.split('@') self.package = split[0] self.version = split[1] else: self.package = package self.version = None self.force_install = force self.packages_dir = '' self.resources = Resources(platform) if self.package in self.resources.packages: self.profile = Profile() dirname = 'packages' self.packages_dir = util.safe_join(util.get_home_dir(), dirname) # Get data data = self.resources.packages.get(self.package) distribution = self.resources.distribution self.spec_version = distribution.get('packages').get(self.package) self.package_name = data.get('release').get('package_name') self.extension = data.get('release').get('extension') platform = platform or self._get_platform() if checkversion: # Check version valid_version = self._get_valid_version( data.get('repository').get('name'), data.get('repository').get('organization'), data.get('release').get('tag_name') ) # Valid version if not valid_version: # Error click.secho('Error: no valid version found', fg='red') exit(1) self.version = valid_version # e.g., [linux_x86_64, linux] platform_os = platform.split('_')[0] self.download_urls = [ { 'url': self.get_download_url(data, platform), 'platform': platform }, { 'url': self.get_download_url(data, platform_os), 'platform': platform_os } ] if self.packages_dir == '': click.secho( 'Error: no such package \'{}\''.format(self.package), fg='red') exit(1)
def __init__(self, package, platform='', force=False): # Parse version if '@' in package: split = package.split('@') self.package = split[0] self.version = split[1] else: self.package = package self.version = None self.forced_install = force self.packages_dir = '' self.resources = Resources(platform) if self.package in self.resources.packages: self.profile = Profile() dirname = 'packages' self.packages_dir = join(get_home_dir(), dirname) # Check version data = self.resources.packages[self.package] distribution = self.resources.distribution self.specversion = distribution['packages'][self.package] version = self._get_valid_version( data['repository']['name'], data['repository']['organization'], data['release']['tag_name'], self.version, self.specversion) # Valid version added with @ if version and self.version: self.forced_install = True self.version = version if version else '' # Valid version if version: self.platform = platform or self._get_platform() release = data['release'] self.compressed_name = release['compressed_name'].replace( '%V', self.version).replace('%P', self.platform) self.uncompressed_name = release['uncompressed_name'].replace( '%V', self.version).replace('%P', self.platform) self.package_name = data['release']['package_name'] if isinstance(data['release']['extension'], dict): for os in ['linux', 'darwin', 'windows']: if os in self.platform: self.extension = data['release']['extension'][os] else: self.extension = data['release']['extension'] self.tarball = self._get_tarball_name(self.compressed_name, self.extension) self.download_url = self._get_download_url( data['repository']['name'], data['repository']['organization'], data['release']['tag_name'].replace('%V', self.version), self.tarball)
def __init__(self, package, platform='', force=False): # Parse version if '@' in package: split = package.split('@') self.package = split[0] self.version = split[1] else: self.package = package self.version = None self.forced_install = force self.packages_dir = '' self.resources = Resources(platform) if self.package in self.resources.packages: self.profile = Profile() dirname = 'packages' self.packages_dir = join(get_home_dir(), dirname) # Check version data = self.resources.packages[self.package] distribution = self.resources.distribution self.specversion = distribution['packages'][self.package] version = self._get_valid_version( data['repository']['name'], data['repository']['organization'], data['release']['tag_name'], self.version, self.specversion ) # Valid version added with @ if version and self.version: self.forced_install = True self.version = version if version else '' # Valid version if version: self.platform = platform or self._get_platform() release = data['release'] self.compressed_name = release['compressed_name'].replace( '%V', self.version).replace('%P', self.platform) self.uncompressed_name = release['uncompressed_name'].replace( '%V', self.version).replace('%P', self.platform) self.package_name = data['release']['package_name'] if isinstance(data['release']['extension'], dict): for os in ['linux', 'darwin', 'windows']: if os in self.platform: self.extension = data['release']['extension'][os] else: self.extension = data['release']['extension'] self.tarball = self._get_tarball_name( self.compressed_name, self.extension ) self.download_url = self._get_download_url( data['repository']['name'], data['repository']['organization'], data['release']['tag_name'].replace('%V', self.version), self.tarball )
def __init__(self, package): # Parse version if '@' in package: split = package.split('@') self.package = split[0] self.version = split[1] else: self.package = package self.version = None self.forced_install = False self.valid_version = True self.resources = Resources() self.profile = Profile() if self.package in self.resources.packages: data = self.resources.packages[self.package] if self.version: # Validate version valid = self._validate_version( data['repository']['name'], data['repository']['organization'], data['release']['tag_name'], self.version ) if valid: self.forced_install = True else: self.valid_version = False else: # Get latest version self.version = self._get_latest_version( data['repository']['name'], data['repository']['organization'], data['release']['tag_name'] ) self.arch = self._get_architecture() release = data['release'] self.compressed_name = release['compressed_name'].replace( '%V', self.version).replace('%A', self.arch) self.uncompressed_name = release['uncompressed_name'].replace( '%V', self.version).replace('%A', self.arch) self.package_name = data['release']['package_name'] if isinstance(data['release']['extension'], dict): for os in ['linux', 'darwin', 'windows']: if os in self.arch: self.extension = data['release']['extension'][os] else: self.extension = data['release']['extension'] self.tarball = self._get_tarball_name( self.compressed_name, self.extension ) self.download_url = self._get_download_url( data['repository']['name'], data['repository']['organization'], data['release']['tag_name'].replace('%V', self.version), self.tarball ) if 'main_dir' in data.keys(): self.packages_dir = join(expanduser('~'), data['main_dir']) else: self.packages_dir = join(util.get_home_dir(), 'packages')
def __init__(self): self.config = {'exe': 'default', 'verbose': 0} self.labels = {'exe': 'Executable', 'verbose': 'Verbose'} self.packages = {} self._profile_path = join(get_home_dir(), 'profile.json') self.load()
def __init__(self): self.examples_dir = join(util.get_home_dir(), 'packages', 'examples')