Search in sources :

Example 6 with Usage

use of org.gradle.api.attributes.Usage in project gradle by gradle.

the class CppUnitTestPlugin method apply.

@Override
public void apply(final ProjectInternal project) {
    project.getPluginManager().apply(CppBasePlugin.class);
    project.getPluginManager().apply(NativeTestingBasePlugin.class);
    // Add the unit test and extension
    final DefaultCppTestSuite testComponent = componentFactory.newInstance(CppTestSuite.class, DefaultCppTestSuite.class, "test");
    project.getExtensions().add(CppTestSuite.class, "unitTest", testComponent);
    project.getComponents().add(testComponent);
    testComponent.getBaseName().set(project.getName() + "Test");
    project.afterEvaluate(new Action<Project>() {

        @Override
        public void execute(final Project project) {
            testComponent.getOperatingSystems().lockNow();
            Set<OperatingSystemFamily> operatingSystemFamilies = testComponent.getOperatingSystems().get();
            if (operatingSystemFamilies.isEmpty()) {
                throw new IllegalArgumentException("An operating system needs to be specified for the unit test.");
            }
            boolean hasHostOperatingSystem = CollectionUtils.any(operatingSystemFamilies, new Spec<OperatingSystemFamily>() {

                @Override
                public boolean isSatisfiedBy(OperatingSystemFamily element) {
                    return DefaultNativePlatform.getCurrentOperatingSystem().toFamilyName().equals(element.getName());
                }
            });
            if (hasHostOperatingSystem) {
                String operatingSystemSuffix = "";
                OperatingSystemFamily operatingSystem = objectFactory.named(OperatingSystemFamily.class, DefaultNativePlatform.getCurrentOperatingSystem().toFamilyName());
                Usage runtimeUsage = objectFactory.named(Usage.class, Usage.NATIVE_RUNTIME);
                Provider<String> group = project.provider(new Callable<String>() {

                    @Override
                    public String call() throws Exception {
                        return project.getGroup().toString();
                    }
                });
                Provider<String> version = project.provider(new Callable<String>() {

                    @Override
                    public String call() throws Exception {
                        return project.getVersion().toString();
                    }
                });
                AttributeContainer attributesDebug = attributesFactory.mutable();
                attributesDebug.attribute(Usage.USAGE_ATTRIBUTE, runtimeUsage);
                attributesDebug.attribute(DEBUGGABLE_ATTRIBUTE, true);
                attributesDebug.attribute(OPTIMIZED_ATTRIBUTE, false);
                // TODO: Fix this naming convention to follow C++ executable/library
                NativeVariantIdentity debugVariant = new NativeVariantIdentity("debug" + operatingSystemSuffix, testComponent.getBaseName(), group, version, true, false, operatingSystem, null, new DefaultUsageContext("debug" + operatingSystemSuffix + "Runtime", runtimeUsage, attributesDebug));
                ToolChainSelector.Result<CppPlatform> result = toolChainSelector.select(CppPlatform.class);
                testComponent.addExecutable("executable", debugVariant, result.getTargetPlatform(), result.getToolChain(), result.getPlatformToolProvider());
                // TODO: Publishing for test executable?
                final TaskContainer tasks = project.getTasks();
                final ProductionCppComponent mainComponent = project.getComponents().withType(ProductionCppComponent.class).findByName("main");
                if (mainComponent != null) {
                    testComponent.getTestedComponent().set(mainComponent);
                }
                testComponent.getBinaries().whenElementKnown(DefaultCppTestExecutable.class, new Action<DefaultCppTestExecutable>() {

                    @Override
                    public void execute(final DefaultCppTestExecutable executable) {
                        if (mainComponent != null) {
                            // TODO: This should be modeled as a kind of dependency vs wiring binaries together directly.
                            mainComponent.getBinaries().whenElementFinalized(new Action<CppBinary>() {

                                @Override
                                public void execute(CppBinary cppBinary) {
                                    if (cppBinary == mainComponent.getDevelopmentBinary().get()) {
                                        AbstractLinkTask linkTest = executable.getLinkTask().get();
                                        linkTest.source(cppBinary.getObjects());
                                    }
                                }
                            });
                        }
                        // TODO: Replace with native test task
                        final RunTestExecutable testTask = tasks.create(executable.getNames().getTaskName("run"), RunTestExecutable.class);
                        testTask.setGroup(LifecycleBasePlugin.VERIFICATION_GROUP);
                        testTask.setDescription("Executes C++ unit tests.");
                        final InstallExecutable installTask = executable.getInstallTask().get();
                        testTask.onlyIf(new Spec<Task>() {

                            @Override
                            public boolean isSatisfiedBy(Task element) {
                                return executable.getInstallDirectory().get().getAsFile().exists();
                            }
                        });
                        testTask.setExecutable(installTask.getRunScriptFile().get().getAsFile());
                        testTask.dependsOn(testComponent.getTestBinary().get().getInstallDirectory());
                        // TODO: Honor changes to build directory
                        testTask.setOutputDir(project.getLayout().getBuildDirectory().dir("test-results/" + executable.getNames().getDirName()).get().getAsFile());
                        executable.getRunTask().set(testTask);
                    }
                });
            }
            testComponent.getBinaries().realizeNow();
        }
    });
}
Also used : OperatingSystemFamily(org.gradle.nativeplatform.OperatingSystemFamily) Action(org.gradle.api.Action) Task(org.gradle.api.Task) AbstractLinkTask(org.gradle.nativeplatform.tasks.AbstractLinkTask) Set(java.util.Set) AttributeContainer(org.gradle.api.attributes.AttributeContainer) Callable(java.util.concurrent.Callable) CppPlatform(org.gradle.language.cpp.CppPlatform) DefaultCppTestExecutable(org.gradle.nativeplatform.test.cpp.internal.DefaultCppTestExecutable) InstallExecutable(org.gradle.nativeplatform.tasks.InstallExecutable) DefaultUsageContext(org.gradle.language.cpp.internal.DefaultUsageContext) Usage(org.gradle.api.attributes.Usage) CppBinary(org.gradle.language.cpp.CppBinary) NativeVariantIdentity(org.gradle.language.cpp.internal.NativeVariantIdentity) Provider(org.gradle.api.provider.Provider) ProductionCppComponent(org.gradle.language.cpp.ProductionCppComponent) RunTestExecutable(org.gradle.nativeplatform.test.tasks.RunTestExecutable) Project(org.gradle.api.Project) TaskContainer(org.gradle.api.tasks.TaskContainer) Spec(org.gradle.api.specs.Spec) AbstractLinkTask(org.gradle.nativeplatform.tasks.AbstractLinkTask) DefaultCppTestSuite(org.gradle.nativeplatform.test.cpp.internal.DefaultCppTestSuite)

Example 7 with Usage

use of org.gradle.api.attributes.Usage in project gradle by gradle.

the class CppApplicationPlugin method apply.

@Override
public void apply(final ProjectInternal project) {
    project.getPluginManager().apply(CppBasePlugin.class);
    final ObjectFactory objectFactory = project.getObjects();
    // Add the application and extension
    final DefaultCppApplication application = componentFactory.newInstance(CppApplication.class, DefaultCppApplication.class, "main");
    project.getExtensions().add(CppApplication.class, "application", application);
    project.getComponents().add(application);
    // Configure the component
    application.getBaseName().set(project.getName());
    project.afterEvaluate(new Action<Project>() {

        @Override
        public void execute(final Project project) {
            application.getOperatingSystems().lockNow();
            Set<OperatingSystemFamily> operatingSystemFamilies = application.getOperatingSystems().get();
            if (operatingSystemFamilies.isEmpty()) {
                throw new IllegalArgumentException("An operating system needs to be specified for the application.");
            }
            Usage runtimeUsage = objectFactory.named(Usage.class, Usage.NATIVE_RUNTIME);
            for (BuildType buildType : BuildType.DEFAULT_BUILD_TYPES) {
                for (OperatingSystemFamily operatingSystem : operatingSystemFamilies) {
                    String operatingSystemSuffix = createDimensionSuffix(operatingSystem, operatingSystemFamilies);
                    String variantName = buildType.getName() + operatingSystemSuffix;
                    Provider<String> group = project.provider(new Callable<String>() {

                        @Override
                        public String call() throws Exception {
                            return project.getGroup().toString();
                        }
                    });
                    Provider<String> version = project.provider(new Callable<String>() {

                        @Override
                        public String call() throws Exception {
                            return project.getVersion().toString();
                        }
                    });
                    AttributeContainer runtimeAttributes = attributesFactory.mutable();
                    runtimeAttributes.attribute(Usage.USAGE_ATTRIBUTE, runtimeUsage);
                    runtimeAttributes.attribute(DEBUGGABLE_ATTRIBUTE, buildType.isDebuggable());
                    runtimeAttributes.attribute(OPTIMIZED_ATTRIBUTE, buildType.isOptimized());
                    runtimeAttributes.attribute(OperatingSystemFamily.OPERATING_SYSTEM_ATTRIBUTE, operatingSystem);
                    NativeVariantIdentity variantIdentity = new NativeVariantIdentity(variantName, application.getBaseName(), group, version, buildType.isDebuggable(), buildType.isOptimized(), operatingSystem, null, new DefaultUsageContext(variantName + "Runtime", runtimeUsage, runtimeAttributes));
                    if (DefaultNativePlatform.getCurrentOperatingSystem().toFamilyName().equals(operatingSystem.getName())) {
                        ToolChainSelector.Result<CppPlatform> result = toolChainSelector.select(CppPlatform.class);
                        CppExecutable executable = application.addExecutable(variantIdentity, result.getTargetPlatform(), result.getToolChain(), result.getPlatformToolProvider());
                        // Use the debug variant as the development binary
                        if (buildType == BuildType.DEBUG) {
                            application.getDevelopmentBinary().set(executable);
                        }
                        application.getMainPublication().addVariant(executable);
                    } else {
                        // Known, but not buildable
                        application.getMainPublication().addVariant(variantIdentity);
                    }
                }
            }
            application.getBinaries().realizeNow();
        }
    });
}
Also used : OperatingSystemFamily(org.gradle.nativeplatform.OperatingSystemFamily) Usage(org.gradle.api.attributes.Usage) Set(java.util.Set) AttributeContainer(org.gradle.api.attributes.AttributeContainer) CppExecutable(org.gradle.language.cpp.CppExecutable) NativeVariantIdentity(org.gradle.language.cpp.internal.NativeVariantIdentity) Callable(java.util.concurrent.Callable) DefaultCppApplication(org.gradle.language.cpp.internal.DefaultCppApplication) Provider(org.gradle.api.provider.Provider) Project(org.gradle.api.Project) CppPlatform(org.gradle.language.cpp.CppPlatform) ObjectFactory(org.gradle.api.model.ObjectFactory) BuildType(org.gradle.language.nativeplatform.internal.BuildType) DefaultUsageContext(org.gradle.language.cpp.internal.DefaultUsageContext)

Example 8 with Usage

use of org.gradle.api.attributes.Usage in project gradle by gradle.

the class ScalaBasePlugin method configureConfigurations.

private void configureConfigurations(final Project project, final Usage incrementalAnalysisUsage, ScalaPluginExtension scalaPluginExtension) {
    DependencyHandler dependencyHandler = project.getDependencies();
    ConfigurationInternal plugins = (ConfigurationInternal) project.getConfigurations().create(SCALA_COMPILER_PLUGINS_CONFIGURATION_NAME);
    plugins.setTransitive(false);
    plugins.setCanBeConsumed(false);
    jvmEcosystemUtilities.configureAsRuntimeClasspath(plugins);
    Configuration zinc = project.getConfigurations().create(ZINC_CONFIGURATION_NAME);
    zinc.setVisible(false);
    zinc.setDescription("The Zinc incremental compiler to be used for this Scala project.");
    ((DeprecatableConfiguration) zinc).deprecateForConsumption(deprecation -> deprecation.willBecomeAnErrorInGradle8().withUpgradeGuideSection(7, "plugin_configuration_consumption"));
    zinc.getResolutionStrategy().eachDependency(rule -> {
        if (rule.getRequested().getGroup().equals("com.typesafe.zinc") && rule.getRequested().getName().equals("zinc")) {
            rule.useTarget("org.scala-sbt:zinc_" + DEFAULT_SCALA_ZINC_VERSION + ":" + DEFAULT_ZINC_VERSION);
            rule.because("Typesafe Zinc is no longer maintained.");
        }
    });
    zinc.defaultDependencies(dependencies -> {
        dependencies.add(dependencyHandler.create("org.scala-sbt:zinc_" + DEFAULT_SCALA_ZINC_VERSION + ":" + scalaPluginExtension.getZincVersion().get()));
        // Add safeguard and clear error if the user changed the scala version when using default zinc
        zinc.getIncoming().afterResolve(resolvableDependencies -> {
            resolvableDependencies.getResolutionResult().allComponents(component -> {
                if (component.getModuleVersion() != null && component.getModuleVersion().getName().equals("scala-library")) {
                    if (!component.getModuleVersion().getVersion().startsWith(DEFAULT_SCALA_ZINC_VERSION)) {
                        throw new InvalidUserCodeException("The version of 'scala-library' was changed while using the default Zinc version. " + "Version " + component.getModuleVersion().getVersion() + " is not compatible with org.scala-sbt:zinc_" + DEFAULT_SCALA_ZINC_VERSION + ":" + DEFAULT_ZINC_VERSION);
                    }
                }
            });
        });
    });
    zinc.getDependencyConstraints().add(dependencyHandler.getConstraints().create(Log4jBannedVersion.LOG4J2_CORE_COORDINATES, constraint -> constraint.version(version -> {
        version.require(Log4jBannedVersion.LOG4J2_CORE_REQUIRED_VERSION);
        version.reject(Log4jBannedVersion.LOG4J2_CORE_VULNERABLE_VERSION_RANGE);
    })));
    final Configuration incrementalAnalysisElements = project.getConfigurations().create("incrementalScalaAnalysisElements");
    incrementalAnalysisElements.setVisible(false);
    incrementalAnalysisElements.setDescription("Incremental compilation analysis files");
    incrementalAnalysisElements.setCanBeResolved(false);
    incrementalAnalysisElements.setCanBeConsumed(true);
    incrementalAnalysisElements.getAttributes().attribute(USAGE_ATTRIBUTE, incrementalAnalysisUsage);
    AttributeMatchingStrategy<Usage> matchingStrategy = dependencyHandler.getAttributesSchema().attribute(USAGE_ATTRIBUTE);
    matchingStrategy.getDisambiguationRules().add(UsageDisambiguationRules.class, actionConfiguration -> {
        actionConfiguration.params(incrementalAnalysisUsage);
        actionConfiguration.params(objectFactory.named(Usage.class, Usage.JAVA_API));
        actionConfiguration.params(objectFactory.named(Usage.class, Usage.JAVA_RUNTIME));
    });
}
Also used : ProjectComponentIdentifier(org.gradle.api.artifacts.component.ProjectComponentIdentifier) BiFunction(java.util.function.BiFunction) InvalidUserCodeException(org.gradle.api.InvalidUserCodeException) Task(org.gradle.api.Task) Provider(org.gradle.api.provider.Provider) JavaBasePlugin(org.gradle.api.plugins.JavaBasePlugin) MultipleCandidatesDetails(org.gradle.api.attributes.MultipleCandidatesDetails) TaskProvider(org.gradle.api.tasks.TaskProvider) Log4jBannedVersion(org.gradle.internal.logging.util.Log4jBannedVersion) ConfigurationInternal(org.gradle.api.internal.artifacts.configurations.ConfigurationInternal) ExtensionAware(org.gradle.api.plugins.ExtensionAware) Transformer(org.gradle.api.Transformer) ScalaRuntime(org.gradle.api.tasks.ScalaRuntime) CompileOptions(org.gradle.api.tasks.compile.CompileOptions) DefaultScalaPluginExtension(org.gradle.api.internal.tasks.scala.DefaultScalaPluginExtension) ImmutableSet(com.google.common.collect.ImmutableSet) Project(org.gradle.api.Project) SourceDirectorySet(org.gradle.api.file.SourceDirectorySet) ArtifactView(org.gradle.api.artifacts.ArtifactView) JvmEcosystemUtilities(org.gradle.api.plugins.jvm.internal.JvmEcosystemUtilities) AttributeDisambiguationRule(org.gradle.api.attributes.AttributeDisambiguationRule) Spec(org.gradle.api.specs.Spec) AttributeMatchingStrategy(org.gradle.api.attributes.AttributeMatchingStrategy) SerializableLambdas.spec(org.gradle.api.internal.lambdas.SerializableLambdas.spec) JavaPluginExtension(org.gradle.api.plugins.JavaPluginExtension) DeprecatableConfiguration(org.gradle.internal.deprecation.DeprecatableConfiguration) JavaToolchainService(org.gradle.jvm.toolchain.JavaToolchainService) Callable(java.util.concurrent.Callable) FileCollection(org.gradle.api.file.FileCollection) ComponentIdentifier(org.gradle.api.artifacts.component.ComponentIdentifier) SourceSet(org.gradle.api.tasks.SourceSet) Inject(javax.inject.Inject) Configuration(org.gradle.api.artifacts.Configuration) ScalaDoc(org.gradle.api.tasks.scala.ScalaDoc) DependencyHandler(org.gradle.api.artifacts.dsl.DependencyHandler) ScalaSourceDirectorySet(org.gradle.api.tasks.ScalaSourceDirectorySet) ScalaCompile(org.gradle.api.tasks.scala.ScalaCompile) Usage(org.gradle.api.attributes.Usage) InvokerHelper(org.codehaus.groovy.runtime.InvokerHelper) Action(org.gradle.api.Action) ReportingExtension(org.gradle.api.reporting.ReportingExtension) Jar(org.gradle.jvm.tasks.Jar) JvmPluginsHelper(org.gradle.api.plugins.internal.JvmPluginsHelper) JavaToolchainSpec(org.gradle.jvm.toolchain.JavaToolchainSpec) File(java.io.File) USAGE_ATTRIBUTE(org.gradle.api.attributes.Usage.USAGE_ATTRIBUTE) ObjectFactory(org.gradle.api.model.ObjectFactory) Convention(org.gradle.api.plugins.Convention) VisibleForTesting(com.google.common.annotations.VisibleForTesting) Plugin(org.gradle.api.Plugin) IncrementalCompileOptions(org.gradle.api.tasks.scala.IncrementalCompileOptions) DependencyHandler(org.gradle.api.artifacts.dsl.DependencyHandler) Usage(org.gradle.api.attributes.Usage) DeprecatableConfiguration(org.gradle.internal.deprecation.DeprecatableConfiguration) Configuration(org.gradle.api.artifacts.Configuration) InvalidUserCodeException(org.gradle.api.InvalidUserCodeException) DeprecatableConfiguration(org.gradle.internal.deprecation.DeprecatableConfiguration) ConfigurationInternal(org.gradle.api.internal.artifacts.configurations.ConfigurationInternal)

Example 9 with Usage

use of org.gradle.api.attributes.Usage in project gradle by gradle.

the class Dimensions method variants.

private static void variants(Provider<String> baseName, Collection<BuildType> buildTypes, Collection<TargetMachine> targetMachines, ObjectFactory objectFactory, ImmutableAttributesFactory attributesFactory, // TODO: These should come from somewhere else, probably
Provider<String> group, Provider<String> version, Action<NativeVariantIdentity> action) {
    for (BuildType buildType : buildTypes) {
        for (TargetMachine targetMachine : targetMachines) {
            Usage runtimeUsage = objectFactory.named(Usage.class, Usage.NATIVE_RUNTIME);
            List<String> variantNameToken = Lists.newArrayList();
            // FIXME: Always build type name to keep parity with previous Gradle version in tooling API
            variantNameToken.add(buildType.getName());
            variantNameToken.add(createDimensionSuffix(targetMachine.getOperatingSystemFamily(), targetMachinesToOperatingSystems(targetMachines)));
            variantNameToken.add(createDimensionSuffix(targetMachine.getArchitecture(), targetMachinesToArchitectures(targetMachines)));
            String variantName = StringUtils.uncapitalize(String.join("", variantNameToken));
            AttributeContainer runtimeAttributes = attributesFactory.mutable();
            runtimeAttributes.attribute(Usage.USAGE_ATTRIBUTE, runtimeUsage);
            addCommonAttributes(buildType, targetMachine, runtimeAttributes);
            DefaultUsageContext runtimeUsageContext = new DefaultUsageContext(variantName + "Runtime", runtimeAttributes);
            DefaultUsageContext linkUsageContext = null;
            NativeVariantIdentity variantIdentity = new NativeVariantIdentity(variantName, baseName, group, version, buildType.isDebuggable(), buildType.isOptimized(), targetMachine, linkUsageContext, runtimeUsageContext, null);
            action.execute(variantIdentity);
        }
    }
}
Also used : Usage(org.gradle.api.attributes.Usage) TargetMachine(org.gradle.nativeplatform.TargetMachine) DefaultUsageContext(org.gradle.language.cpp.internal.DefaultUsageContext) AttributeContainer(org.gradle.api.attributes.AttributeContainer) NativeVariantIdentity(org.gradle.language.cpp.internal.NativeVariantIdentity)

Example 10 with Usage

use of org.gradle.api.attributes.Usage in project gradle by gradle.

the class Dimensions method variants.

private static void variants(Provider<String> baseName, Collection<BuildType> buildTypes, Collection<Linkage> linkages, Collection<TargetMachine> targetMachines, ObjectFactory objectFactory, ImmutableAttributesFactory attributesFactory, // TODO: These should come from somewhere else, probably
Provider<String> group, Provider<String> version, Action<NativeVariantIdentity> action) {
    for (BuildType buildType : buildTypes) {
        for (Linkage linkage : linkages) {
            for (TargetMachine targetMachine : targetMachines) {
                Usage runtimeUsage = objectFactory.named(Usage.class, Usage.NATIVE_RUNTIME);
                Usage linkUsage = objectFactory.named(Usage.class, Usage.NATIVE_LINK);
                List<String> variantNameToken = Lists.newArrayList();
                // FIXME: Always build type name to keep parity with previous Gradle version in tooling API
                variantNameToken.add(buildType.getName());
                variantNameToken.add(createDimensionSuffix(linkage, linkages));
                variantNameToken.add(createDimensionSuffix(targetMachine.getOperatingSystemFamily(), targetMachinesToOperatingSystems(targetMachines)));
                variantNameToken.add(createDimensionSuffix(targetMachine.getArchitecture(), targetMachinesToArchitectures(targetMachines)));
                String variantName = StringUtils.uncapitalize(String.join("", variantNameToken));
                AttributeContainer runtimeAttributes = attributesFactory.mutable();
                runtimeAttributes.attribute(Usage.USAGE_ATTRIBUTE, runtimeUsage);
                addCommonAttributes(buildType, targetMachine, runtimeAttributes);
                runtimeAttributes.attribute(LINKAGE_ATTRIBUTE, linkage);
                DefaultUsageContext runtimeUsageContext = new DefaultUsageContext(variantName + "Runtime", runtimeAttributes);
                AttributeContainer linkAttributes = attributesFactory.mutable();
                linkAttributes.attribute(Usage.USAGE_ATTRIBUTE, linkUsage);
                addCommonAttributes(buildType, targetMachine, linkAttributes);
                linkAttributes.attribute(LINKAGE_ATTRIBUTE, linkage);
                DefaultUsageContext linkUsageContext = new DefaultUsageContext(variantName + "Link", linkAttributes);
                NativeVariantIdentity variantIdentity = new NativeVariantIdentity(variantName, baseName, group, version, buildType.isDebuggable(), buildType.isOptimized(), targetMachine, linkUsageContext, runtimeUsageContext, linkage);
                action.execute(variantIdentity);
            }
        }
    }
}
Also used : Usage(org.gradle.api.attributes.Usage) Linkage(org.gradle.nativeplatform.Linkage) TargetMachine(org.gradle.nativeplatform.TargetMachine) DefaultUsageContext(org.gradle.language.cpp.internal.DefaultUsageContext) AttributeContainer(org.gradle.api.attributes.AttributeContainer) NativeVariantIdentity(org.gradle.language.cpp.internal.NativeVariantIdentity)

Aggregations

Usage (org.gradle.api.attributes.Usage)10 AttributeContainer (org.gradle.api.attributes.AttributeContainer)7 DefaultUsageContext (org.gradle.language.cpp.internal.DefaultUsageContext)7 NativeVariantIdentity (org.gradle.language.cpp.internal.NativeVariantIdentity)7 Callable (java.util.concurrent.Callable)6 Project (org.gradle.api.Project)6 Provider (org.gradle.api.provider.Provider)6 Action (org.gradle.api.Action)5 OperatingSystemFamily (org.gradle.nativeplatform.OperatingSystemFamily)5 Set (java.util.Set)4 ObjectFactory (org.gradle.api.model.ObjectFactory)4 Configuration (org.gradle.api.artifacts.Configuration)3 CppPlatform (org.gradle.language.cpp.CppPlatform)3 File (java.io.File)2 Task (org.gradle.api.Task)2 Spec (org.gradle.api.specs.Spec)2 SwiftPlatform (org.gradle.language.swift.SwiftPlatform)2 TargetMachine (org.gradle.nativeplatform.TargetMachine)2 VisibleForTesting (com.google.common.annotations.VisibleForTesting)1 ImmutableSet (com.google.common.collect.ImmutableSet)1