org.gradle.nativeplatform.internal.configure.NativeBinaries 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.internal.file.FileCollectionFactory;
import org.gradle.internal.BiAction;
import org.gradle.model.ModelMap;
import org.gradle.model.internal.core.*;
import org.gradle.model.internal.core.rule.describe.SimpleModelRuleDescriptor;
import org.gradle.model.internal.manage.instance.ManagedInstance;
import org.gradle.nativeplatform.*;
import org.gradle.nativeplatform.internal.NativeBinarySpecInternal;
import org.gradle.nativeplatform.internal.resolve.NativeDependencyResolver;
import org.gradle.nativeplatform.platform.NativePlatform;
import org.gradle.platform.base.internal.BinaryNamingScheme;
public class NativeBinaries {
public static void createNativeBinaries(
NativeComponentSpec component,
ModelMap binaries,
NativeDependencyResolver resolver,
FileCollectionFactory fileCollectionFactory,
BinaryNamingScheme namingScheme,
NativePlatform platform,
BuildType buildType,
Flavor flavor
) {
if (component instanceof NativeLibrarySpec) {
createNativeBinary(SharedLibraryBinarySpec.class, binaries, resolver, fileCollectionFactory, namingScheme.withBinaryType("SharedLibrary").withRole("shared", false), platform, buildType, flavor);
createNativeBinary(StaticLibraryBinarySpec.class, binaries, resolver, fileCollectionFactory, namingScheme.withBinaryType("StaticLibrary").withRole("static", false), platform, buildType, flavor);
} else {
createNativeBinary(NativeExecutableBinarySpec.class, binaries, resolver, fileCollectionFactory, namingScheme.withBinaryType("Executable").withRole("executable", true), platform, buildType, flavor);
}
}
private static void createNativeBinary(
Class type,
ModelMap binaries,
final NativeDependencyResolver resolver,
final FileCollectionFactory fileCollectionFactory,
final BinaryNamingScheme namingScheme,
final NativePlatform platform,
final BuildType buildType,
final Flavor flavor
) {
final String name = namingScheme.getBinaryName();
binaries.create(name, type);
// TODO:REUSE Refactor after removing reuse
// This is horrendously bad.
// We need to set the platform, _before_ the @Defaults rules of NativeBinaryRules assign the toolchain.
// We can't just assign the toolchain here because the initializer would be closing over the toolchain which is not reusable, and this breaks model reuse.
// So here we are just closing over the safely reusable things and then using proper dependencies for the tool chain registry.
// Unfortunately, we can't do it in the create action because that would fire _after_ @Defaults rules.
// We have to use a @Defaults rule to assign the tool chain because it needs to be there in user @Mutate rules
// Or at least, the file locations do so that they can be tweaked.
// LD - 5/6/14
MutableModelNode backingNode = ((ManagedInstance) binaries).getBackingNode();
ModelPath binaryPath = backingNode.getPath().child(name);
backingNode.applyToLink(ModelActionRole.Defaults, DirectNodeNoInputsModelAction.of(
ModelReference.of(binaryPath, NativeBinarySpec.class),
new SimpleModelRuleDescriptor("initialize binary " + binaryPath),
new BiAction() {
@Override
public void execute(MutableModelNode mutableModelNode, NativeBinarySpec nativeBinarySpec) {
initialize(nativeBinarySpec, namingScheme, resolver, fileCollectionFactory, platform, buildType, flavor);
}
}
));
binaries.named(name, NativeBinaryRules.class);
}
public static void initialize(
NativeBinarySpec nativeBinarySpec,
BinaryNamingScheme namingScheme,
NativeDependencyResolver resolver,
FileCollectionFactory fileCollectionFactory,
NativePlatform platform,
BuildType buildType,
Flavor flavor
) {
NativeBinarySpecInternal nativeBinary = (NativeBinarySpecInternal) nativeBinarySpec;
nativeBinary.setNamingScheme(namingScheme);
nativeBinary.setTargetPlatform(platform);
nativeBinary.setBuildType(buildType);
nativeBinary.setFlavor(flavor);
nativeBinary.setResolver(resolver);
nativeBinary.setFileCollectionFactory(fileCollectionFactory);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy