mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-08 19:04:45 +00:00
Bug 1504147 - Build compiler-rt libs for android on arm. r=froydnj
This patch is based on the cmake cache files for Android checked in to the clang repo. Differential Revision: https://phabricator.services.mozilla.com/D14004 --HG-- extra : moz-landing-system : lando
This commit is contained in:
parent
53a7fef91f
commit
5292ba5641
@ -186,7 +186,7 @@ def build_one_stage(cc, cxx, asm, ld, ar, ranlib, libtool,
|
||||
src_dir, stage_dir, package_name, build_libcxx,
|
||||
osx_cross_compile, build_type, assertions,
|
||||
python_path, gcc_dir, libcxx_include_dir,
|
||||
is_final_stage=False):
|
||||
is_final_stage=False, android_targets=None):
|
||||
if not os.path.exists(stage_dir):
|
||||
os.mkdir(stage_dir)
|
||||
|
||||
@ -251,7 +251,55 @@ def build_one_stage(cc, cxx, asm, ld, ar, ranlib, libtool,
|
||||
]
|
||||
return cmake_args
|
||||
|
||||
cmake_args = cmake_base_args(
|
||||
cmake_args = []
|
||||
|
||||
if is_final_stage and android_targets:
|
||||
cmake_args += [
|
||||
"-DCOMPILER_RT_DEFAULT_TARGET_TRIPLE=%s" % android_targets.keys()[0],
|
||||
"-DLLVM_BUILTIN_TARGETS=%s" % ";".join(android_targets),
|
||||
"-DLLVM_DEFAULT_TARGET_TRIPLE=%s" % android_targets.keys()[0],
|
||||
"-DLLVM_ENABLE_LIBCXX=ON",
|
||||
"-DLLVM_LIBDIR_SUFFIX=64",
|
||||
"-DLLVM_RUNTIME_TARGETS=%s" % ";".join(android_targets),
|
||||
]
|
||||
|
||||
android_link_flags = "-fuse-ld=lld"
|
||||
|
||||
for target, cfg in android_targets.iteritems():
|
||||
sysroot_dir = cfg["ndk_sysroot"]
|
||||
android_gcc_dir = cfg["ndk_toolchain"]
|
||||
android_include_dirs = cfg["ndk_includes"]
|
||||
|
||||
android_flags = ["-isystem %s" % d for d in android_include_dirs]
|
||||
android_flags += ["--gcc-toolchain=%s" % android_gcc_dir]
|
||||
android_flags += ["-D__ANDROID_API__=16"]
|
||||
rt_c_flags = " ".join(android_flags + cc[1:])
|
||||
rt_cxx_flags = " ".join(android_flags + cxx[1:])
|
||||
rt_asm_flags = " ".join(android_flags + asm[1:])
|
||||
|
||||
cmake_args += [
|
||||
"-DBUILTINS_%s_ANDROID=1" % target,
|
||||
"-DBUILTINS_%s_CMAKE_ASM_FLAGS=%s" % (target, rt_asm_flags),
|
||||
"-DBUILTINS_%s_CMAKE_CXX_FLAGS=%s" % (target, rt_cxx_flags),
|
||||
"-DBUILTINS_%s_CMAKE_C_FLAGS=%s" % (target, rt_c_flags),
|
||||
"-DBUILTINS_%s_CMAKE_EXE_LINKER_FLAGS=%s" % (target, android_link_flags),
|
||||
"-DBUILTINS_%s_CMAKE_SHARED_LINKER_FLAGS=%s" % (target, android_link_flags),
|
||||
"-DBUILTINS_%s_CMAKE_SYSROOT=%s" % (target, sysroot_dir),
|
||||
"-DRUNTIMES_%s_CMAKE_ASM_FLAGS=%s" % (target, rt_asm_flags),
|
||||
"-DRUNTIMES_%s_CMAKE_CXX_FLAGS=%s" % (target, rt_cxx_flags),
|
||||
"-DRUNTIMES_%s_CMAKE_C_FLAGS=%s" % (target, rt_c_flags),
|
||||
"-DRUNTIMES_%s_CMAKE_EXE_LINKER_FLAGS=%s" % (target, android_link_flags),
|
||||
"-DRUNTIMES_%s_CMAKE_SHARED_LINKER_FLAGS=%s" % (target, android_link_flags),
|
||||
"-DRUNTIMES_%s_CMAKE_SYSROOT=%s" % (target, sysroot_dir),
|
||||
"-DRUNTIMES_%s_COMPILER_RT_BUILD_PROFILE=ON" % target,
|
||||
"-DRUNTIMES_%s_COMPILER_RT_BUILD_SANITIZERS=OFF" % target,
|
||||
"-DRUNTIMES_%s_COMPILER_RT_INCLUDE_TESTS=OFF" % target,
|
||||
"-DRUNTIMES_%s_LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF" % target,
|
||||
"-DRUNTIMES_%s_LLVM_INCLUDE_TESTS=OFF" % target,
|
||||
"-DRUNTIMES_%s_ANDROID_NATIVE_API_LEVEL=16" % target,
|
||||
]
|
||||
|
||||
cmake_args += cmake_base_args(
|
||||
cc, cxx, asm, ld, ar, ranlib, libtool, inst_dir)
|
||||
cmake_args += [
|
||||
src_dir
|
||||
@ -534,6 +582,15 @@ if __name__ == "__main__":
|
||||
gcc_dir = config["gcc_dir"]
|
||||
if not os.path.exists(gcc_dir):
|
||||
raise ValueError("gcc_dir must point to an existing path")
|
||||
ndk_dir = None
|
||||
android_targets = None
|
||||
if "android_targets" in config:
|
||||
android_targets = config["android_targets"]
|
||||
for attr in ("ndk_toolchain", "ndk_sysroot", "ndk_includes"):
|
||||
for target, cfg in android_targets.iteritems():
|
||||
if attr not in cfg:
|
||||
raise ValueError("must specify '%s' as a key for android target: %s" %
|
||||
(attr, target))
|
||||
if is_linux() and gcc_dir is None:
|
||||
raise ValueError("Config file needs to set gcc_dir")
|
||||
cc = get_tool(config, "cc")
|
||||
@ -570,14 +627,15 @@ if __name__ == "__main__":
|
||||
for p in config.get("patches", []):
|
||||
patch(p, source_dir)
|
||||
|
||||
compiler_rt_source_link = llvm_source_dir + "/projects/compiler-rt"
|
||||
|
||||
symlinks = [(clang_source_dir,
|
||||
llvm_source_dir + "/tools/clang"),
|
||||
(extra_source_dir,
|
||||
llvm_source_dir + "/tools/clang/tools/extra"),
|
||||
(lld_source_dir,
|
||||
llvm_source_dir + "/tools/lld"),
|
||||
(compiler_rt_source_dir,
|
||||
llvm_source_dir + "/projects/compiler-rt"),
|
||||
(compiler_rt_source_dir, compiler_rt_source_link),
|
||||
(libcxx_source_dir,
|
||||
llvm_source_dir + "/projects/libcxx"),
|
||||
(libcxxabi_source_dir,
|
||||
@ -670,6 +728,15 @@ if __name__ == "__main__":
|
||||
llvm_source_dir, stage1_dir, package_name, build_libcxx, osx_cross_compile,
|
||||
build_type, assertions, python_path, gcc_dir, libcxx_include_dir)
|
||||
|
||||
if android_targets:
|
||||
# Linking compiler-rt under "runtimes" activates LLVM_RUNTIME_TARGETS
|
||||
# and related arguments.
|
||||
symlink(compiler_rt_source_dir, llvm_source_dir + "/runtimes/compiler-rt")
|
||||
try:
|
||||
os.unlink(compiler_rt_source_link)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
if stages > 1:
|
||||
stage2_dir = build_dir + '/stage2'
|
||||
stage2_inst_dir = stage2_dir + '/' + package_name
|
||||
@ -685,7 +752,7 @@ if __name__ == "__main__":
|
||||
ar, ranlib, libtool,
|
||||
llvm_source_dir, stage2_dir, package_name, build_libcxx, osx_cross_compile,
|
||||
build_type, assertions, python_path, gcc_dir, libcxx_include_dir,
|
||||
stages == 2)
|
||||
is_final_stage=(stages == 2), android_targets=android_targets)
|
||||
|
||||
if stages > 2:
|
||||
stage3_dir = build_dir + '/stage3'
|
||||
@ -701,7 +768,7 @@ if __name__ == "__main__":
|
||||
ar, ranlib, libtool,
|
||||
llvm_source_dir, stage3_dir, package_name, build_libcxx, osx_cross_compile,
|
||||
build_type, assertions, python_path, gcc_dir, libcxx_include_dir,
|
||||
stages == 3)
|
||||
(stages == 3))
|
||||
|
||||
if build_clang_tidy:
|
||||
prune_final_dir_for_clang_tidy(os.path.join(final_stage_dir, package_name),
|
||||
|
33
build/build-clang/clang-7-android.json
Normal file
33
build/build-clang/clang-7-android.json
Normal file
@ -0,0 +1,33 @@
|
||||
{
|
||||
"llvm_revision": "342383",
|
||||
"stages": "2",
|
||||
"build_libcxx": true,
|
||||
"build_type": "Release",
|
||||
"assertions": false,
|
||||
"llvm_repo": "https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_700/final",
|
||||
"clang_repo": "https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_700/final",
|
||||
"lld_repo": "https://llvm.org/svn/llvm-project/lld/tags/RELEASE_700/final",
|
||||
"compiler_repo": "https://llvm.org/svn/llvm-project/compiler-rt/tags/RELEASE_700/final",
|
||||
"libcxx_repo": "https://llvm.org/svn/llvm-project/libcxx/tags/RELEASE_700/final",
|
||||
"libcxxabi_repo": "https://llvm.org/svn/llvm-project/libcxxabi/tags/RELEASE_700/final",
|
||||
"python_path": "/usr/bin/python2.7",
|
||||
"gcc_dir": "/builds/worker/workspace/build/src/gcc",
|
||||
"cc": "/builds/worker/workspace/build/src/gcc/bin/gcc",
|
||||
"cxx": "/builds/worker/workspace/build/src/gcc/bin/g++",
|
||||
"as": "/builds/worker/workspace/build/src/gcc/bin/gcc",
|
||||
"android_targets": {
|
||||
"armv7-linux-android": {
|
||||
"ndk_toolchain": "/builds/worker/workspace/build/src/android-ndk/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64",
|
||||
"ndk_sysroot": "/builds/worker/workspace/build/src/android-ndk/platforms/android-16/arch-arm",
|
||||
"ndk_includes": [
|
||||
"/builds/worker/workspace/build/src/android-ndk/sysroot/usr/include/arm-linux-androideabi",
|
||||
"/builds/worker/workspace/build/src/android-ndk/sysroot/usr/include"
|
||||
]
|
||||
}
|
||||
},
|
||||
"patches": [
|
||||
"static-llvm-symbolizer.patch",
|
||||
"find_symbolizer_linux.patch",
|
||||
"rename_gcov_flush_.patch"
|
||||
]
|
||||
}
|
@ -322,7 +322,7 @@ android-api-16/opt:
|
||||
- android-gradle-dependencies
|
||||
- android-ndk-linux
|
||||
- android-sdk-linux
|
||||
- linux64-clang
|
||||
- linux64-clang-android-cross
|
||||
- linux64-rust-android
|
||||
- linux64-rust-size
|
||||
- linux64-cbindgen
|
||||
|
@ -97,6 +97,29 @@ linux64-clang-trunk-mingw-x64:
|
||||
toolchains:
|
||||
- linux64-gcc-4.9
|
||||
|
||||
linux64-clang-7-android-cross:
|
||||
description: "Clang 7 toolchain build"
|
||||
treeherder:
|
||||
kind: build
|
||||
platform: toolchains/opt
|
||||
symbol: TL(clang7-android)
|
||||
tier: 1
|
||||
worker-type: aws-provisioner-v1/gecko-{level}-b-linux-xlarge
|
||||
worker:
|
||||
max-run-time: 7200
|
||||
run:
|
||||
using: toolchain-script
|
||||
script: build-clang-7-android.sh
|
||||
resources:
|
||||
- 'build/build-clang/build-clang.py'
|
||||
- 'build/build-clang/clang-7-android.json'
|
||||
- 'taskcluster/scripts/misc/tooltool-download.sh'
|
||||
toolchain-alias: linux64-clang-android-cross
|
||||
toolchain-artifact: public/build/clang.tar.xz
|
||||
toolchains:
|
||||
- linux64-gcc-4.9
|
||||
- linux64-android-ndk-linux-repack
|
||||
|
||||
linux64-clang-7-macosx-cross:
|
||||
description: "Clang 7 toolchain build with MacOS Compiler RT libs"
|
||||
treeherder:
|
||||
|
26
taskcluster/scripts/misc/build-clang-7-android.sh
Executable file
26
taskcluster/scripts/misc/build-clang-7-android.sh
Executable file
@ -0,0 +1,26 @@
|
||||
#!/bin/bash
|
||||
set -x -e -v
|
||||
|
||||
# This script is for building clang on a Linux host with android compiler rt
|
||||
# libs.
|
||||
|
||||
WORKSPACE=$HOME/workspace
|
||||
HOME_DIR=$WORKSPACE/build
|
||||
UPLOAD_DIR=$HOME/artifacts
|
||||
|
||||
cd $HOME_DIR/src
|
||||
|
||||
. taskcluster/scripts/misc/tooltool-download.sh
|
||||
|
||||
# gets a bit too verbose here
|
||||
set +x
|
||||
|
||||
cd build/build-clang
|
||||
# |mach python| sets up a virtualenv for us!
|
||||
../../mach python ./build-clang.py -c clang-7-android.json
|
||||
|
||||
set -x
|
||||
|
||||
# Put a tarball in the artifacts dir
|
||||
mkdir -p $UPLOAD_DIR
|
||||
cp clang.tar.* $UPLOAD_DIR
|
Loading…
Reference in New Issue
Block a user