summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--morphlib/__init__.py3
-rw-r--r--morphlib/util.py23
2 files changed, 24 insertions, 2 deletions
diff --git a/morphlib/__init__.py b/morphlib/__init__.py
index 33773791..f416ae0c 100644
--- a/morphlib/__init__.py
+++ b/morphlib/__init__.py
@@ -38,7 +38,8 @@ __version__ = gitversion.version
# List of architectures that Morph supports
-valid_archs = ['armv7l', 'armv7b', 'testarch', 'x86_32', 'x86_64', 'ppc64']
+valid_archs = ['armv7l', 'armv7lhf', 'armv7b', 'testarch',
+ 'x86_32', 'x86_64', 'ppc64']
class Error(cliapp.AppException):
diff --git a/morphlib/util.py b/morphlib/util.py
index 68aed608..024de495 100644
--- a/morphlib/util.py
+++ b/morphlib/util.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2011-2013 Codethink Limited
+# Copyright (C) 2011-2014 Codethink Limited
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -16,6 +16,7 @@
import itertools
import os
import re
+import subprocess
import fs.osfs
@@ -399,6 +400,23 @@ def parse_environment_pairs(env, pairs):
return dict(env.items() + extra_env.items())
+def has_hardware_fp(): # pragma: no cover
+ '''
+ This function returns whether the binary /proc/self/exe is compiled
+ with hardfp _not_ whether the platform is hardfp.
+
+ We expect the binaries on our build platform to be compiled with
+ hardfp.
+
+ This is not ideal but at the time of writing this is the only
+ reliable way to decide whether our architecture is a hardfp
+ architecture.
+ '''
+
+ output = subprocess.check_output(['readelf', '-A', '/proc/self/exe'])
+ return 'Tag_ABI_VFP_args: VFP registers' in output
+
+
def get_host_architecture(): # pragma: no cover
'''Get the canonical Morph name for the host's architecture.'''
@@ -418,6 +436,9 @@ def get_host_architecture(): # pragma: no cover
if machine not in table:
raise morphlib.Error('Unknown host architecture %s' % machine)
+ if machine == 'armv7l' and has_hardware_fp():
+ return 'armv7lhf'
+
return table[machine]