Changeset 4b7af07 in rtems-source-builder


Ignore:
Timestamp:
Sep 12, 2019, 10:09:13 AM (6 weeks ago)
Author:
Chris Johns <chrisj@…>
Branches:
master
Children:
bf7b4ad
Parents:
b3b5ca9
git-author:
Chris Johns <chrisj@…> (09/12/19 10:09:13)
git-committer:
Chris Johns <chrisj@…> (09/15/19 22:21:40)
Message:

5/llvm: Add LLVM as a package for RTEMS.

  • Add '%source download <source>' to only download the source and do not unpack and prep. This can used when a package internally needs another source package.
  • Install the staging root only if it is present. A package may internally build another package that is not staged as it is not suitable for installing.

Updates #3250
Updatew #3797

Files:
6 added
8 edited

Legend:

Unmodified
Added
Removed
  • rtems/config/rtems-base.bset

    rb3b5ca9 r4b7af07  
    2121# Project custom message
    2222#
    23 %define rtems_gcc_version %{rtems_version}
    24 %define gcc_version_message RTEMS %{rtems_gcc_version}, RSB %{_sbgit_id}, Newlib %{newlib_version}
     23%define rtems_version_message RTEMS %{rtems_version}, RSB %{_sbgit_id}
    2524
     25%define rtems_gcc_version   %{rtems_version}
     26%define gcc_version_message %{rtems_version_message}, Newlib %{newlib_version}
     27
     28%define rtems_llvm_version    %{rtems_version}
     29%define llvm_version_message  %{rtems_version_message}
     30%define clang_version_message %{rtems_version_message}
    2631#
    2732# Pick up the RTEMS URLs.
  • source-builder/defaults.mc

    rb3b5ca9 r4b7af07  
    158158__chmod:             exe,     required, '/bin/chmod'
    159159__chown:             exe,     required, '/usr/sbin/chown'
     160__cmake:             exe,     optional, '/usr/bin/cmake'
    160161__cp:                exe,     required, '/bin/cp'
    161162__cpp:               exe,     none,     '%{__cc} -E'
     
    206207
    207208# Prebuild set up script.
    208 ___build_pre:        none,    none,     '''# ___build_pre in as set up in defaults.py
     209___build_pre:        none,    none,     '''# ___build_pre as set up in defaults.py
    209210# Save the original path away.
    210211export SB_ORIG_PATH=${PATH}
  • source-builder/sb/build.py

    rb3b5ca9 r4b7af07  
    204204            not _canadian_cross
    205205
    206     def source(self, name, strip_components):
     206    def source(self, name, strip_components, download_only):
    207207        #
    208208        # Return the list of sources. Merge in any macro defined sources as
     
    239239                       os_ = o.split('=')
    240240                       if len(os_) != 2:
    241                            raise error.general('invalid --rsb-file option: %s' % (' '.join(args)))
     241                           raise error.general('invalid --rsb-file option: %s' % \
     242                                               (' '.join(args)))
    242243                       if os_[0] != '--rsb-file':
    243                            raise error.general('invalid --rsb-file option: %s' % (' '.join(args)))
     244                           raise error.general('invalid --rsb-file option: %s' % \
     245                                               (' '.join(args)))
    244246                       file_override = os_[1]
    245247                opts = [o for o in opts if not o.startswith('--rsb-')]
    246248            url = self.config.expand(' '.join(url))
    247             src = download.parse_url(url, '_sourcedir', self.config, self.opts, file_override)
     249            src = download.parse_url(url, '_sourcedir',
     250                                     self.config, self.opts, file_override)
    248251            download.get_file(src['url'], src['local'], self.opts, self.config)
    249             if strip_components > 0:
    250                 tar_extract = '%%{__tar_extract} --strip-components %d' % (strip_components)
    251             else:
    252                 tar_extract = '%{__tar_extract}'
    253             if 'symlink' in src:
    254                 sname = name.replace('-', '_')
    255                 src['script'] = '%%{__ln_s} %s ${source_dir_%s}' % (src['symlink'], sname)
    256             elif 'compressed' in src:
    257                 #
    258                 # Zip files unpack as well so do not use tar.
    259                 #
    260                 src['script'] = '%s %s' % (src['compressed'], src['local'])
    261                 if src['compressed-type'] != 'zip':
    262                     src['script'] += ' | %s -f -' % (tar_extract)
    263             else:
    264                 src['script'] = '%s -f %s' % (tar_extract, src['local'])
    265             srcs += [src]
     252            if not download_only:
     253                if strip_components > 0:
     254                    tar_extract = '%%{__tar_extract} --strip-components %d' % \
     255                        (strip_components)
     256                else:
     257                    tar_extract = '%{__tar_extract}'
     258                if 'symlink' in src:
     259                    sname = name.replace('-', '_')
     260                    src['script'] = '%%{__ln_s} %s ${source_dir_%s}' % \
     261                        (src['symlink'], sname)
     262                elif 'compressed' in src:
     263                    #
     264                    # Zip files unpack as well so do not use tar.
     265                    #
     266                    src['script'] = '%s %s' % (src['compressed'], src['local'])
     267                    if src['compressed-type'] != 'zip':
     268                        src['script'] += ' | %s -f -' % (tar_extract)
     269                else:
     270                    src['script'] = '%s -f %s' % (tar_extract, src['local'])
     271                srcs += [src]
    266272        return srcs
    267273
     
    271277        args = args[1:]
    272278        try:
    273             opts, args = getopt.getopt(args[1:], 'qDcn:bas:')
     279            opts, args = getopt.getopt(args[1:], 'qDcn:bas:g')
    274280        except getopt.GetoptError as ge:
    275281            raise error.general('source setup error: %s' % str(ge))
     
    283289        strip_components = 0
    284290        opt_name = None
     291        download_only = False
    285292        for o in opts:
    286293            if o[0] == '-q':
     
    298305            elif o[0] == '-s':
    299306                if not o[1].isdigit():
    300                     raise error.general('source setup error: invalid strip count: %s' % (o[1]))
     307                    raise error.general('source setup error: invalid strip count: %s' % \
     308                                        (o[1]))
    301309                strip_components = int(o[1])
     310            elif o[0] == '-g':
     311                download_only = True
    302312        name = None
    303         for source in self.source(setup_name, strip_components):
     313        for source in self.source(setup_name, strip_components, download_only):
    304314            if name is None:
    305315                if opt_name is None:
     
    307317                        opt_name = source['name']
    308318                    else:
    309                         raise error.general('setup source tag not found: %d' % (source_tag))
     319                        raise error.general('setup source tag not found: %d' % \
     320                                            (source_tag))
    310321                else:
    311322                    name = opt_name
    312             self.script_build.append(self.config.expand('cd %{_builddir}'))
    313             if not deleted_dir and delete_before_unpack:
    314                 self.script_build.append(self.config.expand('%{__rm} -rf ' + name))
    315                 deleted_dir = True
    316             if not created_dir and create_dir:
    317                 self.script_build.append(self.config.expand('%{__mkdir_p} ' + name))
    318                 created_dir = True
    319             if not changed_dir and (not unpack_before_chdir or create_dir):
    320                 self.script_build.append(self.config.expand('cd ' + name))
    321                 changed_dir = True
    322             self.script_build.append(self.config.expand(source['script']))
    323         if not changed_dir and (unpack_before_chdir and not create_dir):
     323            if not download_only:
     324                self.script_build.append(self.config.expand('cd %{_builddir}'))
     325                if not deleted_dir and delete_before_unpack and name is not None:
     326                    self.script_build.append(self.config.expand('%{__rm} -rf ' + name))
     327                    deleted_dir = True
     328                if not created_dir and create_dir and name is not None:
     329                    self.script_build.append(self.config.expand('%{__mkdir_p} ' + name))
     330                    created_dir = True
     331                if not changed_dir and (not unpack_before_chdir or create_dir) and \
     332                   name is not None:
     333                    self.script_build.append(self.config.expand('cd ' + name))
     334                    changed_dir = True
     335                self.script_build.append(self.config.expand(source['script']))
     336        if not changed_dir and (unpack_before_chdir and not create_dir) and \
     337           name is not None and not download_only:
    324338            self.script_build.append(self.config.expand('cd ' + name))
    325339            changed_dir = True
     
    346360                    url += [pp]
    347361            if len(url) == 0:
    348                 raise error.general('patch URL not found: %s' % (' '.join(args)))
     362                raise error.general('patch URL not found: %s' % (' '.join(opts)))
    349363            #
    350364            # Look for --rsb-file as an option we use as a local file name.
     
    358372                       os_ = o.split('=')
    359373                       if len(os_) != 2:
    360                            raise error.general('invalid --rsb-file option: %s' % (' '.join(args)))
     374                           raise error.general('invalid --rsb-file option: %s' % \
     375                                               (' '.join(opts)))
    361376                       if os_[0] != '--rsb-file':
    362                            raise error.general('invalid --rsb-file option: %s' % (' '.join(args)))
     377                           raise error.general('invalid --rsb-file option: %s' % \
     378                                               (' '.join(opts)))
    363379                       file_override = os_[1]
    364380                opts = [o for o in opts if not o.startswith('--rsb-')]
     
    372388            # Parse the URL first in the source builder's patch directory.
    373389            #
    374             patch = download.parse_url(url, '_patchdir', self.config, self.opts, file_override)
     390            patch = download.parse_url(url, '_patchdir', self.config,
     391                                       self.opts, file_override)
    375392            #
    376393            # Download the patch
  • source-builder/sb/darwin.py

    rb3b5ca9 r4b7af07  
    5353        '_prefix':          ('dir',     'optional', '%{_usr}'),
    5454        '__ldconfig':       ('exe',     'none',     ''),
     55        '__cmake':          ('exe',     'optional', 'cmake'),
    5556        '__cvs':            ('exe',     'optional', 'cvs'),
    5657        '__xz':             ('exe',     'required', 'xz'),
  • source-builder/sb/freebsd.py

    rb3b5ca9 r4b7af07  
    6464        '__bash':           ('exe',     'optional', '/usr/local/bin/bash'),
    6565        '__bison':          ('exe',     'required', '/usr/local/bin/bison'),
     66        '__cmake':          ('exe',     'optional', '/usr/local/bin/cmake'),
    6667        '__git':            ('exe',     'required', '/usr/local/bin/git'),
    6768        '__svn':            ('exe',     'optional', '/usr/local/bin/svn'),
  • source-builder/sb/options.py

    rb3b5ca9 r4b7af07  
    294294                              '--without-error-report',
    295295                              '--without-release-url']
     296            if a == '--dry-run':
     297                self.args += ['--without-error-report']
    296298            arg += 1
    297299
  • source-builder/sb/setbuilder.py

    rb3b5ca9 r4b7af07  
    406406            if self.installing():
    407407                self.macros['install_mode'] = 'staging'
     408
     409        #
     410        # Only the outter build set can have staging to install. Get the staging
     411        # root via the config because it could require a valid config.
     412        #
     413        have_staging = False
     414
     415        try:
     416            configs = self.load()
     417
     418            log.trace('_bset: %2d: %s: configs: %s'  % (nesting_count,
     419                                                        self.bset, ', '.join(configs)))
     420
     421            if nesting_count == 1 and len(configs) > 1:
    408422                #
    409                 # Prepend staging areas, bin directory tothe
    410                 # path. Lets the later package depend on the eailier
     423                # Prepend staging areas, bin directory to the
     424                # path. Lets the later package depend on the earlier
    411425                # ones.
    412426                #
     
    418432                else:
    419433                    self.macros['_pathprepend'] = ':'.join(pathprepend)
    420 
    421         #
    422         # Only the outter build set can have staging to install. Get the staging
    423         # root via the config because it could require a valid config.
    424         #
    425         have_staging = False
    426 
    427         try:
    428             configs = self.load()
    429 
    430             log.trace('_bset: %2d: %s: configs: %s'  % (nesting_count,
    431                                                         self.bset, ', '.join(configs)))
    432434
    433435            sizes_valid = False
     
    520522                      (nesting_count, self.install_mode(),
    521523                       ', '.join([b.name() for b in builds])))
    522             if deps is None and not have_errors:
     524            if deps is None and not self.opts.no_install() and not have_errors:
    523525                for b in builds:
    524526                    log.trace('_bset:   : %s: %r' % (self.install_mode(),
     
    587589            #
    588590            if have_staging and not self.opts.no_install() and not have_errors:
    589                 log.trace('_bset: %2d: install staging' % (nesting_count))
    590591                stagingroot = macro_expand(self.macros, '%{stagingroot}')
    591                 prefix = macro_expand(self.macros, '%{_prefix}')
    592                 self.install(self.install_mode(), self.bset, stagingroot, prefix)
    593                 staging_size = path.get_size(stagingroot)
    594                 if not self.opts.no_clean() or self.opts.always_clean():
    595                     log.notice('clean staging: %s' % (self.bset))
    596                     log.trace('removing: %s' % (stagingroot))
    597                     if not self.opts.dry_run():
    598                         if path.exists(stagingroot):
    599                             path.removeall(stagingroot)
    600                 log.notice('Staging Size: %s' % (build.humanize_number(staging_size, 'B')))
     592                have_stagingroot = path.exists(stagingroot)
     593                log.trace('_bset: %2d: install staging, present: %s' % \
     594                          (nesting_count, have_stagingroot))
     595                if have_stagingroot:
     596                    prefix = macro_expand(self.macros, '%{_prefix}')
     597                    self.install(self.install_mode(), self.bset, stagingroot, prefix)
     598                    staging_size = path.get_size(stagingroot)
     599                    if not self.opts.no_clean() or self.opts.always_clean():
     600                        log.notice('clean staging: %s' % (self.bset))
     601                        log.trace('removing: %s' % (stagingroot))
     602                        if not self.opts.dry_run():
     603                            if path.exists(stagingroot):
     604                                path.removeall(stagingroot)
     605                    log.notice('Staging Size: %s' % \
     606                               (build.humanize_number(staging_size, 'B')))
    601607        except error.general as gerr:
    602608            if not build_error:
  • source-builder/sb/sources.py

    rb3b5ca9 r4b7af07  
    5050    args = _args(args)
    5151    if len(args) < 2:
    52         error('%%%s requires at least 2 arguments' % (label))
    53         return
     52        error('%%%s set requires at least 2 arguments' % (label))
     53        return []
    5454    _map = '%s-%s' % (label, args[0])
    5555    macros.create_map(_map)
     
    6464    args = _args(args)
    6565    if len(args) < 2:
    66         error('%%%s requires at least 2 arguments: %s' % (label, ' '.join(args)))
     66        error('%%%s setup requires at least 2 arguments: %s' % (label, ' '.join(args)))
    6767    ss = '%%setup %s %s' % (label, ' '.join(args))
    6868    _map = '%s-%s' % (label, args[0])
    6969    if 'setup' in macros.map_keys(_map):
    7070        error('%%%s already setup source: %s' % (label, ' '.join(args)))
    71         return
     71        return []
     72    macros.set_write_map(_map)
     73    macros.define('setup', ss)
     74    macros.unset_write_map()
     75    return [ss]
     76
     77def download(label, args, macros, error):
     78    args = _args(args)
     79    if len(args) != 1:
     80        error('%%%s download requires 1 argument: %s' % (label, ' '.join(args)))
     81    ss = '%%setup %s %s -g' % (label, ' '.join(args))
     82    _map = '%s-%s' % (label, args[0])
     83    if 'setup' in macros.map_keys(_map):
     84        error('%%%s already setup source: %s' % (label, ' '.join(args)))
     85        return []
    7286    macros.set_write_map(_map)
    7387    macros.define('setup', ss)
     
    8094    args = _args(args)
    8195    log.trace('sources: %s' % (' '.join(args)))
    82     if len(args) < 3:
    83         error('%%%s requires at least 3 arguments: %s' % (label, ' '.join(args)))
    84         return
    8596    if args[0] == 'set':
    8697        return set(label, args[1:], macros, error)
     
    89100    elif args[0] == 'setup':
    90101        return setup(label, args[1:], macros, error)
     102    elif args[0] == 'download':
     103        return download(label, args[1:], macros, error)
    91104    error('invalid %%%s command: %s' % (label, args[0]))
    92105
Note: See TracChangeset for help on using the changeset viewer.