use of org.gradle.language.cpp.internal.DefaultCppComponent 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.internal.DefaultCppComponent 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));
}
});
}
});
}
Aggregations