blob: 7f4f4f0b1686560a236f8a8e0234f1d7c2b6b36b [file] [log] [blame]
// Copyright 2019 The Bazel Authors. All rights reserved.
//
// 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 com.google.devtools.build.lib.rules.cpp;
import com.google.common.base.Preconditions;
import com.google.devtools.build.lib.analysis.config.BuildOptions;
import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.FeatureConfiguration;
import com.google.devtools.build.lib.skylarkbuildapi.cpp.FeatureConfigurationApi;
/**
* Wrapper for {@link FeatureConfiguration}, {@link CppConfiguration}, and {@link BuildOptions}.
*
* <p>Instances are created in Starlark by cc_common.configure_features(ctx, cc_toolchain), and
* passed around pretending to be {@link FeatureConfiguration}. Then when the need arises, we get
* the {@link CppConfiguration} and {@link BuildOptions} from it and use it in times when
* configuration of cc_toolchain is different than configuration of the rule depending on it.
*/
// TODO(b/129045294): Remove once cc_toolchain has target configuration.
public class FeatureConfigurationForStarlark implements FeatureConfigurationApi {
private final FeatureConfiguration featureConfiguration;
private final CppConfiguration cppConfiguration;
private final BuildOptions buildOptions;
public static FeatureConfigurationForStarlark from(
FeatureConfiguration featureConfiguration,
CppConfiguration cppConfiguration,
BuildOptions buildOptions) {
return new FeatureConfigurationForStarlark(
featureConfiguration, cppConfiguration, buildOptions);
}
private FeatureConfigurationForStarlark(
FeatureConfiguration featureConfiguration,
CppConfiguration cppConfiguration,
BuildOptions buildOptions) {
this.featureConfiguration = Preconditions.checkNotNull(featureConfiguration);
this.cppConfiguration = Preconditions.checkNotNull(cppConfiguration);
this.buildOptions = buildOptions;
}
public FeatureConfiguration getFeatureConfiguration() {
return featureConfiguration;
}
/**
* Get {@link CppConfiguration} that is threaded along with {@link FeatureConfiguration}. Do this
* only when you're completely aware of why this method was added and hlopko@ allowed you to.
*
* @deprecated will be removed soon by b/129045294.
*/
@Deprecated
CppConfiguration
getCppConfigurationFromFeatureConfigurationCreatedForStarlark_andIKnowWhatImDoing() {
return cppConfiguration;
}
/**
* Get {@link BuildOptions} that is threaded along with {@link FeatureConfiguration}. Do this only
* when you're completely aware of why this method was added and hlopko@ allowed you to.
*
* @deprecated will be removed soon by b/129045294.
*/
@Deprecated
BuildOptions getBuildOptionsFromFeatureConfigurationCreatedForStarlark_andIKnowWhatImDoing() {
return buildOptions;
}
}