78 lines
2.5 KiB
Python
78 lines
2.5 KiB
Python
#
|
|
# Copyright (C) 2015 The Android Open Source Project
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
#
|
|
import os
|
|
import shutil
|
|
import site
|
|
import subprocess
|
|
import tempfile
|
|
|
|
site.addsitedir(os.path.join(os.environ['NDK'], 'build/lib'))
|
|
|
|
import build_support # pylint: disable=import-error
|
|
|
|
|
|
def make_standalone_toolchain(arch, platform, toolchain, install_dir):
|
|
ndk_dir = os.environ['NDK']
|
|
make_standalone_toolchain_path = os.path.join(
|
|
ndk_dir, 'build/tools/make-standalone-toolchain.sh')
|
|
|
|
cmd = [make_standalone_toolchain_path, '--install-dir=' + install_dir]
|
|
|
|
if arch is not None:
|
|
cmd.append('--arch=' + arch)
|
|
if platform is not None:
|
|
cmd.append('--platform=' + platform)
|
|
|
|
if toolchain is not None:
|
|
toolchain_triple = build_support.arch_to_toolchain(arch)
|
|
name = '{}-{}'.format(toolchain_triple, toolchain)
|
|
cmd.append('--toolchain=' + name)
|
|
|
|
subprocess.check_call(cmd)
|
|
|
|
|
|
def test_standalone_toolchain(arch, toolchain, install_dir):
|
|
if toolchain == '4.9':
|
|
triple = build_support.arch_to_triple(arch)
|
|
# x86 toolchain names are dumb: http://b/25800583
|
|
if arch == 'x86':
|
|
triple = 'i686-linux-android'
|
|
compiler_name = triple + '-g++'
|
|
elif toolchain == 'clang':
|
|
compiler_name = 'clang++'
|
|
else:
|
|
raise ValueError
|
|
|
|
compiler = os.path.join(install_dir, 'bin', compiler_name)
|
|
test_source = 'foo.cpp'
|
|
proc = subprocess.Popen([compiler, '-shared', test_source],
|
|
stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
|
out, _ = proc.communicate()
|
|
return proc.returncode == 0, out
|
|
|
|
|
|
def run_test(abi=None, platform=None, toolchain=None,
|
|
build_flags=None): # pylint: disable=unused-argument
|
|
arch = 'arm'
|
|
if abi is not None:
|
|
arch = build_support.abi_to_arch(abi)
|
|
|
|
install_dir = tempfile.mkdtemp()
|
|
try:
|
|
make_standalone_toolchain(arch, platform, toolchain, install_dir)
|
|
return test_standalone_toolchain(arch, toolchain, install_dir)
|
|
finally:
|
|
shutil.rmtree(install_dir)
|