@@ -892,16 +892,14 @@ build(const kernel_bundle<bundle_state::input> &InputBundle,
892
892
893
893
namespace ext ::oneapi::experimental {
894
894
895
- namespace detail {
896
- struct create_bundle_from_source_props ;
897
- struct build_source_bundle_props ;
898
- } // namespace detail
899
-
900
895
// ///////////////////////
901
896
// PropertyT syclex::include_files
902
897
// ///////////////////////
903
898
struct include_files
904
- : detail::run_time_property_key<detail::PropKind::IncludeFiles> {
899
+ : new_properties::detail::property_base<include_files> {
900
+ static constexpr std::string_view property_name{
901
+ " sycl::ext::oneapi::experimental::include_files" };
902
+
905
903
include_files ();
906
904
include_files (const std::string &name, const std::string &content) {
907
905
record.emplace_back (std::make_pair (name, content));
@@ -911,61 +909,53 @@ struct include_files
911
909
}
912
910
std::vector<std::pair<std::string, std::string>> record;
913
911
};
914
- using include_files_key = include_files;
915
-
916
- template <>
917
- struct is_property_key_of <include_files_key,
918
- detail::create_bundle_from_source_props>
919
- : std::true_type {};
920
912
921
913
// ///////////////////////
922
914
// PropertyT syclex::build_options
923
915
// ///////////////////////
924
- struct build_options
925
- : detail::run_time_property_key<detail::PropKind::BuildOptions> {
916
+ struct build_options : new_properties::detail::property_base<build_options> {
917
+ static constexpr std::string_view property_name{
918
+ " sycl::ext::oneapi::experimental::build_options" };
926
919
std::vector<std::string> opts;
927
920
build_options (const std::string &optsArg) : opts{optsArg} {}
928
921
build_options (const std::vector<std::string> &optsArg) : opts(optsArg) {}
929
922
};
930
- using build_options_key = build_options;
931
-
932
- template <>
933
- struct is_property_key_of <build_options_key, detail::build_source_bundle_props>
934
- : std::true_type {};
935
923
936
924
// ///////////////////////
937
925
// PropertyT syclex::save_log
938
926
// ///////////////////////
939
- struct save_log : detail::run_time_property_key<detail::PropKind::BuildLog> {
927
+ struct save_log : new_properties::detail::property_base<save_log> {
928
+ static constexpr std::string_view property_name{
929
+ " sycl::ext::oneapi::experimental::save_log" };
940
930
std::string *log;
941
931
save_log (std::string *logArg) : log(logArg) {}
942
932
};
943
- using save_log_key = save_log;
944
-
945
- template <>
946
- struct is_property_key_of <save_log_key, detail::build_source_bundle_props>
947
- : std::true_type {};
948
933
949
934
// ///////////////////////
950
935
// PropertyT syclex::registered_kernel_names
951
936
// ///////////////////////
952
937
struct registered_kernel_names
953
- : detail::run_time_property_key<detail::PropKind::RegisteredKernelNames> {
938
+ : new_properties::detail::property_base<registered_kernel_names> {
939
+ static constexpr std::string_view property_name{
940
+ " sycl::ext::oneapi::experimental::registered_kernel_names" };
954
941
std::vector<std::string> kernel_names;
955
942
registered_kernel_names () {}
956
943
registered_kernel_names (const std::string &knArg) : kernel_names{knArg} {}
957
944
registered_kernel_names (const std::vector<std::string> &knsArg)
958
945
: kernel_names(knsArg) {}
959
946
void add (const std::string &name) { kernel_names.push_back (name); }
960
947
};
961
- using registered_kernel_names_key = registered_kernel_names;
962
-
963
- template <>
964
- struct is_property_key_of <registered_kernel_names_key,
965
- detail::build_source_bundle_props> : std::true_type {
966
- };
967
948
968
949
namespace detail {
950
+ template <typename property_list_ty>
951
+ inline constexpr bool are_properties_valid_for_create_bundle_from_source =
952
+ new_properties::all_properties_in_v<property_list_ty, include_files>;
953
+
954
+ template <typename property_list_ty>
955
+ inline constexpr bool are_properties_valid_for_build_source_bundle =
956
+ new_properties::all_properties_in_v<property_list_ty, build_options,
957
+ save_log, registered_kernel_names>;
958
+
969
959
// forward decls
970
960
__SYCL_EXPORT bool is_source_kernel_bundle_supported (backend BE,
971
961
source_language Language);
@@ -1054,12 +1044,10 @@ build_from_source(kernel_bundle<bundle_state::ext_oneapi_source> &SourceKB,
1054
1044
// ///////////////////////
1055
1045
// syclex::create_kernel_bundle_from_source
1056
1046
// ///////////////////////
1057
- template <
1058
- typename PropertyListT = empty_properties_t ,
1059
- typename = std::enable_if_t <
1060
- is_property_list_v<PropertyListT> &&
1061
- detail::all_props_are_keys_of<detail::create_bundle_from_source_props,
1062
- PropertyListT>::value>>
1047
+ template <typename PropertyListT = new_properties::empty_properties_t ,
1048
+ typename = std::enable_if_t <
1049
+ detail::are_properties_valid_for_create_bundle_from_source<
1050
+ PropertyListT>>>
1063
1051
kernel_bundle<bundle_state::ext_oneapi_source> create_kernel_bundle_from_source (
1064
1052
const context &SyclContext, source_language Language,
1065
1053
const std::string &Source, PropertyListT props = {}) {
@@ -1073,12 +1061,10 @@ kernel_bundle<bundle_state::ext_oneapi_source> create_kernel_bundle_from_source(
1073
1061
}
1074
1062
1075
1063
#if (!defined(_HAS_STD_BYTE) || _HAS_STD_BYTE != 0)
1076
- template <
1077
- typename PropertyListT = empty_properties_t ,
1078
- typename = std::enable_if_t <
1079
- is_property_list_v<PropertyListT> &&
1080
- detail::all_props_are_keys_of<detail::create_bundle_from_source_props,
1081
- PropertyListT>::value>>
1064
+ template <typename PropertyListT = new_properties::empty_properties_t ,
1065
+ typename = std::enable_if_t <
1066
+ detail::are_properties_valid_for_create_bundle_from_source<
1067
+ PropertyListT>>>
1082
1068
kernel_bundle<bundle_state::ext_oneapi_source> create_kernel_bundle_from_source (
1083
1069
const context &SyclContext, source_language Language,
1084
1070
const std::vector<std::byte> &Bytes, PropertyListT props = {}) {
@@ -1096,12 +1082,10 @@ kernel_bundle<bundle_state::ext_oneapi_source> create_kernel_bundle_from_source(
1096
1082
// syclex::build(source_kb) => exe_kb
1097
1083
// ///////////////////////
1098
1084
1099
- template <typename PropertyListT = empty_properties_t ,
1100
- typename = std::enable_if_t <
1101
- is_property_list_v<PropertyListT> &&
1102
- detail::all_props_are_keys_of<detail::build_source_bundle_props,
1103
- PropertyListT>::value>>
1104
-
1085
+ template <
1086
+ typename PropertyListT = new_properties::empty_properties_t ,
1087
+ typename = std::enable_if_t <
1088
+ detail::are_properties_valid_for_build_source_bundle<PropertyListT>>>
1105
1089
kernel_bundle<bundle_state::executable>
1106
1090
build (kernel_bundle<bundle_state::ext_oneapi_source> &SourceKB,
1107
1091
const std::vector<device> &Devices, PropertyListT props = {}) {
@@ -1122,11 +1106,10 @@ build(kernel_bundle<bundle_state::ext_oneapi_source> &SourceKB,
1122
1106
RegisteredKernelNamesVec);
1123
1107
}
1124
1108
1125
- template <typename PropertyListT = empty_properties_t ,
1126
- typename = std::enable_if_t <
1127
- is_property_list_v<PropertyListT> &&
1128
- detail::all_props_are_keys_of<detail::build_source_bundle_props,
1129
- PropertyListT>::value>>
1109
+ template <
1110
+ typename PropertyListT = new_properties::empty_properties_t ,
1111
+ typename = std::enable_if_t <
1112
+ detail::are_properties_valid_for_build_source_bundle<PropertyListT>>>
1130
1113
kernel_bundle<bundle_state::executable>
1131
1114
build (kernel_bundle<bundle_state::ext_oneapi_source> &SourceKB,
1132
1115
PropertyListT props = {}) {
0 commit comments