@@ -641,6 +641,20 @@ def executorch_generated_lib(
641641 if not aten_mode and not functions_yaml_target and not custom_ops_yaml_target :
642642 fail ("At least one of functions_yaml_target, custom_ops_yaml_target needs to be provided" )
643643
644+ if dtype_selective_build :
645+ if not is_xplat ():
646+ fail ("Dtype_selective_build is only available in xplat." )
647+
648+ # Dtype selective build is enabled on portable and optimized kernel libraries.
649+ if (not "//executorch/kernels/portable:operators" in kernel_deps ) and (not "//executorch/kernels/optimized:optimized_operators" in kernel_deps ):
650+ fail ("""Dtype_selective_build is enabled and kernel_deps does not contain portable or optimized dependencies.
651+ Please add one of these to kernel_deps:
652+ //executorch/kernels/portable:operators
653+ //executorch/kernels/optimized:optimized_operators
654+ This will tell the build system to rebuild portable/optimized with dtype selective build enabled.
655+ Currently, kernel_deps contains {}.
656+ """ .format (kernel_deps ))
657+
644658 aten_suffix = "_aten" if aten_mode else ""
645659
646660 # merge functions.yaml with fallback yaml
@@ -725,7 +739,7 @@ def executorch_generated_lib(
725739
726740 portable_lib = []
727741 optimized_lib = []
728- if dtype_selective_build and is_xplat () :
742+ if dtype_selective_build :
729743 # Build portable headers lib. Used for portable and optimized kernel libraries.
730744 portable_header_lib = name + "_portable_header_lib"
731745 build_portable_header_lib (portable_header_lib , oplist_header_name , feature )
0 commit comments