RTEMS Source Builder OpenBSD support.

Karel Gardas karel.gardas at centrum.cz
Sun Jun 21 18:37:31 UTC 2015


Hello,

attach is git patch which provides basic OpenBSD support to the RTEMS 
source builder. The only issue so far (and I've not got that far) is 
that rtems tools, precisely libelf is broken and compilation fails 
because of it with:

[  7/235] Compiling rtemstoolkit/elftoolchain/libelf/elf_end.c
In file included from ../rtemstoolkit/elftoolchain/libelf/elf.c:27:
/home/karel/development/rtems/rtems-source-builder/rtems/sources/git/rtems-tools.git/rtemstoolkit/elftoolchain/libelf/libelf.h:121: 
error: expected specifier-qualifier-list before 'STAILQ_ENTRY'
In file included from ../rtemstoolkit/elftoolchain/libelf/elf.c:29:
../rtemstoolkit/elftoolchain/libelf/_libelf.h:123: error: expected 
specifier-qualifier-list before 'STAILQ_HEAD'
../rtemstoolkit/elftoolchain/libelf/_libelf.h:136: error: expected 
specifier-qualifier-list before 'STAILQ_HEAD'
../rtemstoolkit/elftoolchain/libelf/elf.c:31: error: expected 
declaration specifiers or '...' before string constant
../rtemstoolkit/elftoolchain/libelf/elf.c:31: warning: data definition 
has no type or storage class
../rtemstoolkit/elftoolchain/libelf/elf.c:34: error: 'LIBELF_ARCH' 
undeclared here (not in a function)
../rtemstoolkit/elftoolchain/libelf/elf.c:35: error: 'LIBELF_BYTEORDER' 
undeclared here (not in a function)
../rtemstoolkit/elftoolchain/libelf/elf.c:36: error: 'LIBELF_CLASS' 
undeclared here (not in a function)


positive thing is that upstream version of elftoolchain project already 
supports OpenBSD and I've tested the libelf is buildable on it, so it's 
perhaps "just" of the matter of updating to what upstream provides?

To reacap current status: iconv is not used in newlib due to issue with 
big5 encoding (configure complains about it). GDB is build w/o python 
since linking against libpython on OpenBSD fails for so far to me 
unknown reason. I hope both those limitations are not show-stoppers so 
when elftoolchain issue is solved I'd rather continue to see if I'm able 
to build whole RTEMS tool chain.

Thanks,
Karel
-------------- next part --------------
>From 1ac2a3ad4198e864125094996329c83bad712cbd Mon Sep 17 00:00:00 2001
From: Karel Gardas <karel.gardas at centrum.cz>
Date: Fri, 19 Jun 2015 12:12:16 +0200
Subject: [PATCH] add basic support for OpenBSD

---
 source-builder/sb/openbsd.py | 92 ++++++++++++++++++++++++++++++++++++++++++++
 source-builder/sb/options.py |  3 ++
 2 files changed, 95 insertions(+)
 create mode 100644 source-builder/sb/openbsd.py

diff --git a/source-builder/sb/openbsd.py b/source-builder/sb/openbsd.py
new file mode 100644
index 0000000..2443e49
--- /dev/null
+++ b/source-builder/sb/openbsd.py
@@ -0,0 +1,92 @@
+#
+# RTEMS Tools Project (http://www.rtems.org/)
+# Copyright 2010-2012 Chris Johns (chrisj at rtems.org)
+# All rights reserved.
+#
+# This file is part of the RTEMS Tools package in 'rtems-tools'.
+#
+# RTEMS Tools is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# RTEMS Tools is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with RTEMS Tools.  If not, see <http://www.gnu.org/licenses/>.
+#
+
+#
+# This code is based on what ever doco about spec files I could find and
+# RTEMS project's spec files.
+#
+
+import pprint
+import os
+
+import check
+import execute
+
+def load():
+    uname = os.uname()
+    sysctl = '/sbin/sysctl '
+    e = execute.capture_execution()
+    exit_code, proc, output = e.shell(sysctl + 'hw.ncpu')
+    if exit_code == 0:
+        ncpus = output.split('=')[1].strip()
+    else:
+        ncpus = '1'
+    if uname[4] == 'amd64':
+        cpu = 'x86_64'
+    else:
+        cpu = uname[4]
+    version = uname[2]
+    if version.find('-') > 0:
+        version = version.split('-')[0]
+    defines = {
+        '_ncpus':            ('none',    'none',     ncpus),
+        '_os':               ('none',    'none',     'openbsd'),
+        '_host':             ('triplet', 'required', cpu + '-openbsd' + version),
+        '_host_vendor':      ('none',    'none',     'pc'),
+        '_host_os':          ('none',    'none',     'openbsd'),
+        '_host_os_version':  ('none',    'none',     version),
+        '_host_cpu':         ('none',    'none',     cpu),
+        '_host_alias':       ('none',    'none',     '%{nil}'),
+        '_host_arch':        ('none',    'none',     cpu),
+        '_usr':              ('dir',     'required', '/usr'),
+        '_var':              ('dir',     'optional', '/var'),
+        'optincludes_build': ('none',    'none',     '-I/usr/local/include -L/usr/local/lib'),
+        '__chgrp':           ('exe',     'required', '/bin/chgrp'),
+        '__tar':             ('exe',     'required', '/bin/tar'),
+        '__bash':            ('exe',     'optional', '/usr/local/bin/bash'),
+        '__bison':           ('exe',     'required', '/usr/local/bin/bison'),
+        '__git':             ('exe',     'required', '/usr/local/bin/git'),
+        '__svn':             ('exe',     'required', '/usr/local/bin/svn'),
+        '__xz':              ('exe',     'optional', '/usr/local/bin/xz'),
+        '__bzip2':           ('exe',     'required', '/usr/local/bin/bzip2'),
+        '__unzip':           ('exe',     'required', '/usr/local/bin/unzip'),
+        '__make':            ('exe',     'required', 'gmake'),
+        '__m4':              ('exe',     'required', '/usr/local/bin/gm4'),
+        '__awk':             ('exe',     'required', '/usr/local/bin/gawk'),
+        '__sed':             ('exe',     'required', '/usr/local/bin/gsed'),
+        '__patch':           ('exe',     'required', '/usr/local/bin/gpatch'),
+        '__python':          ('exe',     'required', '/usr/local/bin/python2.7'),
+        '__patch_opts':      ('none',    'none',     '-E'),
+        'with_iconv':        ('none',    'none',     '0'),
+        'without_python':    ('none',    'none',     '1')
+        }
+
+    defines['_build']        = defines['_host']
+    defines['_build_vendor'] = defines['_host_vendor']
+    defines['_build_os']     = defines['_host_os']
+    defines['_build_cpu']    = defines['_host_cpu']
+    defines['_build_alias']  = defines['_host_alias']
+    defines['_build_arch']   = defines['_host_arch']
+
+    return defines
+
+if __name__ == '__main__':
+    pprint.pprint(load())
diff --git a/source-builder/sb/options.py b/source-builder/sb/options.py
index e4964f0..cddacfe 100644
--- a/source-builder/sb/options.py
+++ b/source-builder/sb/options.py
@@ -580,6 +580,9 @@ def load(args, optargs = None, defaults = '%{_sbdir}/defaults.mc'):
             elif uname[0] == 'SunOS':
                 import solaris
                 overrides = solaris.load()
+            elif uname[0] == 'OpenBSD':
+                import openbsd
+                overrides = openbsd.load()
         except:
             raise error.general('failed to load %s host support' % (uname[0]))
     else:
-- 
2.3.0



More information about the devel mailing list