Skip to content

Instantly share code, notes, and snippets.

@lberki
Created December 18, 2015 15:53
Show Gist options
  • Save lberki/d49d42f7abe9369ef305 to your computer and use it in GitHub Desktop.
Save lberki/d49d42f7abe9369ef305 to your computer and use it in GitHub Desktop.
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