Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added external_include paths to system includes switch #6284

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions aspect/intellij_info_impl.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -472,6 +472,7 @@ def collect_cpp_info(target, ctx, semantics, ide_info, ide_info_file, output_gro
transitive_system_include_directory = compilation_context.system_includes.to_list(),
include_prefix = getattr(ctx.rule.attr, "include_prefix", None),
strip_include_prefix = getattr(ctx.rule.attr, "strip_include_prefix", None),
external_includes = getattr(compilation_context, "external_includes", depset()).to_list(),
)
ide_info["c_ide_info"] = c_info
resolve_files = compilation_context.headers
Expand Down
35 changes: 30 additions & 5 deletions base/src/com/google/idea/blaze/base/ideinfo/CIdeInfo.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ public final class CIdeInfo implements ProtoWrapper<IntellijIdeInfo.CIdeInfo> {
private final String includePrefix;
private final String stripIncludePrefix;

private final ImmutableList<ExecutionRootPath> externalIncludes;

private CIdeInfo(
ImmutableList<ArtifactLocation> sources,
ImmutableList<ArtifactLocation> headers,
Expand All @@ -48,7 +50,8 @@ private CIdeInfo(
ImmutableList<String> transitiveDefines,
ImmutableList<ExecutionRootPath> transitiveSystemIncludeDirectories,
String includePrefix,
String stripIncludePrefix) {
String stripIncludePrefix,
ImmutableList<ExecutionRootPath> externalIncludes) {
this.sources = sources;
this.headers = headers;
this.textualHeaders = textualHeaders;
Expand All @@ -59,6 +62,7 @@ private CIdeInfo(
this.transitiveSystemIncludeDirectories = transitiveSystemIncludeDirectories;
this.includePrefix = includePrefix;
this.stripIncludePrefix = stripIncludePrefix;
this.externalIncludes = externalIncludes;
}

static CIdeInfo fromProto(IntellijIdeInfo.CIdeInfo proto) {
Expand All @@ -74,7 +78,9 @@ static CIdeInfo fromProto(IntellijIdeInfo.CIdeInfo proto) {
ProtoWrapper.map(
proto.getTransitiveSystemIncludeDirectoryList(), ExecutionRootPath::fromProto),
proto.getIncludePrefix(),
proto.getStripIncludePrefix());
proto.getStripIncludePrefix(),
ProtoWrapper.map(proto.getExternalIncludesList(), ExecutionRootPath::fromProto)
);
}

@Override
Expand All @@ -90,6 +96,7 @@ public IntellijIdeInfo.CIdeInfo toProto() {
.addAllTransitiveDefine(transitiveDefines)
.addAllTransitiveSystemIncludeDirectory(
ProtoWrapper.mapToProtos(transitiveSystemIncludeDirectories))
.addAllExternalIncludes(ProtoWrapper.mapToProtos(externalIncludes))
.build();
}

Expand Down Expand Up @@ -133,6 +140,10 @@ public String getStripIncludePrefix() {
return stripIncludePrefix;
}

public ImmutableList<ExecutionRootPath> getExternalIncludes() {
return externalIncludes;
}

public static Builder builder() {
return new Builder();
}
Expand All @@ -155,6 +166,8 @@ public static class Builder {
private String includePrefix = "";
private String stripIncludePrefix = "";

private final ImmutableList.Builder<ExecutionRootPath> externalIncludes = ImmutableList.builder();

@CanIgnoreReturnValue
public Builder addSources(Iterable<ArtifactLocation> sources) {
this.sources.addAll(sources);
Expand Down Expand Up @@ -236,6 +249,12 @@ public Builder setStripIncludePrefix(String stripIncludePrefix) {
return this;
}

@CanIgnoreReturnValue
public Builder setExternalIncludes(Iterable<ExecutionRootPath> externalIncludes) {
this.externalIncludes.addAll(externalIncludes);
return this;
}

public CIdeInfo build() {
return new CIdeInfo(
sources.build(),
Expand All @@ -247,7 +266,8 @@ public CIdeInfo build() {
transitiveDefines.build(),
transitiveSystemIncludeDirectories.build(),
includePrefix,
stripIncludePrefix);
stripIncludePrefix,
externalIncludes.build());
}
}

Expand Down Expand Up @@ -279,6 +299,9 @@ public String toString() {
+ " transitiveSystemIncludeDirectories="
+ getTransitiveSystemIncludeDirectories()
+ "\n"
+ " externalIncludes"
+ getExternalIncludes()
+ "\n"
+ '}';
}

Expand All @@ -300,7 +323,8 @@ public boolean equals(Object o) {
transitiveQuoteIncludeDirectories, cIdeInfo.transitiveQuoteIncludeDirectories)
&& Objects.equals(transitiveDefines, cIdeInfo.transitiveDefines)
&& Objects.equals(
transitiveSystemIncludeDirectories, cIdeInfo.transitiveSystemIncludeDirectories);
transitiveSystemIncludeDirectories, cIdeInfo.transitiveSystemIncludeDirectories)
&& Objects.equals(externalIncludes, cIdeInfo.externalIncludes);
}

@Override
Expand All @@ -313,6 +337,7 @@ public int hashCode() {
transitiveIncludeDirectories,
transitiveQuoteIncludeDirectories,
transitiveDefines,
transitiveSystemIncludeDirectories);
transitiveSystemIncludeDirectories,
externalIncludes);
}
}
6 changes: 4 additions & 2 deletions cpp/src/com/google/idea/blaze/cpp/BlazeCWorkspace.java
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,6 @@
import com.jetbrains.cidr.lang.workspace.compiler.CompilerInfoCache.Session;
import com.jetbrains.cidr.lang.workspace.compiler.OCCompilerKind;
import com.jetbrains.cidr.lang.workspace.compiler.TempFilesPool;

import java.io.File;
import java.nio.file.Path;
import java.util.Collection;
Expand Down Expand Up @@ -251,7 +250,10 @@ private OCWorkspaceImpl.ModifiableModel calculateConfigurations(
// Note: We would ideally use -isystem here, but it interacts badly with the switches
// that get built by ClangUtils::addIncludeDirectories (it uses -I for system libraries).
ImmutableList<String> isystemOptionIncludeDirectories =
targetIdeInfo.getcIdeInfo().getTransitiveSystemIncludeDirectories().stream()
Stream.concat(
targetIdeInfo.getcIdeInfo().getTransitiveSystemIncludeDirectories().stream(),
targetIdeInfo.getcIdeInfo().getExternalIncludes().stream()
)
.flatMap(resolver)
.filter(configResolveData::isValidHeaderRoot)
.map(file -> "-I" + file.getAbsolutePath())
Expand Down
1 change: 1 addition & 0 deletions cpp/src/com/google/idea/blaze/cpp/HeaderRootTrimmer.java
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,7 @@ private static Set<ExecutionRootPath> collectExecutionRootPaths(
paths.addAll(target.getcIdeInfo().getTransitiveSystemIncludeDirectories());
paths.addAll(target.getcIdeInfo().getTransitiveIncludeDirectories());
paths.addAll(target.getcIdeInfo().getTransitiveQuoteIncludeDirectories());
paths.addAll(target.getcIdeInfo().getExternalIncludes());
}
}
Set<CToolchainIdeInfo> toolchains = new LinkedHashSet<>(toolchainLookupMap.values());
Expand Down
6 changes: 6 additions & 0 deletions examples/cpp/external_includes/external/BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
cc_library(
name = "simple",
srcs = ["simple.cc"],
hdrs = ["simple.h"],
visibility = ["//visibility:public"],
)
Empty file.
7 changes: 7 additions & 0 deletions examples/cpp/external_includes/external/simple.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#include "simple.h"

#include <stdio.h>

void simple_header_fun() {
printf("Hello there!\n");
}
6 changes: 6 additions & 0 deletions examples/cpp/external_includes/external/simple.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#ifndef SIMPLE_H
#define SIMPLE_H

void simple_header_fun();

#endif
1 change: 1 addition & 0 deletions examples/cpp/external_includes/project/.bazelrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
build --features=external_include_paths
5 changes: 5 additions & 0 deletions examples/cpp/external_includes/project/BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
cc_binary(
name = "simple",
srcs = ["simple.cc"],
deps = ["@lib//:simple"],
)
4 changes: 4 additions & 0 deletions examples/cpp/external_includes/project/WORKSPACE
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
local_repository(
name = "lib",
path = "../external",
)
6 changes: 6 additions & 0 deletions examples/cpp/external_includes/project/simple.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#include <simple.h>

int main() {
simple_header_fun();
return 0;
}
2 changes: 2 additions & 0 deletions proto/intellij_ide_info.proto
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@ message CIdeInfo {

string include_prefix = 10;
string strip_include_prefix = 11;

repeated string external_includes = 12;
}

message AndroidIdeInfo {
Expand Down
Loading