summaryrefslogblamecommitdiffstats
path: root/linkers/wscript
blob: 2d2d7f0d1cce7405eab8ebde5c4102ff03e9f8da (plain) (tree)
1
2
3
4
5
6
7
8
9
10
 
                                             
                                                    



                                                                


                                                                          
 






                                                                          


 



                            


              
                 

                            

                    

                             
                                        

               




                                      
                                       

              
     
                              
     
             



                  


                                                              
                                                                
                                                              
                                                                
                                                    

                                                     


                                                            
                                                                        
                              



                          
                                                        

     






                                                                


                                    
                                          
                                  



                                                                   





                                    
                                          
                                  



                                                                   






                                           
                                  



                                                                   
                              
                                                           


                                       
                                       
                                         


                                                
                                                 
                                              
                                       
                                               
                                         




                                      
                                            
                                  



                                                                   





                                     
                                              
                                  



                                                                   

                              











                                                                   











                                                                   
              
                                                                      
#
# RTEMS Tools Project (http://www.rtems.org/)
# Copyright 2014-2016 Chris Johns (chrisj@rtems.org)
# All rights reserved.
#
# This file is part of the RTEMS Tools package in 'rtems-tools'.
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#

#
# RTEMS Linker build script.
#
import sys

def init(ctx):
    pass

def options(opt):
    opt.load('compiler_c')
    opt.load('compiler_cxx')

def configure(conf):
    conf.load('compiler_c')
    conf.load('compiler_cxx')
    conf.write_config_header('config.h')

def build(bld):
    #
    # Build the doxygen documentation.
    #
    if bld.cmd == 'doxy':
        bld(features = 'doxygen',
            doxyfile = 'rtl-host.conf')
        return

    #
    # The local configuration.
    #
    conf = {}

    #
    # Build flags.
    #
    rtemstoolkit = '../rtemstoolkit'
    conf['includes'] = [rtemstoolkit,
                        rtemstoolkit + '/elftoolchain/libelf',
                        rtemstoolkit + '/elftoolchain/libdwarf',
                        rtemstoolkit + '/elftoolchain/common',
                        rtemstoolkit + '/elftoolchain/libelftc',
                        rtemstoolkit + '/libiberty']
    if bld.env.DEST_OS == 'win32':
        conf['includes'] += [rtemstoolkit + '/win32']
    conf['warningflags'] = ['-Wall', '-Wextra', '-pedantic']
    conf['optflags'] = bld.env.C_OPTS
    conf['cflags'] = ['-pipe', '-g'] + conf['optflags']
    conf['cxxflags'] = ['-pipe', '-g', '--std=c++11'] + conf['optflags']
    conf['linkflags'] = ['-g']

    #
    # The list of modules.
    #
    modules = ['rld', 'elftc', 'dwarf', 'elf', 'iberty']

    #
    # The list of defines
    #
    defines = ['HAVE_CONFIG_H=1',
               'RTEMS_VERSION=\"%s\"' % (bld.env.RTEMS_VERSION),
               'RTEMS_RELEASE=\"%s\"' % (bld.env.RTEMS_RELEASE)]

    #
    # Build the linker.
    #
    bld.program(target = 'rtems-ld',
                source = ['rtems-ld.cpp'],
                defines = defines,
                includes = ['.'] + conf['includes'],
                cflags = conf['cflags'] + conf['warningflags'],
                cxxflags = conf['cxxflags'] + conf['warningflags'],
                linkflags = conf['linkflags'],
                use = modules)

    #
    # Build the ra linker.
    #
    bld.program(target = 'rtems-ra',
                source = ['rtems-ra.cpp'],
                defines = defines,
                includes = ['.'] + conf['includes'],
                cflags = conf['cflags'] + conf['warningflags'],
                cxxflags = conf['cxxflags'] + conf['warningflags'],
                linkflags = conf['linkflags'],
                use = modules)

    #
    # Build the trace linker.
    #
    bld.program(target = 'rtems-tld',
                source = ['rtems-tld.cpp'],
                defines = defines,
                includes = ['.'] + conf['includes'],
                cflags = conf['cflags'] + conf['warningflags'],
                cxxflags = conf['cxxflags'] + conf['warningflags'],
                linkflags = conf['linkflags'],
                use = modules)
    bld.install_files('${PREFIX}/share/rtems/trace-linker',
                      ['libc.ini',
                       'libc-heap.ini',
                       'rtems.ini',
                       'rtems-api.ini',
                       'rtems-posix.ini',
                       'rtems-score.ini',
                       'rtems-score-object.ini',
                       'rtems-score-thread.ini',
                       'rtems-score-threadq.ini',
                       'rtems-score-heap.ini',
                       'rtld-base.ini',
                       'rtld-trace-buffer.ini',
                       'rtld-print.ini'])

    #
    # Build the symbols.
    #
    bld.program(target = 'rtems-syms',
                source = ['rtems-syms.cpp'],
                defines = defines,
                includes = ['.'] + conf['includes'],
                cflags = conf['cflags'] + conf['warningflags'],
                cxxflags = conf['cxxflags'] + conf['warningflags'],
                linkflags = conf['linkflags'],
                use = modules)

    #
    # Build the RAP utility.
    #
    bld.program(target = 'rtems-rap',
                source = ['rtems-rapper.cpp'],
                defines = defines,
                includes = ['.'] + conf['includes'],
                cflags = conf['cflags'] + conf['warningflags'],
                cxxflags = conf['cxxflags'] + conf['warningflags'],
                linkflags = conf['linkflags'],
                use = modules)

    #
    # Build the EXE information tool.
    #
    bld.program(target = 'rtems-exeinfo',
                source = ['rtems-exeinfo.cpp'],
                defines = defines,
                includes = ['.'] + conf['includes'],
                cflags = conf['cflags'] + conf['warningflags'],
                cxxflags = conf['cxxflags'] + conf['warningflags'],
                linkflags = conf['linkflags'],
                use = modules)

    #
    # Build the address to line tool.
    #
    bld.program(target = 'rtems-addr2line',
                source = ['rtems-addr2line.cpp'],
                defines = defines,
                includes = ['.'] + conf['includes'],
                cflags = conf['cflags'] + conf['warningflags'],
                cxxflags = conf['cxxflags'] + conf['warningflags'],
                linkflags = conf['linkflags'],
                use = modules)

def tags(ctx):
    ctx.exec_command('etags $(find . -name \\*.[sSch])', shell = True)