# # 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)