diff --git a/CMakeLists.txt b/CMakeLists.txt index 77e0527fc..4006a59d3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,13 +40,10 @@ set ( ly_common_source_files ${ly_src_dir}/rotate.cc ${ly_src_dir}/rotate_common.cc ${ly_src_dir}/rotate_gcc.cc - ${ly_src_dir}/rotate_lsx.cc ${ly_src_dir}/rotate_win.cc ${ly_src_dir}/row_any.cc ${ly_src_dir}/row_common.cc ${ly_src_dir}/row_gcc.cc - ${ly_src_dir}/row_lasx.cc - ${ly_src_dir}/row_lsx.cc ${ly_src_dir}/row_rvv.cc ${ly_src_dir}/row_win.cc ${ly_src_dir}/scale_any.cc @@ -54,7 +51,6 @@ set ( ly_common_source_files ${ly_src_dir}/scale.cc ${ly_src_dir}/scale_common.cc ${ly_src_dir}/scale_gcc.cc - ${ly_src_dir}/scale_lsx.cc ${ly_src_dir}/scale_rgb.cc ${ly_src_dir}/scale_rvv.cc ${ly_src_dir}/scale_uv.cc @@ -162,10 +158,21 @@ if(LOONGARCH64) return 0; }" SUPPORTS_LASX) if(SUPPORTS_LSX) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mlsx") + # These kernels use only LSX (128-bit) instructions and must not be + # compiled with -mlasx, which would let the compiler emit 256-bit LASX + # code (e.g. for stack-array copies) and crash on LSX-only CPUs. + add_library(${ly_lib_name}_lsx OBJECT + ${ly_src_dir}/rotate_lsx.cc + ${ly_src_dir}/row_lsx.cc + ${ly_src_dir}/scale_lsx.cc) + target_compile_options(${ly_lib_name}_lsx PRIVATE -mlsx) + list(APPEND ly_lib_parts $) endif() if(SUPPORTS_LASX) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mlasx") + add_library(${ly_lib_name}_lasx OBJECT + ${ly_src_dir}/row_lasx.cc) + target_compile_options(${ly_lib_name}_lasx PRIVATE -mlasx) + list(APPEND ly_lib_parts $) endif() endif()