Search in sources :

Example 1 with NativePlatform

use of org.gradle.nativeplatform.platform.NativePlatform in project gradle by gradle.

the class NativeComponentRules method createBinariesImpl.

public static void createBinariesImpl(TargetedNativeComponentInternal nativeComponent, PlatformResolvers platforms, Set<? extends BuildType> buildTypes, Set<? extends Flavor> flavors, NativePlatforms nativePlatforms, NativeDependencyResolver nativeDependencyResolver, FileCollectionFactory fileCollectionFactory) {
    List<NativePlatform> resolvedPlatforms = resolvePlatforms(nativeComponent, nativePlatforms, platforms);
    for (NativePlatform platform : resolvedPlatforms) {
        BinaryNamingScheme namingScheme = DefaultBinaryNamingScheme.component(nativeComponent.getName());
        namingScheme = namingScheme.withVariantDimension(platform, resolvedPlatforms);
        executeForEachBuildType(nativeComponent, (NativePlatformInternal) platform, namingScheme, buildTypes, flavors, nativeDependencyResolver, fileCollectionFactory);
    }
}
Also used : NativePlatform(org.gradle.nativeplatform.platform.NativePlatform)

Example 2 with NativePlatform

use of org.gradle.nativeplatform.platform.NativePlatform 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));
                }
            });
        }
    });
}
Also used : Action(org.gradle.api.Action) Callable(java.util.concurrent.Callable) Names(org.gradle.language.nativeplatform.internal.Names) NativeToolChainInternal(org.gradle.nativeplatform.toolchain.internal.NativeToolChainInternal) List(java.util.List) CppSharedLibrary(org.gradle.language.cpp.CppSharedLibrary) FeaturePreviews(org.gradle.api.internal.FeaturePreviews) DefaultCppBinary(org.gradle.language.cpp.internal.DefaultCppBinary) SwiftPmTarget(org.gradle.swiftpm.internal.SwiftPmTarget) TaskContainerInternal(org.gradle.api.internal.tasks.TaskContainerInternal) ProductionCppComponent(org.gradle.language.cpp.ProductionCppComponent) Project(org.gradle.api.Project) DefaultCppComponent(org.gradle.language.cpp.internal.DefaultCppComponent) DirectoryProperty(org.gradle.api.file.DirectoryProperty) PlatformToolProvider(org.gradle.nativeplatform.toolchain.internal.PlatformToolProvider) NativePlatform(org.gradle.nativeplatform.platform.NativePlatform) CppCompile(org.gradle.language.cpp.tasks.CppCompile) DefaultProjectPublication(org.gradle.api.internal.artifacts.ivyservice.projectmodule.DefaultProjectPublication) File(java.io.File)

Aggregations

NativePlatform (org.gradle.nativeplatform.platform.NativePlatform)2 File (java.io.File)1 List (java.util.List)1 Callable (java.util.concurrent.Callable)1 Action (org.gradle.api.Action)1 Project (org.gradle.api.Project)1 DirectoryProperty (org.gradle.api.file.DirectoryProperty)1 FeaturePreviews (org.gradle.api.internal.FeaturePreviews)1 DefaultProjectPublication (org.gradle.api.internal.artifacts.ivyservice.projectmodule.DefaultProjectPublication)1 TaskContainerInternal (org.gradle.api.internal.tasks.TaskContainerInternal)1 CppSharedLibrary (org.gradle.language.cpp.CppSharedLibrary)1 ProductionCppComponent (org.gradle.language.cpp.ProductionCppComponent)1 DefaultCppBinary (org.gradle.language.cpp.internal.DefaultCppBinary)1 DefaultCppComponent (org.gradle.language.cpp.internal.DefaultCppComponent)1 CppCompile (org.gradle.language.cpp.tasks.CppCompile)1 Names (org.gradle.language.nativeplatform.internal.Names)1 NativeToolChainInternal (org.gradle.nativeplatform.toolchain.internal.NativeToolChainInternal)1 PlatformToolProvider (org.gradle.nativeplatform.toolchain.internal.PlatformToolProvider)1 SwiftPmTarget (org.gradle.swiftpm.internal.SwiftPmTarget)1