ISPC: Generated Headers suffix configurable with a better default

The target property `ISPC_HEADER_SUFFIX` and associated global
variable now can control the suffix used when generating the
C/C++ interoperability ISPC headers.

In addition the default suffix is now "_ispc.h" which matches the
common convention that the ISPC compiler team uses and recommends.
This commit is contained in:
Robert Maynard
2020-12-10 16:08:24 -05:00
committed by Brad King
parent 6aff058ab4
commit c9a50f3556
26 changed files with 148 additions and 15 deletions
+12 -4
View File
@@ -2426,9 +2426,12 @@ void cmLocalGenerator::AddISPCDependencies(cmGeneratorTarget* target)
return;
}
std::vector<std::string> ispcSuffixes =
cmProp ispcHeaderSuffixProp = target->GetProperty("ISPC_HEADER_SUFFIX");
assert(ispcHeaderSuffixProp != nullptr);
std::vector<std::string> ispcArchSuffixes =
detail::ComputeISPCObjectSuffixes(target);
const bool extra_objects = (ispcSuffixes.size() > 1);
const bool extra_objects = (ispcArchSuffixes.size() > 1);
std::vector<std::string> configsList =
this->Makefile->GetGeneratorConfigs(cmMakefile::IncludeEmptyConfig);
@@ -2451,14 +2454,19 @@ void cmLocalGenerator::AddISPCDependencies(cmGeneratorTarget* target)
const std::string& lang = sf->GetLanguage();
if (lang == "ISPC") {
std::string const& objectName = target->GetObjectName(sf);
// Drop both ".obj" and the source file extension
std::string ispcSource =
cmSystemTools::GetFilenameWithoutLastExtension(objectName);
ispcSource =
cmSystemTools::GetFilenameWithoutLastExtension(ispcSource);
auto headerPath = cmStrCat(headerDir, '/', ispcSource, ".h");
auto headerPath =
cmStrCat(headerDir, '/', ispcSource, *ispcHeaderSuffixProp);
target->AddISPCGeneratedHeader(headerPath, config);
if (extra_objects) {
std::vector<std::string> objs = detail::ComputeISPCExtraObjects(
objectName, rootObjectDir, ispcSuffixes);
objectName, rootObjectDir, ispcArchSuffixes);
target->AddISPCGeneratedObject(std::move(objs), config);
}
}