/*
* Copyright 2014-present Facebook, Inc.
*
* 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.facebook.buck.halide;
import com.facebook.buck.cli.BuckConfig;
import com.facebook.buck.cxx.CxxPlatform;
import com.facebook.buck.util.HumanReadableException;
import com.google.common.collect.ImmutableMap;
import java.nio.file.Path;
import java.util.Map;
/** A Halide-specific "view" of BuckConfig. */
public class HalideBuckConfig {
public static final String HALIDE_SECTION_NAME = "halide";
public static final String HALIDE_XCODE_COMPILE_SCRIPT_KEY = "xcode_compile_script";
private static final String HALIDE_TARGET_KEY_PREFIX = "target_";
private final BuckConfig delegate;
public HalideBuckConfig(BuckConfig delegate) {
this.delegate = delegate;
}
public String getHalideTargetForPlatform(CxxPlatform cxxPlatform) {
String flavorName = cxxPlatform.getFlavor().toString();
ImmutableMap<String, String> targetMap = getHalideTargetMap();
if (!targetMap.containsKey(flavorName)) {
throw new HumanReadableException(
"No halide target found for platform: '%s'\n"
+ "Add one in .buckconfig in the halide section.\n"
+ "\n"
+ "Example:\n"
+ "\n"
+ "[halide]"
+ "\n"
+ "target_%s = x86-64-osx-user_context",
flavorName, flavorName);
}
return targetMap.get(flavorName);
}
private ImmutableMap<String, String> getHalideTargetMap() {
ImmutableMap<String, String> allEntries = delegate.getEntriesForSection(HALIDE_SECTION_NAME);
ImmutableMap.Builder<String, String> targets = ImmutableMap.builder();
for (Map.Entry<String, String> entry : allEntries.entrySet()) {
if (entry.getKey().startsWith(HALIDE_TARGET_KEY_PREFIX)) {
targets.put(entry.getKey().substring(HALIDE_TARGET_KEY_PREFIX.length()), entry.getValue());
}
}
return targets.build();
}
/// Get the path to the Halide compile script for Xcode.
public Path getXcodeCompileScriptPath() {
return delegate.getRequiredPath(HALIDE_SECTION_NAME, HALIDE_XCODE_COMPILE_SCRIPT_KEY);
}
}