| # |
| # 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: |
| if toolchain == 'clang': |
| # make-standalone-toolchain.sh still expects a version. |
| toolchain = 'clang3.6' |
| 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) |