Search in sources :

Example 6 with Fragment

use of com.google.devtools.build.lib.analysis.config.BuildConfiguration.Fragment in project bazel by bazelbuild.

the class BuildConfigurationFunction method getConfigurationFragments.

private Set<Fragment> getConfigurationFragments(BuildConfigurationValue.Key key, Environment env) throws InvalidConfigurationException, InterruptedException {
    // Get SkyKeys for the fragments we need to load.
    Set<SkyKey> fragmentKeys = new LinkedHashSet<>();
    for (Class<? extends BuildConfiguration.Fragment> fragmentClass : key.getFragments()) {
        fragmentKeys.add(ConfigurationFragmentValue.key(key.getBuildOptions(), fragmentClass, ruleClassProvider));
    }
    // Load them as Skyframe deps.
    Map<SkyKey, ValueOrException<InvalidConfigurationException>> fragmentDeps = env.getValuesOrThrow(fragmentKeys, InvalidConfigurationException.class);
    if (env.valuesMissing()) {
        return null;
    }
    // Collect and return the results.
    ImmutableSet.Builder<Fragment> fragments = ImmutableSet.builder();
    for (ValueOrException<InvalidConfigurationException> value : fragmentDeps.values()) {
        BuildConfiguration.Fragment fragment = ((ConfigurationFragmentValue) value.get()).getFragment();
        if (fragment != null) {
            fragments.add(fragment);
        }
    }
    return fragments.build();
}
Also used : LinkedHashSet(java.util.LinkedHashSet) SkyKey(com.google.devtools.build.skyframe.SkyKey) ValueOrException(com.google.devtools.build.skyframe.ValueOrException) Fragment(com.google.devtools.build.lib.analysis.config.BuildConfiguration.Fragment) InvalidConfigurationException(com.google.devtools.build.lib.analysis.config.InvalidConfigurationException) BuildConfiguration(com.google.devtools.build.lib.analysis.config.BuildConfiguration) Fragment(com.google.devtools.build.lib.analysis.config.BuildConfiguration.Fragment) ImmutableSet(com.google.common.collect.ImmutableSet)

Example 7 with Fragment

use of com.google.devtools.build.lib.analysis.config.BuildConfiguration.Fragment in project bazel by bazelbuild.

the class ConfigurationFragmentFunction method compute.

@Override
public SkyValue compute(SkyKey skyKey, Environment env) throws InterruptedException, ConfigurationFragmentFunctionException {
    ConfigurationFragmentKey configurationFragmentKey = (ConfigurationFragmentKey) skyKey.argument();
    BuildOptions buildOptions = configurationFragmentKey.getBuildOptions();
    ConfigurationFragmentFactory factory = getFactory(configurationFragmentKey.getFragmentType());
    try {
        PackageProviderForConfigurations packageProvider = new SkyframePackageLoaderWithValueEnvironment(env, ruleClassProvider);
        ConfigurationEnvironment confEnv = new ConfigurationBuilderEnvironment(packageProvider);
        Fragment fragment = factory.create(confEnv, buildOptions);
        if (env.valuesMissing()) {
            return null;
        }
        return new ConfigurationFragmentValue(fragment);
    } catch (InvalidConfigurationException e) {
        // exception with missing Skyframe dependencies.
        if (env.valuesMissing()) {
            return null;
        }
        throw new ConfigurationFragmentFunctionException(e);
    }
}
Also used : ConfigurationFragmentKey(com.google.devtools.build.lib.skyframe.ConfigurationFragmentValue.ConfigurationFragmentKey) PackageProviderForConfigurations(com.google.devtools.build.lib.analysis.config.PackageProviderForConfigurations) ConfigurationEnvironment(com.google.devtools.build.lib.analysis.config.ConfigurationEnvironment) BuildOptions(com.google.devtools.build.lib.analysis.config.BuildOptions) ConfigurationFragmentFactory(com.google.devtools.build.lib.analysis.config.ConfigurationFragmentFactory) Fragment(com.google.devtools.build.lib.analysis.config.BuildConfiguration.Fragment) InvalidConfigurationException(com.google.devtools.build.lib.analysis.config.InvalidConfigurationException)

Aggregations

Fragment (com.google.devtools.build.lib.analysis.config.BuildConfiguration.Fragment)7 ConfigurationFragmentFactory (com.google.devtools.build.lib.analysis.config.ConfigurationFragmentFactory)3 InvalidConfigurationException (com.google.devtools.build.lib.analysis.config.InvalidConfigurationException)3 SkyKey (com.google.devtools.build.skyframe.SkyKey)3 BuildConfiguration (com.google.devtools.build.lib.analysis.config.BuildConfiguration)2 NoSuchTargetException (com.google.devtools.build.lib.packages.NoSuchTargetException)2 Target (com.google.devtools.build.lib.packages.Target)2 HashMap (java.util.HashMap)2 ImmutableSet (com.google.common.collect.ImmutableSet)1 BlazeDirectories (com.google.devtools.build.lib.analysis.BlazeDirectories)1 BuildOptions (com.google.devtools.build.lib.analysis.config.BuildOptions)1 ConfigSettingRule (com.google.devtools.build.lib.analysis.config.ConfigRuleClasses.ConfigSettingRule)1 ConfigurationEnvironment (com.google.devtools.build.lib.analysis.config.ConfigurationEnvironment)1 FragmentOptions (com.google.devtools.build.lib.analysis.config.FragmentOptions)1 PackageProviderForConfigurations (com.google.devtools.build.lib.analysis.config.PackageProviderForConfigurations)1 Label (com.google.devtools.build.lib.cmdline.Label)1 Attribute (com.google.devtools.build.lib.packages.Attribute)1 ConfigurationFragmentPolicy (com.google.devtools.build.lib.packages.ConfigurationFragmentPolicy)1 NoSuchPackageException (com.google.devtools.build.lib.packages.NoSuchPackageException)1 Rule (com.google.devtools.build.lib.packages.Rule)1