[PATCH 2/4] rtems_bsd: Improve the support for libbsd.
chrisj at rtems.org
chrisj at rtems.org
Sun Jun 30 01:54:14 UTC 2019
From: Chris Johns <chrisj at rtems.org>
1. Better support for the configure process.
2. Add support to handle a network config file.
---
rtems_bsd.py | 117 +++++++++++++++++++++++++++++++++++++++++----------
1 file changed, 95 insertions(+), 22 deletions(-)
diff --git a/rtems_bsd.py b/rtems_bsd.py
index 13212de..f28ef1c 100644
--- a/rtems_bsd.py
+++ b/rtems_bsd.py
@@ -39,7 +39,7 @@ def init(ctx):
pass
def options(opt):
- opt.add_option('--net-test-config',
+ opt.add_option('--net-config',
default = 'config.inc',
dest = 'net_config',
help = 'Network test configuration.')
@@ -49,29 +49,102 @@ def options(opt):
dest = 'rtems_libbsd',
help = 'Path to install RTEMS LibBSD (defauls to prefix).')
-def bsp_configure(conf, arch_bsp):
- conf.check(header_name = 'dlfcn.h', features = 'c')
- if not rtems.check_posix(conf):
- conf.fatal("RTEMS kernel POSIX support is disabled; configure RTEMS with --enable-posix")
- if rtems.check_networking(conf):
- conf.fatal("RTEMS kernel contains the old network support; configure RTEMS with --disable-networking")
- if conf.options.rtems_libbsd is None:
- rtems_libbsd_path = conf.env.PREFIX
- else:
- if not os.path.exists(conf.options.rtems_libbsd):
- conf.fatal('RTEMS LibBSD not found')
+def bsp_configure(conf, arch_bsp, mandatory = True):
+ configure = mandatory
+
+ if not mandatory and conf.options.rtems_libbsd is not None:
+ configure = True
+
+ if configure:
+ conf.msg('RTEMS LibBSD',
+ rtems.arch(arch_bsp) + '/' + rtems.bsp(arch_bsp),
+ 'YELLOW')
+
+ conf.check(header_name = 'dlfcn.h', features = 'c')
+ if not rtems.check_posix(conf):
+ conf.fatal('RTEMS kernel POSIX support is disabled; ' +
+ 'configure RTEMS with --enable-posix')
+ if rtems.check_networking(conf):
+ conf.fatal('RTEMS kernel contains the old network support; ' +
+ 'configure RTEMS with --disable-networking')
rtems_libbsd_path = conf.options.rtems_libbsd
+ if rtems_libbsd_path is None:
+ if conf.options.rtems is None:
+ rtems_libbsd_path = conf.options.rtems
+ else:
+ rtems_libbsd_path = conf.env.PREFIX
+
+ if not os.path.exists(rtems_libbsd_path):
+ conf.fatal('RTEMS LibBSD path not found: %s' % (rtems_libbsd_path))
- rtems_libbsd_inc_path = os.path.join(rtems_libbsd_path,
- rtems.arch_bsp_include_path(conf.env.RTEMS_VERSION,
+ rtems_libbsd_inc_path = os.path.join(rtems_libbsd_path,
+ rtems.arch_bsp_include_path(conf.env.RTEMS_VERSION,
conf.env.RTEMS_ARCH_BSP))
- rtems_libbsd_lib_path = os.path.join(rtems_libbsd_path,
- rtems.arch_bsp_lib_path(conf.env.RTEMS_VERSION,
- conf.env.RTEMS_ARCH_BSP))
+ rtems_libbsd_lib_path = os.path.join(rtems_libbsd_path,
+ rtems.arch_bsp_lib_path(conf.env.RTEMS_VERSION,
+ conf.env.RTEMS_ARCH_BSP))
+
+ conf.env.IFLAGS += [rtems_libbsd_inc_path]
+ conf.check(header_name = 'machine/rtems-bsd-sysinit.h',
+ features = 'c',
+ includes = conf.env.IFLAGS)
+
+ conf.env.RTEMS_LIBBSD = 'Yes'
+ conf.env.INCLUDES = conf.env.IFLAGS
+ conf.env.LIBPATH += [rtems_libbsd_lib_path]
+ conf.env.LIB += ['bsd', 'z', 'm']
+
+ configure_net_config(conf, arch_bsp)
+
+def configure_net_config(conf, arch_bsp):
+ if check_libbsd(conf) and conf.options.net_config is not None:
+ net_config = conf.options.net_config
+
+ if not os.path.exists(net_config):
+ conf.fatal('network configuraiton \'%s\' not found' % (net_config))
+
+ try:
+ net_cfg_lines = open(net_config).readlines()
+ except:
+ conf.fatal('network configuraiton \'%s\' read failed' % (net_config))
+
+ tags = [ 'NET_CFG_SELF_IP',
+ 'NET_CFG_NETMASK',
+ 'NET_CFG_PEER_IP',
+ 'NET_CFG_GATEWAY_IP' ]
+
+ lc = 0
+ sed = 'sed '
+ defines = []
+ for l in net_cfg_lines:
+ lc += 1
+ if l.strip().startswith('NET_CFG_'):
+ ls = l.split('=')
+ if len(ls) != 2:
+ conf.fatal('network configuraiton \'%s\' ' + \
+ 'parse error: %d: %s' % (net_config, lc, l))
+ lhs = ls[0].strip()
+ rhs = ls[1].strip()
+ for t in tags:
+ if lhs.startswith(t):
+ conf.env[lhs] = rhs
+ sed += "-e 's/@%s@/%s/'" % (lhs, rhs)
+ defines += ['%s="%s"' % (lhs, rhs)]
+
+ conf.env.NET_CONFIG = net_config
+ conf.env.NET_CONFIG_SED = sed
+ conf.env.NET_CONFIG_DEFINES = ','.join(defines)
+
+ conf.msg('Net Config', 'found', 'YELLOW')
+
+def check_libbsd(ctx):
+ return rtems.check(ctx, 'RTEMS_LIBBSD')
- conf.env.IFLAGS += [rtems_libbsd_inc_path]
- conf.check(header_name = 'machine/rtems-bsd-sysinit.h', features = 'c', includes = conf.env.IFLAGS)
+def check_net_config(ctx):
+ return rtems.check(ctx, 'NET_CONFIG', setting = True)
- conf.env.INCLUDES = conf.env.IFLAGS
- conf.env.LIBPATH += [rtems_libbsd_lib_path]
- conf.env.LIB += ['bsd', 'z', 'm']
+def net_config_header(ctx, target):
+ ctx(target = target,
+ source = "rtems_waf/network-config.h.in",
+ rule = sed + " < ${SRC} > ${TGT}",
+ update_outputs = True)
--
2.20.1 (Apple Git-117)
More information about the devel
mailing list