rtemstoolkit: Move host support access into a separate module.

Moving the host support into a module lets it get used where options
is not being used.
This commit is contained in:
Chris Johns 2017-04-25 00:31:44 +10:00
parent 15a3e06518
commit 7d3350d0bb
10 changed files with 192 additions and 107 deletions

View File

@ -51,12 +51,14 @@ import sys
try:
from . import error
from . import execute
from . import host
from . import log
from . import options
from . import path
except (ValueError, SystemError):
import error
import execute
import host
import log
import options
import path
@ -211,7 +213,7 @@ class file(object):
if len(sl):
e = execute.capture_execution()
for s in sl:
if options.host_windows:
if host.is_windows:
cmd = '%s -c "%s"' % (self.macros.expand('%{__sh}'), s[2:-1])
else:
cmd = s[2:-1]

View File

@ -1,6 +1,6 @@
#
# RTEMS Tools Project (http://www.rtems.org/)
# Copyright 2010-2016 Chris Johns (chrisj@rtems.org)
# Copyright 2010-2017 Chris Johns (chrisj@rtems.org)
# All rights reserved.
#
# This file is part of the RTEMS Tools package in 'rtems-tools'.
@ -44,15 +44,19 @@ try:
except (ValueError, SystemError):
import execute
def load():
uname = os.uname()
def cpus():
sysctl = '/usr/sbin/sysctl '
e = execute.capture_execution()
exit_code, proc, output = e.shell(sysctl + 'hw.ncpu')
if exit_code == 0:
ncpus = output.split(' ')[1].strip()
ncpus = int(output.split(' ')[1].strip())
else:
ncpus = '1'
ncpus = 1
return ncpus
def overrides():
uname = os.uname()
ncpus = '%d' % (cores())
defines = {
'_ncpus': ('none', 'none', ncpus),
'_os': ('none', 'none', 'darwin'),
@ -83,4 +87,5 @@ def load():
if __name__ == '__main__':
import pprint
pprint.pprint(load())
pprint.pprint(cpus())
pprint.pprint(overrides())

View File

@ -1,6 +1,6 @@
#
# RTEMS Tools Project (http://www.rtems.org/)
# Copyright 2010-2016 Chris Johns (chrisj@rtems.org)
# Copyright 2010-2017 Chris Johns (chrisj@rtems.org)
# All rights reserved.
#
# This file is part of the RTEMS Tools package in 'rtems-tools'.
@ -33,7 +33,6 @@
# RTEMS project's spec files.
#
import pprint
import os
#
@ -47,15 +46,19 @@ except (ValueError, SystemError):
import check
import execute
def load():
uname = os.uname()
def cpus():
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()
ncpus = int(output.split(' ')[1].strip())
else:
ncpus = '1'
ncpus = 1
return ncpus
def overrides():
uname = os.uname()
ncpus = '%d' % (cpus())
if uname[4] == 'amd64':
cpu = 'x86_64'
else:
@ -104,4 +107,6 @@ def load():
return defines
if __name__ == '__main__':
pprint.pprint(load())
import pprint
pprint.pprint(cpus())
pprint.pprint(overrides())

111
rtemstoolkit/host.py Normal file
View File

@ -0,0 +1,111 @@
#
# RTEMS Tools Project (http://www.rtems.org/)
# Copyright 2017 Chris Johns (chrisj@rtems.org)
# All rights reserved.
#
# This file is part of the RTEMS Tools package in 'rtems-tools'.
#
# 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 HOLDER 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.
#
#
# Host specifics.
#
from __future__ import print_function
import os
#
# Support to handle use in a package and as a unit test.
# If there is a better way to let us know.
#
try:
from . import error
except (ValueError, SystemError):
import error
is_windows = False
platform = None
name = None
def _load():
global is_windows
global platform
global name
if os.name == 'nt':
name = 'windows'
is_windows = True
elif os.name == 'posix':
uname = os.uname()
if uname[0].startswith('CYGWIN_NT'):
name = 'windows'
elif uname[0] == 'Darwin':
name = darwin
elif uname[0] == 'FreeBSD':
name = 'freebsd'
elif uname[0] == 'NetBSD':
name = netbsd
elif uname[0] == 'Linux':
name = 'linux'
elif uname[0] == 'SunOS':
name = 'solaris'
if name is None:
raise error.general('unsupported host type; please add')
#try:
# try:
# platform = __import__(name, globals(), locals(), ['.'])
# except:
# platform = __import__(name, globals(), locals())
#except:
# raise error.general('failed to load %s host support' % (name))
platform = __import__(name, globals(), locals(), ['.', ''])
if platform is None:
raise error.general('failed to load %s host support' % (name))
def cpus():
_load()
return platform.cpus()
def overrides():
_load()
return platform.overrides()
if __name__ == '__main__':
import pprint
_load()
print('Name : %s' % (name))
if is_windows:
status = 'Yes'
else:
status = 'No'
print('Windows : %s' % (status))
print('CPUs : %d' % (cpus()))
print('Overrides :')
pprint.pprint(overrides())

View File

@ -1,6 +1,6 @@
#
# RTEMS Tools Project (http://www.rtems.org/)
# Copyright 2010-2016 Chris Johns (chrisj@rtems.org)
# Copyright 2010-2017 Chris Johns (chrisj@rtems.org)
# All rights reserved.
#
# This file is part of the RTEMS Tools package in 'rtems-tools'.
@ -33,7 +33,6 @@
# RTEMS project's spec files.
#
import pprint
import os
import platform
@ -48,9 +47,7 @@ except (ValueError, SystemError):
import execute
import path
def load():
uname = os.uname()
smp_mflags = ''
def cpus():
processors = '/bin/grep processor /proc/cpuinfo'
e = execute.capture_execution()
exit_code, proc, output = e.shell(processors)
@ -63,7 +60,12 @@ def load():
ncpus = int(count)
except:
pass
ncpus = str(ncpus + 1)
return ncpus + 1
def overrides():
uname = os.uname()
smp_mflags = ''
ncpus = '%d' % cpus()
if uname[4].startswith('arm'):
cpu = 'arm'
else:
@ -153,4 +155,6 @@ def load():
return defines
if __name__ == '__main__':
pprint.pprint(load())
import pprint
pprint.pprint(cpus())
pprint.pprint(overrides())

View File

@ -1,6 +1,6 @@
#
# RTEMS Tools Project (http://www.rtems.org/)
# Copyright 2010-2016 Chris Johns (chrisj@rtems.org)
# Copyright 2010-2017 Chris Johns (chrisj@rtems.org)
# All rights reserved.
#
# This file is part of the RTEMS Tools package in 'rtems-tools'.
@ -24,7 +24,6 @@
# RTEMS project's spec files.
#
import pprint
import os
try:
@ -34,15 +33,19 @@ except (ValueError, SystemError):
import check
import execute
def load():
uname = os.uname()
def cpus():
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()
ncpus = int(output.split(' ')[1].strip())
else:
ncpus = '1'
ncpus = 1
return ncpus
def overrides():
uname = os.uname()
ncpus = '%d' % (cpus())
if uname[4] == 'amd64':
cpu = 'x86_64'
else:
@ -93,4 +96,6 @@ def load():
return defines
if __name__ == '__main__':
pprint.pprint(load())
import pprint
pprint.pprint(cpus())
pprint.pprint(overrides())

View File

@ -50,6 +50,7 @@ try:
from . import error
from . import execute
from . import git
from . import host
from . import log
from . import macros
from . import path
@ -58,6 +59,7 @@ except (ValueError, SystemError):
import error
import execute
import git
import host
import log
import macros
import path
@ -65,11 +67,6 @@ except (ValueError, SystemError):
basepath = 'tb'
#
# Save the host state.
#
host_windows = False
class command_line(object):
"""Process the command line in a common way for all Tool Builder commands."""
@ -539,61 +536,7 @@ def load(opts):
if not isinstance(opts, command_line):
raise error.general('invalid options type passed to options loader')
global host_windows
overrides = None
if os.name == 'nt':
try:
import windows
overrides = windows.load()
host_windows = True
except:
raise error.general('failed to load Windows host support')
elif os.name == 'posix':
uname = os.uname()
try:
if uname[0].startswith('CYGWIN_NT'):
try:
from . import windows
except:
import windows
overrides = windows.load()
elif uname[0] == 'Darwin':
try:
from . import darwin
except:
import darwin
overrides = darwin.load()
elif uname[0] == 'FreeBSD':
try:
from . import freebsd
except:
import freebsd
overrides = freebsd.load()
elif uname[0] == 'NetBSD':
try:
from . import netbsd
except:
import netbsd
overrides = netbsd.load()
elif uname[0] == 'Linux':
try:
from . import linux
except:
import linux
overrides = linux.load()
elif uname[0] == 'SunOS':
try:
from . import solaris
except:
import solaris
overrides = solaris.load()
except:
raise error.general('failed to load %s host support' % (uname[0]))
else:
raise error.general('unsupported host type; please add')
if overrides is None:
raise error.general('no hosts defaults found; please add')
overrides = host.overrides()
for k in overrides:
opts.defaults[k] = overrides[k]

View File

@ -1,6 +1,6 @@
#
# RTEMS Tools Project (http://www.rtems.org/)
# Copyright 2010-2016 Chris Johns (chrisj@rtems.org)
# Copyright 2010-2017 Chris Johns (chrisj@rtems.org)
# All rights reserved.
#
# This file is part of the RTEMS Tools package in 'rtems-tools'.
@ -22,7 +22,6 @@
# RTEMS project's spec files.
#
import pprint
import os
try:
@ -34,15 +33,19 @@ except (ValueError, SystemError):
import error
import execute
def load():
uname = os.uname()
def cpus():
psrinfo = '/sbin/psrinfo|wc -l'
e = execute.capture_execution()
exit_code, proc, output = e.shell(psrinfo)
if exit_code == 0:
ncpus = output
ncpus = int(output)
else:
ncpus = '1'
ncpus = 1
return ncpus
def overrides():
uname = os.uname()
ncpus = '%d' % (cpus())
if uname[4] == 'i86pc':
cpu = 'i386'
else:
@ -87,4 +90,6 @@ def load():
return defines
if __name__ == '__main__':
pprint.pprint(load())
import pprint
pprint.pprint(cpus())
pprint.pprint(overrides())

View File

@ -1,6 +1,6 @@
#
# RTEMS Tools Project (http://www.rtems.org/)
# Copyright 2010-2016 Chris Johns (chrisj@rtems.org)
# Copyright 2010-2017 Chris Johns (chrisj@rtems.org)
# All rights reserved.
#
# This file is part of the RTEMS Tools package in 'rtems-tools'.
@ -32,7 +32,6 @@
# Windows specific support and overrides.
#
import pprint
import os
#
@ -46,7 +45,14 @@ except (ValueError, SystemError):
import error
import execute
def load():
def cpus():
if os.environ.has_key('NUMBER_OF_PROCESSORS'):
ncpus = int(os.environ['NUMBER_OF_PROCESSORS'])
else:
ncpus = 1
return ncpus
def overrides():
# Default to the native Windows Python.
uname = 'win32'
system = 'mingw32'
@ -76,10 +82,7 @@ def load():
except:
pass
if os.environ.has_key('NUMBER_OF_PROCESSORS'):
ncpus = os.environ['NUMBER_OF_PROCESSORS']
else:
ncpus = '1'
ncpus = '%d' % (cpus())
defines = {
'_ncpus': ('none', 'none', ncpus),
@ -140,4 +143,6 @@ def load():
return defines
if __name__ == '__main__':
pprint.pprint(load())
import pprint
pprint.pprint(cpus())
pprint.pprint(overrides())

View File

@ -37,11 +37,11 @@ import sys
import termios
from rtemstoolkit import error
from rtemstoolkit import options
from rtemstoolkit import host
from rtemstoolkit import path
def save():
if not options.host_windows:
if not host.is_windows:
try:
sin = termios.tcgetattr(sys.stdin)
sout = termios.tcgetattr(sys.stdout)
@ -60,13 +60,13 @@ def restore(attributes):
class tty:
def __init__(self, dev):
if options.host_windows:
if host.is_windows:
raise error.general('termios not support on host')
self.dev = dev
self.default_attr = None
self.fd = None
self.if_on = False
if options.host_windows:
if host.is_windows:
raise error.general('TTY consoles not supported on Windows.')
if not path.exists(dev):
raise error.general('dev not found: %s' % (dev))