Commit 088561ac authored by sbc's avatar sbc Committed by Commit bot

[NaCl SDK] Remove create_nmf dependency on NACL_SDK_ROOT env var

create_nmf should determine the root of the SDK relative
to its own location.

The exception to this is when its run as part of the
chrome build, when it is not yet installed.  In this
case we pass --no-default-libpath and --objdump to
create_nmf to remove any use of the SDK root.

Review URL: https://codereview.chromium.org/737653003

Cr-Commit-Position: refs/heads/master@{#313957}
parent de870139
......@@ -466,15 +466,16 @@ def ParseExtraFiles(encoded_list, err):
def GetSDKRoot():
"""Determine current NACL_SDK_ROOT, either via the environment variable
itself, or by attempting to derive it from the location of this script.
"""Returns the root directory of the NaCl SDK.
"""
sdk_root = os.environ.get('NACL_SDK_ROOT')
if not sdk_root:
sdk_root = os.path.dirname(SCRIPT_DIR)
if not os.path.exists(os.path.join(sdk_root, 'toolchain')):
return None
# This script should be installed in NACL_SDK_ROOT/tools. Assert that
# the 'toolchain' folder exists within this directory in case, for
# example, this script is moved to a different location.
# During the Chrome build this script is sometimes run outside of
# of an SDK but in these cases it should always be run with --objdump=
# and --no-default-libpath which avoids the need to call this function.
sdk_root = os.path.dirname(SCRIPT_DIR)
assert(os.path.exists(os.path.join(sdk_root, 'toolchain')))
return sdk_root
......@@ -482,12 +483,8 @@ def FindObjdumpExecutable():
"""Derive path to objdump executable to use for determining shared
object dependencies.
"""
sdk_root = GetSDKRoot()
if not sdk_root:
return None
osname = getos.GetPlatform()
toolchain = os.path.join(sdk_root, 'toolchain', '%s_x86_glibc' % osname)
toolchain = os.path.join(GetSDKRoot(), 'toolchain', '%s_x86_glibc' % osname)
objdump = os.path.join(toolchain, 'bin', 'x86_64-nacl-objdump')
if osname == 'win':
objdump += '.exe'
......@@ -508,10 +505,6 @@ def GetDefaultLibPath(config):
"""
assert(config in ('Debug', 'Release'))
sdk_root = GetSDKRoot()
if not sdk_root:
# TOOD(sbc): output a warning here? We would also need to suppress
# the warning when run from the chromium build.
return []
osname = getos.GetPlatform()
libpath = [
......@@ -580,8 +573,8 @@ def main(args):
help='Rename FOO as BAR',
action='append', default=[], metavar='FOO,BAR')
parser.add_argument('-x', '--extra-files',
help=('Add extra key:file tuple to the "files"' +
' section of the .nmf'),
help='Add extra key:file tuple to the "files"'
' section of the .nmf',
action='append', default=[], metavar='FILE')
parser.add_argument('-O', '--pnacl-optlevel',
help='Set the optimization level to N in PNaCl manifests',
......@@ -669,7 +662,7 @@ def main(args):
pnacl_debug_optlevel=pnacl_debug_optlevel,
nmf_root=nmf_root)
if not options.output:
if options.output is None:
sys.stdout.write(nmf.GetJson())
else:
with open(options.output, 'w') as output:
......
......@@ -14,17 +14,19 @@ import unittest
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
TOOLS_DIR = os.path.dirname(SCRIPT_DIR)
DATA_DIR = os.path.join(TOOLS_DIR, 'lib', 'tests', 'data')
BUILD_TOOLS_DIR = os.path.join(os.path.dirname(TOOLS_DIR), 'build_tools')
CHROME_SRC = os.path.dirname(os.path.dirname(os.path.dirname(TOOLS_DIR)))
MOCK_DIR = os.path.join(CHROME_SRC, 'third_party', 'pymock')
# For the mock library
sys.path.append(MOCK_DIR)
sys.path.append(TOOLS_DIR)
sys.path.append(BUILD_TOOLS_DIR)
import build_paths
import create_nmf
import getos
import mock
from mock import patch, Mock
TOOLCHAIN_OUT = os.path.join(build_paths.OUT_DIR, 'sdk_tests', 'toolchain')
NACL_X86_GLIBC_TOOLCHAIN = os.path.join(TOOLCHAIN_OUT,
......@@ -61,24 +63,18 @@ class TestPosixRelPath(unittest.TestCase):
class TestDefaultLibpath(unittest.TestCase):
def testWithoutNaClSDKRoot(self):
"""GetDefaultLibPath wihtout NACL_SDK_ROOT set
In the absence of NACL_SDK_ROOT GetDefaultLibPath should
return the empty list."""
with mock.patch.dict('os.environ', clear=True):
paths = create_nmf.GetDefaultLibPath('Debug')
self.assertEqual(paths, [])
def testHonorNaClSDKRoot(self):
with mock.patch.dict('os.environ', {'NACL_SDK_ROOT': '/dummy/path'}):
paths = create_nmf.GetDefaultLibPath('Debug')
def setUp(self):
patcher = patch('create_nmf.GetSDKRoot', Mock(return_value='/dummy/path'))
patcher.start()
self.addCleanup(patcher.stop)
def testUsesSDKRoot(self):
paths = create_nmf.GetDefaultLibPath('Debug')
for path in paths:
self.assertTrue(path.startswith('/dummy/path'))
def testIncludesNaClPorts(self):
with mock.patch.dict('os.environ', {'NACL_SDK_ROOT': '/dummy/path'}):
paths = create_nmf.GetDefaultLibPath('Debug')
paths = create_nmf.GetDefaultLibPath('Debug')
self.assertTrue(any(os.path.join('ports', 'lib') in p for p in paths),
"naclports libpath missing: %s" % str(paths))
......
......@@ -139,6 +139,10 @@
'--strip-all',
],
'create_nmf': '<(DEPTH)/native_client_sdk/src/tools/create_nmf.py',
'create_nmf_flags': [
'--no-default-libpath',
'--objdump=>(nacl_glibc_tc_root)/bin/x86_64-nacl-objdump',
],
'create_nonsfi_test_nmf': 'tests/create_nonsfi_test_nmf.py',
},
'conditions': [
......@@ -149,7 +153,6 @@
# doesn't work on Windows.
'libdir_glibc64': '>(nacl_glibc_tc_root)/x86_64-nacl/lib',
'libdir_glibc32': '>(nacl_glibc_tc_root)/x86_64-nacl/lib32',
'nacl_objdump': '>(nacl_glibc_tc_root)/bin/x86_64-nacl-objdump',
'nmf_glibc%': '<(PRODUCT_DIR)/>(nexe_target)_glibc.nmf',
},
'actions': [
......@@ -165,7 +168,7 @@
'action': [
'python',
'>@(_inputs)',
'--objdump=>(nacl_objdump)',
'>@(create_nmf_flags)',
'--output=>(nmf_glibc)',
'--stage-dependencies=<(PRODUCT_DIR)',
],
......@@ -218,6 +221,7 @@
'action': [
'python',
'>@(_inputs)',
'>@(create_nmf_flags)',
'--output=>(nmf_pnacl)',
],
'conditions': [
......@@ -306,6 +310,7 @@
'action': [
'python',
'>@(_inputs)',
'>@(create_nmf_flags)',
'--output=>(nmf_pnacl)',
],
},
......@@ -329,6 +334,7 @@
'action': [
'python',
'>@(_inputs)',
'>@(create_nmf_flags)',
'--output=>(nmf_pnacl)',
],
},
......
......@@ -110,6 +110,10 @@
'create_nmf': '<(DEPTH)/native_client_sdk/src/tools/create_nmf.py',
'create_nmf_args_portable%': [],
'create_nonsfi_test_nmf': '<(DEPTH)/ppapi/tests/create_nonsfi_test_nmf.py',
'create_nmf_args': [
'--no-default-libpath',
'--objdump=>(nacl_glibc_tc_root)/bin/x86_64-nacl-objdump',
],
},
'target_conditions': [
['generate_nmf==1 and build_newlib==1', {
......@@ -121,6 +125,7 @@
'action': [
'python',
'>(create_nmf)',
'>@(create_nmf_args)',
'--output=>(nmf_newlib)',
'>@(create_nmf_args_portable)',
],
......@@ -151,7 +156,6 @@
# doesn't work on Windows.
'libdir_glibc64': '>(nacl_glibc_tc_root)/x86_64-nacl/lib',
'libdir_glibc32': '>(nacl_glibc_tc_root)/x86_64-nacl/lib32',
'nacl_objdump': '>(nacl_glibc_tc_root)/bin/x86_64-nacl-objdump',
},
'actions': [
{
......@@ -164,7 +168,7 @@
'action': [
'python',
'>@(_inputs)',
'--objdump=>(nacl_objdump)',
'>@(create_nmf_args)',
'--output=>(nmf_glibc)',
'--path-prefix=>(nexe_target)_libs',
'--stage-dependencies=<(nacl_glibc_out_dir)',
......@@ -201,6 +205,7 @@
'action': [
'python',
'>(create_nmf)',
'>@(create_nmf_args)',
'--output=>(nmf_pnacl_newlib)',
'>(out_pnacl_newlib)',
'>@(create_nmf_args_portable)',
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment