Created
December 18, 2015 15:53
-
-
Save lberki/d49d42f7abe9369ef305 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryFunction.java | |
index ed8a3c7..625a244 100644 | |
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryFunction.java | |
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryFunction.java | |
@@ -77,6 +77,12 @@ public class AndroidNdkRepositoryFunction extends RepositoryFunction { | |
throws SkyFunctionException { | |
prepareLocalRepositorySymlinkTree(rule, outputDirectory); | |
PathFragment pathFragment = getTargetPath(rule); | |
+ FileValue resolvedNdkPath = (FileValue) env.getValue(FileValue.key( | |
+ RootedPath.toRootedPath(getWorkspace().getFileSystem().getRootDirectory(), pathFragment.toRelative()))); | |
+ if (env.valuesMissing()) { | |
+ return null; | |
+ } | |
+ | |
Path ndkSymlinkTreeDirectory = outputDirectory.getRelative("ndk"); | |
try { | |
ndkSymlinkTreeDirectory.createDirectory(); | |
@@ -103,7 +109,8 @@ public class AndroidNdkRepositoryFunction extends RepositoryFunction { | |
try { | |
String hostPlatform = AndroidNdkCrosstools.getHostPlatform(ndkRelease); | |
- NdkPaths ndkPaths = new NdkPaths(ruleName, hostPlatform, apiLevel); | |
+ NdkPaths ndkPaths = new NdkPaths(ruleName, hostPlatform, apiLevel, | |
+ resolvedNdkPath.realRootedPath().asPath().getPathString()); | |
for (StlImpl stlImpl : StlImpls.get(ndkPaths)) { | |
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/AndroidNdkCrosstools.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/AndroidNdkCrosstools.java | |
index 00ab59e..0bf2e40 100644 | |
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/AndroidNdkCrosstools.java | |
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/AndroidNdkCrosstools.java | |
@@ -119,9 +119,6 @@ public class AndroidNdkCrosstools { | |
.setAbiVersion(toolchainBuilder.getTargetCpu()) | |
.setAbiLibcVersion("local"); | |
- // builtin_sysroot is set individually on each toolchain. | |
- toolchainBuilder.addCxxBuiltinIncludeDirectory("%sysroot%/usr/include"); | |
- | |
toolchains.add(toolchainBuilder.build()); | |
} | |
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/ArmCrosstools.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/ArmCrosstools.java | |
index 49391d4..2440b84 100644 | |
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/ArmCrosstools.java | |
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/ArmCrosstools.java | |
@@ -124,7 +124,7 @@ class ArmCrosstools { | |
.addCompilerFlag("-fno-omit-frame-pointer") | |
.addCompilerFlag("-fno-strict-aliasing")); | |
- ndkPaths.addToolchainIncludePaths(toolchain, toolchainName, targetPlatform, "4.9"); | |
+ ndkPaths.addToolchainIncludePaths(toolchain, toolchainName, targetPlatform, "4.9", "arm64"); | |
stlImpl.addStlImpl(toolchain, "4.9"); | |
return toolchain; | |
} | |
@@ -183,7 +183,7 @@ class ArmCrosstools { | |
.addCompilerFlag("-fno-omit-frame-pointer") | |
.addCompilerFlag("-fno-strict-aliasing")); | |
- ndkPaths.addToolchainIncludePaths(toolchain, toolchainName, targetPlatform, "4.9"); | |
+ ndkPaths.addToolchainIncludePaths(toolchain, toolchainName, targetPlatform, "4.9", "arm64"); | |
stlImpl.addStlImpl(toolchain, "4.9"); | |
return toolchain; | |
} | |
@@ -305,7 +305,7 @@ class ArmCrosstools { | |
.addCompilerFlag("-fno-strict-aliasing")); | |
} | |
- ndkPaths.addToolchainIncludePaths(toolchain, toolchainName, targetPlatform, gccVersion); | |
+ ndkPaths.addToolchainIncludePaths(toolchain, toolchainName, targetPlatform, gccVersion, "arm"); | |
return toolchain; | |
} | |
@@ -437,7 +437,7 @@ class ArmCrosstools { | |
.addCompilerFlag("-fno-strict-aliasing")); | |
} | |
- ndkPaths.addToolchainIncludePaths(toolchain, toolchainName, targetPlatform, "4.8"); | |
+ ndkPaths.addToolchainIncludePaths(toolchain, toolchainName, targetPlatform, "4.8", "arm"); | |
return toolchain; | |
} | |
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/MipsCrosstools.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/MipsCrosstools.java | |
index e133ec3..c4c5edf 100644 | |
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/MipsCrosstools.java | |
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/MipsCrosstools.java | |
@@ -81,7 +81,7 @@ class MipsCrosstools { | |
List<CToolchain.Builder> toolchains = toolchainsListBuilder.build(); | |
ndkPaths.addToolchainIncludePaths( | |
- toolchains, "mips64el-linux-android-4.9", "mips64el-linux-android", "4.9"); | |
+ toolchains, "mips64el-linux-android-4.9", "mips64el-linux-android", "4.9", "mips64"); | |
stlImpl.addStlImpl(toolchains, "4.9"); | |
return toolchains; | |
} | |
@@ -114,7 +114,7 @@ class MipsCrosstools { | |
.setBuiltinSysroot(ndkPaths.createBuiltinSysroot("mips")); | |
ndkPaths.addToolchainIncludePaths( | |
- mipsClang, "mipsel-linux-android-4.8", "mipsel-linux-android", "4.8"); | |
+ mipsClang, "mipsel-linux-android-4.8", "mipsel-linux-android", "4.8", "mips"); | |
stlImpl.addStlImpl(mipsClang, "4.8"); | |
toolchainsListBuilder.add(mipsClang); | |
} | |
@@ -138,7 +138,7 @@ class MipsCrosstools { | |
.setBuiltinSysroot(ndkPaths.createBuiltinSysroot("mips")); | |
ndkPaths.addToolchainIncludePaths( | |
- toolchain, "mipsel-linux-android-" + gccVersion, "mipsel-linux-android", gccVersion); | |
+ toolchain, "mipsel-linux-android-" + gccVersion, "mipsel-linux-android", gccVersion, "mips"); | |
stlImpl.addStlImpl(toolchain, gccVersion); | |
return toolchain; | |
} | |
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/NdkPaths.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/NdkPaths.java | |
index 40d9861..fc2e66b 100644 | |
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/NdkPaths.java | |
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/NdkPaths.java | |
@@ -39,11 +39,13 @@ public class NdkPaths { | |
private final String repositoryName, hostPlatform; | |
private final ApiLevel apiLevel; | |
+ private final String resolvedNdkPath; | |
- public NdkPaths(String repositoryName, String hostPlatform, ApiLevel apiLevel) { | |
+ public NdkPaths(String repositoryName, String hostPlatform, ApiLevel apiLevel, String resolvedNdkPath) { | |
this.repositoryName = repositoryName; | |
this.hostPlatform = hostPlatform; | |
this.apiLevel = apiLevel; | |
+ this.resolvedNdkPath = resolvedNdkPath; | |
} | |
ImmutableList<ToolPath> createToolpaths(String toolchainName, String targetPlatform, | |
@@ -120,10 +122,11 @@ public class NdkPaths { | |
List<CToolchain.Builder> toolchains, | |
String toolchainName, | |
String targetPlatform, | |
- String gccVersion) { | |
+ String gccVersion, | |
+ String targetCpu) { | |
for (CToolchain.Builder toolchain : toolchains) { | |
- addToolchainIncludePaths(toolchain, toolchainName, targetPlatform, gccVersion); | |
+ addToolchainIncludePaths(toolchain, toolchainName, targetPlatform, gccVersion, targetCpu); | |
} | |
} | |
@@ -131,13 +134,19 @@ public class NdkPaths { | |
CToolchain.Builder toolchain, | |
String toolchainName, | |
String targetPlatform, | |
- String gccVersion) { | |
+ String gccVersion, | |
+ String targetCpu) { | |
- List<String> includePaths = | |
- this.createToolchainIncludePaths(toolchainName, targetPlatform, gccVersion); | |
- | |
- for (String includePath : includePaths) { | |
+ List<String> includePaths = this.createToolchainIncludePaths(toolchainName, targetPlatform, gccVersion); | |
+ | |
+ for (String includePath : createFullIncludePaths(includePaths)) { | |
toolchain.addCxxBuiltinIncludeDirectory(includePath); | |
+ } | |
+ | |
+ toolchain.addAllCxxBuiltinIncludeDirectory(createFullIncludePaths( | |
+ ImmutableList.of(createNakedSysroot(targetCpu)))); | |
+ | |
+ for (String includePath : createIncludePaths(includePaths)) { | |
toolchain.addUnfilteredCxxFlag("-isystem"); | |
toolchain.addUnfilteredCxxFlag(includePath); | |
} | |
@@ -152,7 +161,7 @@ public class NdkPaths { | |
toolchainName, targetPlatform, gccVersion, "include")); | |
includePaths.add(createToolchainIncludePath( | |
toolchainName, targetPlatform, gccVersion, "include-fixed")); | |
- | |
+ | |
return includePaths.build(); | |
} | |
@@ -160,7 +169,7 @@ public class NdkPaths { | |
String toolchainName, String targetPlatform, String gccVersion, String includeFolderName) { | |
String toolchainIncludePathTemplate = | |
- "external/%repositoryName%/ndk/toolchains/%toolchainName%/prebuilt/%hostPlatform%" | |
+ "toolchains/%toolchainName%/prebuilt/%hostPlatform%" | |
+ "/lib/gcc/%targetPlatform%/%gccVersion%/%includeFolderName%"; | |
return toolchainIncludePathTemplate | |
@@ -172,24 +181,44 @@ public class NdkPaths { | |
.replace("%includeFolderName%", includeFolderName); | |
} | |
+ String createNakedSysroot(String targetCpu) { | |
+ String correctedApiLevel = apiLevel.getCpuCorrectedApiLevel(targetCpu); | |
+ String androidPlatformIncludePathTemplate = "platforms/android-%apiLevel%/arch-%arch%"; | |
+ | |
+ return androidPlatformIncludePathTemplate | |
+ .replace("%repositoryName%", repositoryName) | |
+ .replace("%apiLevel%", correctedApiLevel) | |
+ .replace("%arch%", targetCpu); | |
+ } | |
+ | |
String createBuiltinSysroot(String targetCpu) { | |
+ return "external/" + repositoryName + "/ndk/" + createNakedSysroot(targetCpu); | |
+ } | |
- String correctedApiLevel = apiLevel.getCpuCorrectedApiLevel(targetCpu); | |
+ ImmutableList<String> createFullIncludePaths(Iterable<String> inputPaths) { | |
+ ImmutableList.Builder<String> result = ImmutableList.builder(); | |
+ for (String inputPath : inputPaths) { | |
+ result.add("external/" + repositoryName + "/ndk/" + inputPath); | |
+ result.add(resolvedNdkPath + "/" + inputPath); | |
+ } | |
- String androidPlatformIncludePathTemplate = | |
- "external/%repositoryName%/ndk/platforms/android-%apiLevel%/arch-%arch%"; | |
+ return result.build(); | |
+ } | |
- return androidPlatformIncludePathTemplate | |
- .replace("%repositoryName%", repositoryName) | |
- .replace("%apiLevel%", correctedApiLevel) | |
- .replace("%arch%", targetCpu); | |
+ ImmutableList<String> createIncludePaths(Iterable<String> inputPaths) { | |
+ ImmutableList.Builder<String> result = ImmutableList.builder(); | |
+ for (String inputPath : inputPaths) { | |
+ result.add("external/" + repositoryName + "/ndk/" + inputPath); | |
+ } | |
+ | |
+ return result.build(); | |
} | |
ImmutableList<String> createGnuLibstdcIncludePaths(String gccVersion, String targetCpu) { | |
String cpuNoThumb = targetCpu.replaceAll("-thumb$", ""); | |
- String prefix = "external/%repositoryName%/ndk/sources/cxx-stl/gnu-libstdc++/%gccVersion%/"; | |
+ String prefix = "sources/cxx-stl/gnu-libstdc++/%gccVersion%/"; | |
List<String> includePathTemplates = Arrays.asList( | |
prefix + "include", | |
prefix + "libs/%targetCpu%/include", | |
@@ -199,7 +228,6 @@ public class NdkPaths { | |
for (String template : includePathTemplates) { | |
includePaths.add( | |
template | |
- .replace("%repositoryName%", repositoryName) | |
.replace("%gccVersion%", gccVersion) | |
.replace("%targetCpu%", cpuNoThumb)); | |
} | |
@@ -208,17 +236,13 @@ public class NdkPaths { | |
ImmutableList<String> createStlportIncludePaths() { | |
- String prefix = | |
- "external/%repositoryName%/ndk/sources/cxx-stl/" | |
- .replace("%repositoryName%", repositoryName); | |
- | |
+ String prefix = "sources/cxx-stl/"; | |
return ImmutableList.of(prefix + "stlport/stlport", prefix + "gabi++/include"); | |
} | |
ImmutableList<String> createLibcxxIncludePaths() { | |
- String prefix = | |
- "external/%repositoryName%/ndk/sources/".replace("%repositoryName%", repositoryName); | |
+ String prefix = "sources/".replace("%repositoryName%", repositoryName); | |
return ImmutableList.of( | |
prefix + "cxx-stl/llvm-libc++/libcxx/include", | |
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/StlImpls.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/StlImpls.java | |
index 90cb21f..e1f3926 100644 | |
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/StlImpls.java | |
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/StlImpls.java | |
@@ -38,8 +38,9 @@ public final class StlImpls { | |
@Override | |
public void addStlImpl(Builder toolchain, String gccVersion) { | |
addBaseStlImpl(toolchain, gccVersion); | |
- toolchain.addAllUnfilteredCxxFlag(createIncludeFlags( | |
- ndkPaths.createGnuLibstdcIncludePaths(gccVersion, toolchain.getTargetCpu()))); | |
+ ImmutableList<String> includePaths = ndkPaths.createGnuLibstdcIncludePaths(gccVersion, toolchain.getTargetCpu()); | |
+ toolchain.addAllCxxBuiltinIncludeDirectory(ndkPaths.createFullIncludePaths(includePaths)); | |
+ toolchain.addAllUnfilteredCxxFlag( createIncludeFlags(ndkPaths.createIncludePaths(includePaths))); | |
} | |
} | |
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/X86Crosstools.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/X86Crosstools.java | |
index 96807f3..f4e8b39 100644 | |
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/X86Crosstools.java | |
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/X86Crosstools.java | |
@@ -62,7 +62,7 @@ class X86Crosstools { | |
.setBuiltinSysroot(ndkPaths.createBuiltinSysroot("x86")); | |
- ndkPaths.addToolchainIncludePaths(x86Clang, "x86-4.8", "i686-linux-android", "4.8"); | |
+ ndkPaths.addToolchainIncludePaths(x86Clang, "x86-4.8", "i686-linux-android", "4.8", "x86"); | |
stlImpl.addStlImpl(x86Clang, "4.8"); | |
toolchains.add(x86Clang); | |
} | |
@@ -83,7 +83,7 @@ class X86Crosstools { | |
.addCompilerFlag("-fstack-protector-strong"); | |
- ndkPaths.addToolchainIncludePaths(x8664, "x86_64-4.9", "x86_64-linux-android", "4.9"); | |
+ ndkPaths.addToolchainIncludePaths(x8664, "x86_64-4.9", "x86_64-linux-android", "4.9", "x86_64"); | |
stlImpl.addStlImpl(x8664, "4.9"); | |
toolchains.add(x8664); | |
@@ -100,7 +100,7 @@ class X86Crosstools { | |
.setBuiltinSysroot(ndkPaths.createBuiltinSysroot("x86_64")); | |
- ndkPaths.addToolchainIncludePaths(x8664Clang, "x86_64-4.9", "x86_64-linux-android", "4.9"); | |
+ ndkPaths.addToolchainIncludePaths(x8664Clang, "x86_64-4.9", "x86_64-linux-android", "4.9", "x86_64"); | |
stlImpl.addStlImpl(x8664Clang, "4.9"); | |
toolchains.add(x8664Clang); | |
} | |
@@ -131,7 +131,7 @@ class X86Crosstools { | |
.addCompilerFlag(stackProtrectorFlag); | |
ndkPaths.addToolchainIncludePaths( | |
- toolchain, "x86-" + gccVersion, "i686-linux-android", gccVersion); | |
+ toolchain, "x86-" + gccVersion, "i686-linux-android", gccVersion, "x86"); | |
stlImpl.addStlImpl(toolchain, gccVersion); | |
return toolchain; | |
} | |
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/AndroidNdkCrosstoolsTest.java b/src/test/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/AndroidNdkCrosstoolsTest.java | |
index 9556b6e..191f11f 100644 | |
--- a/src/test/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/AndroidNdkCrosstoolsTest.java | |
+++ b/src/test/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/AndroidNdkCrosstoolsTest.java | |
@@ -66,7 +66,8 @@ public class AndroidNdkCrosstoolsTest { | |
NdkPaths ndkPaths = new NdkPaths( | |
REPOSITORY_NAME, | |
hostPlatform, | |
- API_LEVEL); | |
+ API_LEVEL, | |
+ "/resolved-ndk"); | |
ImmutableList.Builder<CrosstoolRelease> crosstools = ImmutableList.builder(); | |
ImmutableMap.Builder<String, String> stlFilegroups = ImmutableMap.builder(); | |
diff --git a/tools/jdk/BUILD b/tools/jdk/BUILD | |
index 75edee6..91b92f1 100644 | |
--- a/tools/jdk/BUILD | |
+++ b/tools/jdk/BUILD | |
@@ -90,6 +90,7 @@ java_toolchain( | |
name = "toolchain", | |
encoding = "UTF-8", | |
jvm_opts = ["-client"], | |
+ misc = ["-g:source,vars,lines"], | |
source_version = "8", | |
target_version = "8", | |
) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment