org.gradle.nativeplatform.internal.configure.NativeComponentRules Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of gradle-api Show documentation
Show all versions of gradle-api Show documentation
Gradle 6.9.1 API redistribution.
/*
* Copyright 2014 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.gradle.nativeplatform.internal.configure;
import org.gradle.api.Transformer;
import org.gradle.api.internal.file.FileCollectionFactory;
import org.gradle.nativeplatform.BuildType;
import org.gradle.nativeplatform.Flavor;
import org.gradle.nativeplatform.NativeBinarySpec;
import org.gradle.nativeplatform.internal.TargetedNativeComponentInternal;
import org.gradle.nativeplatform.internal.resolve.NativeDependencyResolver;
import org.gradle.nativeplatform.platform.NativePlatform;
import org.gradle.nativeplatform.platform.internal.NativePlatformInternal;
import org.gradle.nativeplatform.platform.internal.NativePlatforms;
import org.gradle.platform.base.internal.*;
import org.gradle.util.CollectionUtils;
import java.util.Collections;
import java.util.List;
import java.util.Set;
/**
* Cross cutting rules for all instances of {@link org.gradle.nativeplatform.NativeComponentSpec}
*/
public class NativeComponentRules {
public static void createBinariesImpl(
TargetedNativeComponentInternal nativeComponent,
PlatformResolvers platforms,
Set extends BuildType> buildTypes,
Set extends Flavor> flavors,
NativePlatforms nativePlatforms,
NativeDependencyResolver nativeDependencyResolver,
FileCollectionFactory fileCollectionFactory
) {
List 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
);
}
}
private static List resolvePlatforms(TargetedNativeComponentInternal targetedComponent, NativePlatforms nativePlatforms, final PlatformResolvers platforms) {
List targetPlatforms = targetedComponent.getTargetPlatforms();
if (targetPlatforms.isEmpty()) {
PlatformRequirement requirement = DefaultPlatformRequirement.create(nativePlatforms.getDefaultPlatformName());
targetPlatforms = Collections.singletonList(requirement);
}
return CollectionUtils.collect(targetPlatforms, new Transformer() {
@Override
public NativePlatform transform(PlatformRequirement platformRequirement) {
return platforms.resolve(NativePlatform.class, platformRequirement);
}
});
}
private static void executeForEachBuildType(
TargetedNativeComponentInternal projectNativeComponent,
NativePlatformInternal platform,
BinaryNamingScheme namingScheme,
Set extends BuildType> allBuildTypes,
Set extends Flavor> allFlavors,
NativeDependencyResolver nativeDependencyResolver,
FileCollectionFactory fileCollectionFactory
) {
Set targetBuildTypes = projectNativeComponent.chooseBuildTypes(allBuildTypes);
for (BuildType buildType : targetBuildTypes) {
BinaryNamingScheme namingSchemeWithBuildType = namingScheme.withVariantDimension(buildType, targetBuildTypes);
executeForEachFlavor(
projectNativeComponent,
platform,
buildType,
namingSchemeWithBuildType,
allFlavors,
nativeDependencyResolver,
fileCollectionFactory
);
}
}
private static void executeForEachFlavor(
TargetedNativeComponentInternal projectNativeComponent,
NativePlatform platform,
BuildType buildType,
BinaryNamingScheme namingScheme,
Set extends Flavor> allFlavors,
NativeDependencyResolver nativeDependencyResolver,
FileCollectionFactory fileCollectionFactory
) {
Set targetFlavors = projectNativeComponent.chooseFlavors(allFlavors);
for (Flavor flavor : targetFlavors) {
BinaryNamingScheme namingSchemeWithFlavor = namingScheme.withVariantDimension(flavor, targetFlavors);
NativeBinaries.createNativeBinaries(
projectNativeComponent,
projectNativeComponent.getBinaries().withType(NativeBinarySpec.class),
nativeDependencyResolver,
fileCollectionFactory,
namingSchemeWithFlavor,
platform,
buildType,
flavor
);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy