# # RTEMS Project (https://www.rtems.org/) # # Copyright (c) 2021 Vijay Kumar Banerjee . # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. from rtems_waf import rtems import bsp_drivers import os source_files = [] include_files = {} exclude_dirs = ['pppd', 'nfsclient', 'testsuites', 'librpc/include', 'bsps', 'telnetd'] exclude_headers = ['rtems-bsd-user-space.h', 'rtems-bsd-kernel-space.h'] for root, dirs, files in os.walk("."): [dirs.remove(d) for d in list(dirs) if d in exclude_dirs] dirs.append('./bsps/shared/net') include_files[root[2:]] = [] for name in files: ext = os.path.splitext(name)[1] if ext == '.c': source_files.append(os.path.join(root, name)) if ext == '.h' and name not in exclude_headers: include_files[root[2:]].append(os.path.join(root, name)) def find_node(bld, *paths): path = os.path.join(*paths) return os.path.relpath(str(bld.path.find_node(path))) def install_file_list(*paths): path = os.path.join(*paths) file_list = [os.path.join(path, f) for f in os.listdir(path)] return file_list def build(bld): include_path = [] ip = '' bsp = bld.env.RTEMS_ARCH_BSP.split('-')[-1] pppd_source = [os.path.join('./pppd', s) for s in os.listdir('./pppd') if s[-2:] == '.c'] telnetd_source = [os.path.join('./telnetd', s) for s in os.listdir('telnetd') if s[-2:] == '.c'] nfs_source = [] for root, dirs, files in os.walk('nfsclient'): for name in files: ext = os.path.splitext(name)[1] if ext == '.c': src_root = os.path.split(root) nfs_source.append(os.path.join(src_root[0], src_root[1], name)) bsp_dirs, bsp_sources = bsp_drivers.bsp_files(bld) include_path.extend(['.', './include', os.path.relpath(bld.env.PREFIX), './testsuites/include', os.path.relpath(os.path.join(bld.env.PREFIX, 'include')), './bsps/include']) arch_lib_path = rtems.arch_bsp_lib_path(bld.env.RTEMS_VERSION, bld.env.RTEMS_ARCH_BSP) lib_path = os.path.join(bld.env.PREFIX, arch_lib_path) include_path.append(os.path.relpath(os.path.join(bld.env.PREFIX, arch_lib_path))) include_path.append(os.path.relpath(os.path.join(bld.env.PREFIX, arch_lib_path, 'include'))) include_path.append(find_node(bld, 'bsps', 'include', 'libchip')) bld.read_stlib('rtemsbsp', paths=[lib_path]) if bsp in bsp_dirs: include_path.extend(bsp_dirs[bsp]) for i in include_path: ip = ip + i + ' ' if (bsp in bsp_sources): bld(target='bsp_objs', features='c', cflags=['-O2', '-g'], includes=ip, source=bsp_sources[bsp]) bld(target='network_objects', features='c', includes=ip, source=source_files) bld(target='networking', features='c cstlib', use=['bsp_objs', 'network_objects']) bld.stlib(target='pppd', features='c', includes=ip, use='networking', source=pppd_source) bld.stlib(target='telnetd', features='c', includes=ip, use='networking', source=telnetd_source) bld.stlib(target='nfs', features='c', includes=ip, use=['rtemsbsp', 'networking'], source=nfs_source) bld.install_files(os.path.join('${PREFIX}', arch_lib_path), ["libnetworking.a", 'libpppd.a', 'libtelnetd.a', 'libnfs.a']) bld.install_files(os.path.join('${PREFIX}', arch_lib_path, 'include', 'libchip'), install_file_list('bsps', 'include', 'libchip')) for i in include_files: if 'include' in i.split('/'): bld.install_files(os.path.join('${PREFIX}', arch_lib_path, i), include_files[i]) else: bld.install_files(os.path.join('${PREFIX}', arch_lib_path, 'include', i), include_files[i])