Skip to content

Commit 913b0f1

Browse files
committed
Break out LLVM-free component of CUDAQTargetConfigUtils + rename
Signed-off-by: Luca Mondada <luca@mondada.net>
1 parent f718fda commit 913b0f1

31 files changed

Lines changed: 153 additions & 132 deletions

cudaq/include/cudaq/Support/TargetConfig.h renamed to cudaq/include/cudaq/Target/StaticConfig.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ struct BackendFeatureMap {
157157
};
158158

159159
/// Schema of the target configuration file.
160-
class TargetConfig {
160+
class StaticConfig {
161161
public:
162162
/// Target name
163163
std::string Name;
@@ -183,7 +183,7 @@ class TargetConfig {
183183

184184
/// Process the target configuration into a `nvq++` compatible script according
185185
/// to the provided compile time (C++)/runtime (Python) target arguments.
186-
std::string processRuntimeArgs(const TargetConfig &config,
186+
std::string processRuntimeArgs(const StaticConfig &config,
187187
const std::map<std::string, std::string> &args);
188188

189189
} // namespace cudaq::config

cudaq/include/cudaq/Support/TargetConfigYaml.h renamed to cudaq/include/cudaq/Target/StaticConfigYaml.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
#pragma once
1010

11-
#include "TargetConfig.h"
11+
#include "cudaq/Target/StaticConfig.h"
1212
#include "llvm/Support/YAMLTraits.h"
1313

1414
// These structs can be used in a vector.
@@ -59,9 +59,9 @@ struct MappingTraits<cudaq::config::BackendFeatureMap> {
5959
};
6060

6161
template <>
62-
struct MappingTraits<cudaq::config::TargetConfig> {
63-
static void mapping(IO &io, cudaq::config::TargetConfig &info);
64-
static std::string validate(IO &io, cudaq::config::TargetConfig &info);
62+
struct MappingTraits<cudaq::config::StaticConfig> {
63+
static void mapping(IO &io, cudaq::config::StaticConfig &info);
64+
static std::string validate(IO &io, cudaq::config::StaticConfig &info);
6565
};
6666

6767
template <>

cudaq/lib/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,5 @@ if (NOT CUDAQ_DISABLE_CPP_FRONTEND)
1212
endif()
1313
add_subdirectory(Optimizer)
1414
add_subdirectory(Support)
15+
add_subdirectory(Target)
1516
add_subdirectory(Verifier)

cudaq/lib/Support/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,3 @@ add_mlir_library(CUDAQSupport
2020
MLIRIR
2121
)
2222

23-
add_subdirectory(Config)
Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,23 @@
66
# the terms of the Apache License 2.0 which accompanies this distribution. #
77
# ============================================================================ #
88

9+
# LLVM-free library: config data structures and helpers.
10+
add_library(CUDAQTargetConfig
11+
StaticConfig.cpp
12+
)
13+
target_include_directories(CUDAQTargetConfig PUBLIC
14+
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/cudaq/include>
15+
$<INSTALL_INTERFACE:include>
16+
)
17+
install(TARGETS CUDAQTargetConfig EXPORT cudaq-targets DESTINATION lib)
918

10-
add_llvm_library(CUDAQTargetConfigUtil
11-
TargetConfig.cpp
19+
# LLVM-dependent library: YAML serialization and runtime argument processing.
20+
add_llvm_library(CUDAQTargetConfigYaml
21+
StaticConfigYaml.cpp
1222

1323
DISABLE_LLVM_LINK_LLVM_DYLIB
1424

1525
LINK_COMPONENTS
1626
Support
17-
)
27+
)
28+
target_link_libraries(CUDAQTargetConfigYaml PUBLIC CUDAQTargetConfig)

cudaq/lib/Target/StaticConfig.cpp

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
/*******************************************************************************
2+
* Copyright (c) 2022 - 2026 NVIDIA Corporation & Affiliates. *
3+
* All rights reserved. *
4+
* *
5+
* This source code and the accompanying materials are made available under *
6+
* the terms of the Apache License 2.0 which accompanies this distribution. *
7+
******************************************************************************/
8+
9+
#include "cudaq/Target/StaticConfig.h"
10+
#include <regex>
11+
12+
std::string cudaq::config::StaticConfig::getCodeGenSpec(
13+
const std::map<std::string, std::string> &targetArgs) const {
14+
// Check whether we have a per-machine config
15+
const auto machineConfigIter = std::find_if(
16+
TargetArguments.begin(), TargetArguments.end(),
17+
[&](const cudaq::config::TargetArgument &argConfig) {
18+
return argConfig.Type == cudaq::config::ArgumentType::MachineConfig;
19+
});
20+
if (machineConfigIter == TargetArguments.end()) {
21+
// No machine specific config
22+
return BackendConfig.has_value() ? BackendConfig->CodegenEmission : "";
23+
}
24+
25+
// Get the machine name from the CLI argument
26+
std::string machineName;
27+
for (const auto &[argKey, argVal] : targetArgs) {
28+
if (argKey == machineConfigIter->PlatformArgKey) {
29+
machineName = argVal;
30+
break;
31+
}
32+
}
33+
34+
if (!machineName.empty()) {
35+
// Check for match
36+
for (auto &archConfig : machineConfigIter->MachineConfigs) {
37+
// Check names first
38+
if (std::find(archConfig.MachineNames.begin(),
39+
archConfig.MachineNames.end(),
40+
machineName) != archConfig.MachineNames.end()) {
41+
return archConfig.Configuration.CodegenEmission;
42+
}
43+
// Check pattern if provided
44+
if (!archConfig.MachinePattern.empty()) {
45+
std::regex re(archConfig.MachinePattern);
46+
if (std::regex_search(machineName, re)) {
47+
return archConfig.Configuration.CodegenEmission;
48+
}
49+
}
50+
}
51+
}
52+
53+
// No machine specific config rule matches, fallback to the default backend
54+
// config
55+
return BackendConfig.has_value() ? BackendConfig->CodegenEmission : "";
56+
}
57+
58+
bool cudaq::config::BackendEndConfigEntry::hasPassPipeline() const {
59+
return !TargetPassPipeline.empty() || !JITHighLevelPipeline.empty() ||
60+
!JITMidLevelPipeline.empty() || !JITLowLevelPipeline.empty();
61+
}
62+
63+
std::string cudaq::config::BackendEndConfigEntry::getPassPipeline(
64+
std::string_view deployStage, std::string_view finalizeStage) const {
65+
if (!TargetPassPipeline.empty())
66+
return TargetPassPipeline;
67+
68+
std::string pipeline;
69+
auto append = [&](std::string_view stage) {
70+
if (stage.empty())
71+
return;
72+
if (!pipeline.empty())
73+
pipeline += ",";
74+
pipeline += stage;
75+
};
76+
77+
append(JITHighLevelPipeline);
78+
append(deployStage);
79+
append(JITMidLevelPipeline);
80+
append(finalizeStage);
81+
append(JITLowLevelPipeline);
82+
return pipeline;
83+
}
Lines changed: 6 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* the terms of the Apache License 2.0 which accompanies this distribution. *
77
******************************************************************************/
88

9-
#include "cudaq/Support/TargetConfigYaml.h"
9+
#include "cudaq/Target/StaticConfigYaml.h"
1010
#include "llvm/Support/Allocator.h"
1111
#include "llvm/Support/Base64.h"
1212
#include "llvm/Support/CommandLine.h"
@@ -162,7 +162,7 @@ static std::string processSimBackendConfig(
162162
}
163163

164164
std::string cudaq::config::processRuntimeArgs(
165-
const cudaq::config::TargetConfig &config,
165+
const cudaq::config::StaticConfig &config,
166166
const std::map<std::string, std::string> &args) {
167167
std::stringstream output;
168168
if (config.BackendConfig.has_value())
@@ -355,8 +355,8 @@ void MappingTraits<cudaq::config::BackendFeatureMap>::mapping(
355355
io.mapRequired("config", info.Config);
356356
}
357357

358-
void MappingTraits<cudaq::config::TargetConfig>::mapping(
359-
IO &io, cudaq::config::TargetConfig &info) {
358+
void MappingTraits<cudaq::config::StaticConfig>::mapping(
359+
IO &io, cudaq::config::StaticConfig &info) {
360360
io.mapRequired("name", info.Name);
361361
io.mapRequired("description", info.Description);
362362
io.mapOptional("warning", info.WarningMsg);
@@ -366,8 +366,8 @@ void MappingTraits<cudaq::config::TargetConfig>::mapping(
366366
io.mapOptional("configuration-matrix", info.ConfigMap);
367367
}
368368

369-
std::string MappingTraits<cudaq::config::TargetConfig>::validate(
370-
IO &io, cudaq::config::TargetConfig &info) {
369+
std::string MappingTraits<cudaq::config::StaticConfig>::validate(
370+
IO &io, cudaq::config::StaticConfig &info) {
371371
// There should only ever be 1 machine-configuration entry in the target
372372
// arguments.
373373
unsigned count = 0;
@@ -414,76 +414,3 @@ std::string MappingTraits<cudaq::config::MachineArchitectureConfig>::validate(
414414
}
415415
} // namespace yaml
416416
} // namespace llvm
417-
418-
std::string cudaq::config::TargetConfig::getCodeGenSpec(
419-
const std::map<std::string, std::string> &targetArgs) const {
420-
// Check whether we have a per-machine config
421-
const auto machineConfigIter = std::find_if(
422-
TargetArguments.begin(), TargetArguments.end(),
423-
[&](const cudaq::config::TargetArgument &argConfig) {
424-
return argConfig.Type == cudaq::config::ArgumentType::MachineConfig;
425-
});
426-
if (machineConfigIter == TargetArguments.end()) {
427-
// No machine specific config
428-
return BackendConfig.has_value() ? BackendConfig->CodegenEmission : "";
429-
}
430-
431-
// Get the machine name from the CLI argument
432-
std::string machineName;
433-
for (const auto &[argKey, argVal] : targetArgs) {
434-
if (argKey == machineConfigIter->PlatformArgKey) {
435-
machineName = argVal;
436-
break;
437-
}
438-
}
439-
440-
if (!machineName.empty()) {
441-
// Check for match
442-
for (auto &archConfig : machineConfigIter->MachineConfigs) {
443-
// Check names first
444-
if (std::find(archConfig.MachineNames.begin(),
445-
archConfig.MachineNames.end(),
446-
machineName) != archConfig.MachineNames.end()) {
447-
return archConfig.Configuration.CodegenEmission;
448-
}
449-
// Check pattern if provided
450-
if (!archConfig.MachinePattern.empty()) {
451-
llvm::Regex re(archConfig.MachinePattern);
452-
if (re.match(machineName)) {
453-
return archConfig.Configuration.CodegenEmission;
454-
}
455-
}
456-
}
457-
}
458-
459-
// No machine specific config rule matches, fallback to the default backend
460-
// config
461-
return BackendConfig.has_value() ? BackendConfig->CodegenEmission : "";
462-
}
463-
464-
bool cudaq::config::BackendEndConfigEntry::hasPassPipeline() const {
465-
return !TargetPassPipeline.empty() || !JITHighLevelPipeline.empty() ||
466-
!JITMidLevelPipeline.empty() || !JITLowLevelPipeline.empty();
467-
}
468-
469-
std::string cudaq::config::BackendEndConfigEntry::getPassPipeline(
470-
std::string_view deployStage, std::string_view finalizeStage) const {
471-
if (!TargetPassPipeline.empty())
472-
return TargetPassPipeline;
473-
474-
std::string pipeline;
475-
auto append = [&](std::string_view stage) {
476-
if (stage.empty())
477-
return;
478-
if (!pipeline.empty())
479-
pipeline += ",";
480-
pipeline += stage;
481-
};
482-
483-
append(JITHighLevelPipeline);
484-
append(deployStage);
485-
append(JITMidLevelPipeline);
486-
append(finalizeStage);
487-
append(JITLowLevelPipeline);
488-
return pipeline;
489-
}

cudaq/tools/cudaq-target-conf/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,5 @@ set(LLVM_LINK_COMPONENTS Support ${LLVM_TARGETS_TO_BUILD})
1010

1111
set(EXE_NAME cudaq-target-conf)
1212
add_llvm_executable(${EXE_NAME} cudaq-target-conf.cpp)
13-
target_link_libraries(${EXE_NAME} PUBLIC CUDAQTargetConfigUtil)
13+
target_link_libraries(${EXE_NAME} PUBLIC CUDAQTargetConfigYaml)
1414
install(TARGETS ${EXE_NAME} DESTINATION bin)

cudaq/tools/cudaq-target-conf/cudaq-target-conf.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* the terms of the Apache License 2.0 which accompanies this distribution. *
77
******************************************************************************/
88

9-
#include "cudaq/Support/TargetConfigYaml.h"
9+
#include "cudaq/Target/StaticConfigYaml.h"
1010
#include "llvm/Support/Allocator.h"
1111
#include "llvm/Support/Base64.h"
1212
#include "llvm/Support/CommandLine.h"
@@ -120,7 +120,7 @@ int main(int argc, char **argv) {
120120
std::exit(ec.value());
121121
}
122122
}
123-
cudaq::config::TargetConfig config;
123+
cudaq::config::StaticConfig config;
124124
llvm::yaml::Input Input(*(fileOrErr.get()));
125125
Input >> config;
126126

python/extension/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ if(APPLE)
5959
set(_quakeDialects_extra_link_libs
6060
cudaq-mlir-runtime
6161
MLIRPass
62-
CUDAQTargetConfigUtil
62+
CUDAQTargetConfig
6363
cudaq-python-interop
6464
cudaq-platform-default
6565
)
@@ -80,7 +80,7 @@ else()
8080
OptCodeGen
8181
OptTransforms
8282
MLIRPass
83-
CUDAQTargetConfigUtil
83+
CUDAQTargetConfig
8484
cudaq-python-interop
8585
cudaq-platform-default
8686
cudaq-qir-verifier

0 commit comments

Comments
 (0)