use of org.gradle.language.cpp.tasks.CppCompile in project gradle by gradle.
the class CppBasePlugin method apply.
@Override
public void apply(final Project project) {
project.getPluginManager().apply(NativeBasePlugin.class);
project.getPluginManager().apply(StandardToolChainsPlugin.class);
final TaskContainer tasks = project.getTasks();
final DirectoryProperty buildDirectory = project.getLayout().getBuildDirectory();
// Create the tasks for each C++ binary that is registered
project.getComponents().withType(DefaultCppBinary.class, binary -> {
final Names names = binary.getNames();
String language = "cpp";
TaskProvider<CppCompile> compile = tasks.register(names.getCompileTaskName(language), CppCompile.class, task -> {
final Callable<List<File>> systemIncludes = () -> binary.getPlatformToolProvider().getSystemLibraries(ToolType.CPP_COMPILER).getIncludeDirs();
task.includes(binary.getCompileIncludePath());
task.getSystemIncludes().from(systemIncludes);
task.source(binary.getCppSource());
if (binary.isDebuggable()) {
task.setDebuggable(true);
}
if (binary.isOptimized()) {
task.setOptimized(true);
}
task.getTargetPlatform().set(binary.getNativePlatform());
task.getToolChain().set(binary.getToolChain());
task.getObjectFileDir().set(buildDirectory.dir("obj/" + names.getDirName()));
if (binary instanceof CppSharedLibrary) {
task.setPositionIndependentCode(true);
}
});
binary.getObjectsDir().set(compile.flatMap(task -> task.getObjectFileDir()));
binary.getCompileTask().set(compile);
});
project.getComponents().withType(ProductionCppComponent.class, component -> {
project.afterEvaluate(p -> {
DefaultCppComponent componentInternal = (DefaultCppComponent) component;
publicationRegistry.registerPublication((ProjectInternal) project, new NativeProjectPublication(componentInternal.getDisplayName(), new SwiftPmTarget(component.getBaseName().get())));
});
});
}
use of org.gradle.language.cpp.tasks.CppCompile in project gradle by gradle.
the class CppBasePlugin method apply.
@Override
public void apply(final ProjectInternal project) {
project.getPluginManager().apply(NativeBasePlugin.class);
project.getPluginManager().apply(StandardToolChainsPlugin.class);
final TaskContainerInternal tasks = project.getTasks();
final DirectoryProperty buildDirectory = project.getLayout().getBuildDirectory();
// Enable the use of Gradle metadata. This is a temporary opt-in switch until available by default
project.getGradle().getServices().get(FeaturePreviews.class).enableFeature(GRADLE_METADATA);
// Create the tasks for each C++ binary that is registered
project.getComponents().withType(DefaultCppBinary.class, new Action<DefaultCppBinary>() {
@Override
public void execute(final DefaultCppBinary binary) {
final Names names = binary.getNames();
String language = "cpp";
final NativePlatform currentPlatform = binary.getTargetPlatform();
// TODO - make this lazy
final NativeToolChainInternal toolChain = binary.getToolChain();
Callable<List<File>> systemIncludes = new Callable<List<File>>() {
@Override
public List<File> call() {
PlatformToolProvider platformToolProvider = binary.getPlatformToolProvider();
return platformToolProvider.getSystemLibraries(ToolType.CPP_COMPILER).getIncludeDirs();
}
};
CppCompile compile = tasks.create(names.getCompileTaskName(language), CppCompile.class);
compile.includes(binary.getCompileIncludePath());
compile.includes(systemIncludes);
compile.source(binary.getCppSource());
if (binary.isDebuggable()) {
compile.setDebuggable(true);
}
if (binary.isOptimized()) {
compile.setOptimized(true);
}
compile.getTargetPlatform().set(currentPlatform);
compile.getToolChain().set(toolChain);
compile.getObjectFileDir().set(buildDirectory.dir("obj/" + names.getDirName()));
binary.getObjectsDir().set(compile.getObjectFileDir());
binary.getCompileTask().set(compile);
}
});
project.getComponents().withType(CppSharedLibrary.class, new Action<CppSharedLibrary>() {
@Override
public void execute(CppSharedLibrary library) {
library.getCompileTask().get().setPositionIndependentCode(true);
}
});
project.getComponents().withType(ProductionCppComponent.class, new Action<ProductionCppComponent>() {
@Override
public void execute(final ProductionCppComponent component) {
project.afterEvaluate(new Action<Project>() {
@Override
public void execute(Project project) {
DefaultCppComponent componentInternal = (DefaultCppComponent) component;
publicationRegistry.registerPublication(project.getPath(), new DefaultProjectPublication(componentInternal.getDisplayName(), new SwiftPmTarget(component.getBaseName().get()), false));
}
});
}
});
}
use of org.gradle.language.cpp.tasks.CppCompile in project gradle by gradle.
the class CppModelBuilder method binariesFor.
private List<DefaultCppBinaryModel> binariesFor(CppComponent component, Iterable<File> headerDirs, DefaultProjectIdentifier projectIdentifier, CompilerOutputFileNamingSchemeFactory namingSchemeFactory) {
List<File> headerDirsCopy = ImmutableList.copyOf(headerDirs);
List<DefaultCppBinaryModel> binaries = new ArrayList<DefaultCppBinaryModel>();
for (CppBinary binary : component.getBinaries().get()) {
DefaultCppBinary cppBinary = (DefaultCppBinary) binary;
PlatformToolProvider platformToolProvider = cppBinary.getPlatformToolProvider();
CppCompile compileTask = binary.getCompileTask().get();
List<DefaultSourceFile> sourceFiles = sourceFiles(namingSchemeFactory, platformToolProvider, compileTask.getObjectFileDir().get().getAsFile(), binary.getCppSource().getFiles());
List<File> systemIncludes = ImmutableList.copyOf(compileTask.getSystemIncludes().getFiles());
List<File> userIncludes = ImmutableList.copyOf(compileTask.getIncludes().getFiles());
List<DefaultMacroDirective> macroDefines = macroDefines(compileTask);
List<String> additionalArgs = args(compileTask.getCompilerArgs().get());
CommandLineToolSearchResult compilerLookup = platformToolProvider.locateTool(ToolType.CPP_COMPILER);
File compilerExe = compilerLookup.isAvailable() ? compilerLookup.getTool() : null;
LaunchableGradleTask compileTaskModel = ToolingModelBuilderSupport.buildFromTask(new LaunchableGradleTask(), projectIdentifier, compileTask);
DefaultCompilationDetails compilationDetails = new DefaultCompilationDetails(compileTaskModel, compilerExe, compileTask.getObjectFileDir().get().getAsFile(), sourceFiles, headerDirsCopy, systemIncludes, userIncludes, macroDefines, additionalArgs);
if (binary instanceof CppExecutable || binary instanceof CppTestExecutable) {
ComponentWithExecutable componentWithExecutable = (ComponentWithExecutable) binary;
LinkExecutable linkTask = componentWithExecutable.getLinkTask().get();
LaunchableGradleTask linkTaskModel = ToolingModelBuilderSupport.buildFromTask(new LaunchableGradleTask(), projectIdentifier, componentWithExecutable.getExecutableFileProducer().get());
DefaultLinkageDetails linkageDetails = new DefaultLinkageDetails(linkTaskModel, componentWithExecutable.getExecutableFile().get().getAsFile(), args(linkTask.getLinkerArgs().get()));
binaries.add(new DefaultCppExecutableModel(binary.getName(), cppBinary.getIdentity().getName(), binary.getBaseName().get(), compilationDetails, linkageDetails));
} else if (binary instanceof CppSharedLibrary) {
CppSharedLibrary sharedLibrary = (CppSharedLibrary) binary;
LinkSharedLibrary linkTask = sharedLibrary.getLinkTask().get();
LaunchableGradleTask linkTaskModel = ToolingModelBuilderSupport.buildFromTask(new LaunchableGradleTask(), projectIdentifier, sharedLibrary.getLinkFileProducer().get());
DefaultLinkageDetails linkageDetails = new DefaultLinkageDetails(linkTaskModel, sharedLibrary.getLinkFile().get().getAsFile(), args(linkTask.getLinkerArgs().get()));
binaries.add(new DefaultCppSharedLibraryModel(binary.getName(), cppBinary.getIdentity().getName(), binary.getBaseName().get(), compilationDetails, linkageDetails));
} else if (binary instanceof CppStaticLibrary) {
CppStaticLibrary staticLibrary = (CppStaticLibrary) binary;
LaunchableGradleTask createTaskModel = ToolingModelBuilderSupport.buildFromTask(new LaunchableGradleTask(), projectIdentifier, staticLibrary.getLinkFileProducer().get());
DefaultLinkageDetails linkageDetails = new DefaultLinkageDetails(createTaskModel, staticLibrary.getLinkFile().get().getAsFile(), Collections.<String>emptyList());
binaries.add(new DefaultCppStaticLibraryModel(binary.getName(), cppBinary.getIdentity().getName(), binary.getBaseName().get(), compilationDetails, linkageDetails));
}
}
return binaries;
}
Aggregations