[CMake,simd] unify WITH_SSE2, WITH_AVX2, WITH_NEON

* Add new CMake option WITH_SIMD to enable best available instruction
  type
* Unify simd related defines in single header
This commit is contained in:
akallabeth
2024-11-27 11:29:48 +01:00
parent 4b35fe8cfa
commit b4976163cd
39 changed files with 399 additions and 387 deletions

View File

@@ -409,10 +409,6 @@ endif(APPLE)
if(ANDROID)
set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS ${ANDROID_LIBRARY_USE_LIB64_PATHS})
if(${ANDROID_ABI} STREQUAL "armeabi")
set(WITH_NEON OFF)
endif()
if(ANDROID_ABI STREQUAL arm64-v8a)
include(CheckCCompilerFlag)
check_c_compiler_flag("-mfloat-abi=softfp" ABI_SOFTFP_SUPPORTED)

View File

@@ -1,21 +1,21 @@
message("PRELOADING cache")
set (CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "preload")
set (WITH_MANPAGES OFF CACHE BOOL "preload")
set (CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "preload")
set(CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "preload")
set(WITH_MANPAGES OFF CACHE BOOL "preload")
set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "preload")
#set (UWAC_FORCE_STATIC_BUILD ON CACHE BOOL "preload")
#set (RDTK_FORCE_STATIC_BUILD ON CACHE BOOL "preload")
set (WINPR_UTILS_IMAGE_PNG ON CACHE BOOL "preload")
set (WINPR_UTILS_IMAGE_JPEG ON CACHE BOOL "preload")
set (WINPR_UTILS_IMAGE_WEBP ON CACHE BOOL "preload")
set (WITH_BINARY_VERSIONING ON CACHE BOOL "preload")
set (WITH_INTERNAL_RC4 ON CACHE BOOL "preload")
set (WITH_INTERNAL_MD4 ON CACHE BOOL "preload")
set (WITH_INTERNAL_MD5 ON CACHE BOOL "preload")
set (WITH_SAMPLE ON CACHE BOOL "preload")
set (WITH_FFMPEG ON CACHE BOOL "preload")
set (WITH_SWSCALE ON CACHE BOOL "preload")
set (WITH_DSP_FFMPEG ON CACHE BOOL "preload")
set (WITH_FREERDP_DEPRECATED_COMMANDLINE ON CACHE BOOL "preload")
set (WITH_PULSE ON CACHE BOOL "preload")
set (WITH_OPAQUE_SETTINGS ON CACHE BOOL "preload")
set (WITH_VERBOSE_WINPR_ASSERT OFF CACHE BOOL "preload")
set(WINPR_UTILS_IMAGE_PNG ON CACHE BOOL "preload")
set(WINPR_UTILS_IMAGE_JPEG ON CACHE BOOL "preload")
set(WINPR_UTILS_IMAGE_WEBP ON CACHE BOOL "preload")
set(WITH_BINARY_VERSIONING ON CACHE BOOL "preload")
set(WITH_INTERNAL_RC4 ON CACHE BOOL "preload")
set(WITH_INTERNAL_MD4 ON CACHE BOOL "preload")
set(WITH_INTERNAL_MD5 ON CACHE BOOL "preload")
set(WITH_SAMPLE ON CACHE BOOL "preload")
set(WITH_FFMPEG ON CACHE BOOL "preload")
set(WITH_SWSCALE ON CACHE BOOL "preload")
set(WITH_DSP_FFMPEG ON CACHE BOOL "preload")
set(WITH_FREERDP_DEPRECATED_COMMANDLINE ON CACHE BOOL "preload")
set(WITH_PULSE ON CACHE BOOL "preload")
set(WITH_OPAQUE_SETTINGS ON CACHE BOOL "preload")
set(WITH_VERBOSE_WINPR_ASSERT OFF CACHE BOOL "preload")

View File

@@ -1,14 +1,14 @@
message("PRELOADING android cache")
set (CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "preload")
set(CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "preload")
set(CMAKE_TOOLCHAIN_FILE "$ANDROID_NDK/build/cmake/android.toolchain.cmake" CACHE PATH "ToolChain file")
set (WITH_SANITIZE_ADDRESS ON CACHE BOOL "build with address sanitizer")
set(WITH_SANITIZE_ADDRESS ON CACHE BOOL "build with address sanitizer")
set(FREERDP_EXTERNAL_SSL_PATH $ENV{ANDROID_SSL_PATH} CACHE PATH "android ssl")
# ANDROID_NDK and ANDROID_SDK must be set as environment variable
#set(ANDROID_NDK $ENV{ANDROID_SDK} CACHE PATH "Android NDK")
#set(ANDROID_SDK "${ANDROID_NDK}" CACHE PATH "android SDK")
set (WITH_FREERDP_DEPRECATED_COMMANDLINE ON CACHE BOOL "Enable deprecated command line options")
set (WITH_KRB5 OFF CACHE BOOL "Kerberos support")
set (WITH_CLIENT_SDL OFF CACHE BOOL "SDL client")
set (WITH_SERVER OFF CACHE BOOL "ci default")
set (WITH_X11 OFF CACHE BOOL "ci default")
set (WITH_LIBRARY_VERSIONING OFF CACHE BOOL "ci default")
set(WITH_FREERDP_DEPRECATED_COMMANDLINE ON CACHE BOOL "Enable deprecated command line options")
set(WITH_KRB5 OFF CACHE BOOL "Kerberos support")
set(WITH_CLIENT_SDL OFF CACHE BOOL "SDL client")
set(WITH_SERVER OFF CACHE BOOL "ci default")
set(WITH_X11 OFF CACHE BOOL "ci default")
set(WITH_LIBRARY_VERSIONING OFF CACHE BOOL "ci default")

View File

@@ -1,18 +1,17 @@
set (CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "preload")
set (WINPR_UTILS_IMAGE_JPEG ON CACHE BOOL "preload")
set (WINPR_UTILS_IMAGE_WEBP ON CACHE BOOL "preload")
set (WINPR_UTILS_IMAGE_PNG ON CACHE BOOL "preload")
set (WITH_CAIRO ON CACHE BOOL "preload")
set (WITH_DSP_EXPERIMENTAL ON CACHE BOOL "preload")
set (WITH_DSP_FFMPEG ON CACHE BOOL "preload")
set (WITH_FFMPEG ON CACHE BOOL "preload")
set (WITH_INTERNAL_RC4 ON CACHE BOOL "preload")
set (WITH_INTERNAL_MD4 ON CACHE BOOL "preload")
set (WITH_INTERNAL_MD5 ON CACHE BOOL "preload")
set (WITH_OPUS ON CACHE BOOL "preload")
set (WITH_PROXY_EMULATE_SMARTCARD ON CACHE BOOL "preload")
set (WITH_PULSE ON CACHE BOOL "preload")
set (WITH_SMARTCARD_INSPECT ON CACHE BOOL "preload")
set (WITH_SOXR ON CACHE BOOL "preload")
set (WITH_UNICODE_BUILTIN ON CACHE BOOL "preload")
set(CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "preload")
set(WINPR_UTILS_IMAGE_JPEG ON CACHE BOOL "preload")
set(WINPR_UTILS_IMAGE_WEBP ON CACHE BOOL "preload")
set(WINPR_UTILS_IMAGE_PNG ON CACHE BOOL "preload")
set(WITH_CAIRO ON CACHE BOOL "preload")
set(WITH_DSP_EXPERIMENTAL ON CACHE BOOL "preload")
set(WITH_DSP_FFMPEG ON CACHE BOOL "preload")
set(WITH_FFMPEG ON CACHE BOOL "preload")
set(WITH_INTERNAL_RC4 ON CACHE BOOL "preload")
set(WITH_INTERNAL_MD4 ON CACHE BOOL "preload")
set(WITH_INTERNAL_MD5 ON CACHE BOOL "preload")
set(WITH_OPUS ON CACHE BOOL "preload")
set(WITH_PROXY_EMULATE_SMARTCARD ON CACHE BOOL "preload")
set(WITH_PULSE ON CACHE BOOL "preload")
set(WITH_SMARTCARD_INSPECT ON CACHE BOOL "preload")
set(WITH_SOXR ON CACHE BOOL "preload")
set(WITH_UNICODE_BUILTIN ON CACHE BOOL "preload")

View File

@@ -1,18 +1,18 @@
message("PRELOADING iOS cache")
set (CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "preload")
set (CMAKE_TOOLCHAIN_FILE "${CMAKE_SOURCE_DIR}/cmake/ios.toolchain.cmake" CACHE PATH "cmake toolchain file")
set (CMAKE_BUILD_TYPE "Release" CACHE STRING "build type")
set (CMAKE_OSX_ARCHITECTURES "arm64" CACHE STRING "iOS platform to build")
set (CMAKE_OSX_DEPLOYMENT_TARGET "10.0" CACHE STRING "iOS minimum target")
set (ENABLE_BITCODE OFF CACHE BOOL "iOS default")
set (BUILD_TESTING ON CACHE BOOL "iOS default")
set (WITH_SANITIZE_ADDRESS ON CACHE BOOL "build with address sanitizer")
set (WITH_CLIENT OFF CACHE BOOL "disable iOS client")
set (WITH_SERVER OFF CACHE BOOL "disable iOS server")
set (WITH_KRB5 OFF CACHE BOOL "Kerberos support")
set (WITH_CLIENT_SDL OFF CACHE BOOL "iOS preload")
set (WITH_FFMPEG OFF CACHE BOOL "iOS preload")
set (WITH_SWSCALE OFF CACHE BOOL "iOS preload")
set (WITH_NEON ON CACHE BOOL "iOS preload")
set (WITH_OPUS OFF CACHE BOOL "iOS preload")
set (BUILD_SHARED_LIBS ON CACHE BOOL "iOS preload")
set(CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "preload")
set(CMAKE_TOOLCHAIN_FILE "${CMAKE_SOURCE_DIR}/cmake/ios.toolchain.cmake" CACHE PATH "cmake toolchain file")
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "build type")
set(CMAKE_OSX_ARCHITECTURES "arm64" CACHE STRING "iOS platform to build")
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.0" CACHE STRING "iOS minimum target")
set(ENABLE_BITCODE OFF CACHE BOOL "iOS default")
set(BUILD_TESTING ON CACHE BOOL "iOS default")
set(WITH_SANITIZE_ADDRESS ON CACHE BOOL "build with address sanitizer")
set(WITH_CLIENT OFF CACHE BOOL "disable iOS client")
set(WITH_SERVER OFF CACHE BOOL "disable iOS server")
set(WITH_KRB5 OFF CACHE BOOL "Kerberos support")
set(WITH_CLIENT_SDL OFF CACHE BOOL "iOS preload")
set(WITH_FFMPEG OFF CACHE BOOL "iOS preload")
set(WITH_SWSCALE OFF CACHE BOOL "iOS preload")
set(WITH_SIMD ON CACHE BOOL "iOS preload")
set(WITH_OPUS OFF CACHE BOOL "iOS preload")
set(BUILD_SHARED_LIBS ON CACHE BOOL "iOS preload")

View File

@@ -1,18 +1,18 @@
message("PRELOADING iOS cache")
set (CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "preload")
set (CMAKE_TOOLCHAIN_FILE "${CMAKE_SOURCE_DIR}/cmake/ios.toolchain.cmake" CACHE PATH "cmake toolchain file")
set (CMAKE_BUILD_TYPE "Debug" CACHE STRING "build type")
set (CMAKE_OSX_ARCHITECTURES "arm64" CACHE STRING "iOS platform to build")
set (CMAKE_OSX_DEPLOYMENT_TARGET "10.0" CACHE STRING "iOS minimum target")
set (ENABLE_BITCODE OFF CACHE BOOL "iOS default")
set (BUILD_TESTING ON CACHE BOOL "iOS default")
set (WITH_SANITIZE_ADDRESS ON CACHE BOOL "build with address sanitizer")
set (WITH_CLIENT OFF CACHE BOOL "disable iOS client")
set (WITH_SERVER OFF CACHE BOOL "disable iOS server")
set (WITH_KRB5 OFF CACHE BOOL "Kerberos support")
set (WITH_CLIENT_SDL OFF CACHE BOOL "iOS preload")
set (WITH_FFMPEG OFF CACHE BOOL "iOS preload")
set (WITH_SWSCALE OFF CACHE BOOL "iOS preload")
set (WITH_NEON ON CACHE BOOL "iOS preload")
set (WITH_OPUS OFF CACHE BOOL "iOS preload")
set (BUILD_SHARED_LIBS OFF CACHE BOOL "iOS preload")
set(CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "preload")
set(CMAKE_TOOLCHAIN_FILE "${CMAKE_SOURCE_DIR}/cmake/ios.toolchain.cmake" CACHE PATH "cmake toolchain file")
set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "build type")
set(CMAKE_OSX_ARCHITECTURES "arm64" CACHE STRING "iOS platform to build")
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.0" CACHE STRING "iOS minimum target")
set(ENABLE_BITCODE OFF CACHE BOOL "iOS default")
set(BUILD_TESTING ON CACHE BOOL "iOS default")
set(WITH_SANITIZE_ADDRESS ON CACHE BOOL "build with address sanitizer")
set(WITH_CLIENT OFF CACHE BOOL "disable iOS client")
set(WITH_SERVER OFF CACHE BOOL "disable iOS server")
set(WITH_KRB5 OFF CACHE BOOL "Kerberos support")
set(WITH_CLIENT_SDL OFF CACHE BOOL "iOS preload")
set(WITH_FFMPEG OFF CACHE BOOL "iOS preload")
set(WITH_SWSCALE OFF CACHE BOOL "iOS preload")
set(WITH_SIMD ON CACHE BOOL "iOS preload")
set(WITH_OPUS OFF CACHE BOOL "iOS preload")
set(BUILD_SHARED_LIBS OFF CACHE BOOL "iOS preload")

View File

@@ -1,55 +1,55 @@
message("PRELOADING cache")
set (CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "preload")
set (BUILD_TESTING_INTERNAL ON CACHE BOOL "preload")
set (WITH_MANPAGES ON CACHE BOOL "preload")
set (CMAKE_BUILD_TYPE "Debug" CACHE STRING "preload")
set (WITH_PULSE ON CACHE BOOL "preload")
set (WITH_CHANNELS ON CACHE BOOL "preload")
set (WITH_CUPS ON CACHE BOOL "preload")
set (WITH_WAYLAND ON CACHE BOOL "preload")
set (WITH_KRB5 ON CACHE BOOL "preload")
set (WITH_PCSC ON CACHE BOOL "preload")
set (WITH_JPEG ON CACHE BOOL "preload")
set (WITH_GSM ON CACHE BOOL "preload")
set (CHANNEL_URBDRC ON CACHE BOOL "preload")
set (CHANNEL_URBDRC_CLIENT ON CACHE BOOL "preload")
set (WITH_SERVER ON CACHE BOOL "preload")
set (WITH_DEBUG_ALL OFF CACHE BOOL "preload")
set (WITH_DEBUG_CAPABILITIES OFF CACHE BOOL "preload")
set (WITH_DEBUG_CERTIFICATE OFF CACHE BOOL "preload")
set (WITH_DEBUG_CHANNELS OFF CACHE BOOL "preload")
set (WITH_DEBUG_CLIPRDR OFF CACHE BOOL "preload")
set (WITH_DEBUG_RDPGFX OFF CACHE BOOL "preload")
set (WITH_DEBUG_DVC OFF CACHE BOOL "preload")
set (WITH_DEBUG_KBD OFF CACHE BOOL "preload")
set (WITH_DEBUG_LICENSE OFF CACHE BOOL "preload")
set (WITH_DEBUG_NEGO OFF CACHE BOOL "preload")
set (WITH_DEBUG_NLA OFF CACHE BOOL "preload")
set (WITH_DEBUG_NTLM OFF CACHE BOOL "preload")
set (WITH_DEBUG_RAIL OFF CACHE BOOL "preload")
set (WITH_DEBUG_RDP OFF CACHE BOOL "preload")
set (WITH_DEBUG_RDPEI OFF CACHE BOOL "preload")
set (WITH_DEBUG_REDIR OFF CACHE BOOL "preload")
set (WITH_DEBUG_RDPDR OFF CACHE BOOL "preload")
set (WITH_DEBUG_RFX OFF CACHE BOOL "preload")
set (WITH_DEBUG_SCARD OFF CACHE BOOL "preload")
set (WITH_DEBUG_SND OFF CACHE BOOL "preload")
set (WITH_DEBUG_SVC OFF CACHE BOOL "preload")
set (WITH_DEBUG_THREADS OFF CACHE BOOL "preload")
set (WITH_DEBUG_TIMEZONE OFF CACHE BOOL "preload")
set (WITH_DEBUG_TRANSPORT OFF CACHE BOOL "preload")
set (WITH_DEBUG_TSG OFF CACHE BOOL "preload")
set (WITH_DEBUG_TSMF OFF CACHE BOOL "preload")
set (WITH_DEBUG_WND OFF CACHE BOOL "preload")
set (WITH_DEBUG_X11 OFF CACHE BOOL "preload")
set (WITH_DEBUG_X11_LOCAL_MOVESIZE OFF CACHE BOOL "preload")
set (WITH_DEBUG_XV OFF CACHE BOOL "preload")
set (WITH_SAMPLE ON CACHE BOOL "preload")
set (WITH_NO_UNDEFINED ON CACHE BOOL "preload")
set (WITH_SANITIZE_ADDRESS ON CACHE BOOL "preload")
set (WITH_FFMPEG ON CACHE BOOL "preload")
set (WITH_SWSCALE ON CACHE BOOL "preload")
set (WITH_DSP_FFMPEG ON CACHE BOOL "preload")
set (WITH_PROXY ON CACHE BOOL "preload")
set (WITH_PROXY_MODULES ON CACHE BOOL "preload")
set (WITH_FREERDP_DEPRECATED_COMMANDLINE ON CACHE BOOL "preload")
set(CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "preload")
set(BUILD_TESTING_INTERNAL ON CACHE BOOL "preload")
set(WITH_MANPAGES ON CACHE BOOL "preload")
set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "preload")
set(WITH_PULSE ON CACHE BOOL "preload")
set(WITH_CHANNELS ON CACHE BOOL "preload")
set(WITH_CUPS ON CACHE BOOL "preload")
set(WITH_WAYLAND ON CACHE BOOL "preload")
set(WITH_KRB5 ON CACHE BOOL "preload")
set(WITH_PCSC ON CACHE BOOL "preload")
set(WITH_JPEG ON CACHE BOOL "preload")
set(WITH_GSM ON CACHE BOOL "preload")
set(CHANNEL_URBDRC ON CACHE BOOL "preload")
set(CHANNEL_URBDRC_CLIENT ON CACHE BOOL "preload")
set(WITH_SERVER ON CACHE BOOL "preload")
set(WITH_DEBUG_ALL OFF CACHE BOOL "preload")
set(WITH_DEBUG_CAPABILITIES OFF CACHE BOOL "preload")
set(WITH_DEBUG_CERTIFICATE OFF CACHE BOOL "preload")
set(WITH_DEBUG_CHANNELS OFF CACHE BOOL "preload")
set(WITH_DEBUG_CLIPRDR OFF CACHE BOOL "preload")
set(WITH_DEBUG_RDPGFX OFF CACHE BOOL "preload")
set(WITH_DEBUG_DVC OFF CACHE BOOL "preload")
set(WITH_DEBUG_KBD OFF CACHE BOOL "preload")
set(WITH_DEBUG_LICENSE OFF CACHE BOOL "preload")
set(WITH_DEBUG_NEGO OFF CACHE BOOL "preload")
set(WITH_DEBUG_NLA OFF CACHE BOOL "preload")
set(WITH_DEBUG_NTLM OFF CACHE BOOL "preload")
set(WITH_DEBUG_RAIL OFF CACHE BOOL "preload")
set(WITH_DEBUG_RDP OFF CACHE BOOL "preload")
set(WITH_DEBUG_RDPEI OFF CACHE BOOL "preload")
set(WITH_DEBUG_REDIR OFF CACHE BOOL "preload")
set(WITH_DEBUG_RDPDR OFF CACHE BOOL "preload")
set(WITH_DEBUG_RFX OFF CACHE BOOL "preload")
set(WITH_DEBUG_SCARD OFF CACHE BOOL "preload")
set(WITH_DEBUG_SND OFF CACHE BOOL "preload")
set(WITH_DEBUG_SVC OFF CACHE BOOL "preload")
set(WITH_DEBUG_THREADS OFF CACHE BOOL "preload")
set(WITH_DEBUG_TIMEZONE OFF CACHE BOOL "preload")
set(WITH_DEBUG_TRANSPORT OFF CACHE BOOL "preload")
set(WITH_DEBUG_TSG OFF CACHE BOOL "preload")
set(WITH_DEBUG_TSMF OFF CACHE BOOL "preload")
set(WITH_DEBUG_WND OFF CACHE BOOL "preload")
set(WITH_DEBUG_X11 OFF CACHE BOOL "preload")
set(WITH_DEBUG_X11_LOCAL_MOVESIZE OFF CACHE BOOL "preload")
set(WITH_DEBUG_XV OFF CACHE BOOL "preload")
set(WITH_SAMPLE ON CACHE BOOL "preload")
set(WITH_NO_UNDEFINED ON CACHE BOOL "preload")
set(WITH_SANITIZE_ADDRESS ON CACHE BOOL "preload")
set(WITH_FFMPEG ON CACHE BOOL "preload")
set(WITH_SWSCALE ON CACHE BOOL "preload")
set(WITH_DSP_FFMPEG ON CACHE BOOL "preload")
set(WITH_PROXY ON CACHE BOOL "preload")
set(WITH_PROXY_MODULES ON CACHE BOOL "preload")
set(WITH_FREERDP_DEPRECATED_COMMANDLINE ON CACHE BOOL "preload")

View File

@@ -1,17 +1,17 @@
message("PRELOADING mac cache")
set (CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "preload")
set (WITH_MANPAGES OFF CACHE BOOL "man pages")
set (CMAKE_BUILD_TYPE "Debug" CACHE STRING "build type")
set (WITH_CUPS ON CACHE BOOL "CUPS printing")
set (CHANNEL_URBDRC OFF CACHE BOOL "USB redirection")
set (WITH_X11 ON CACHE BOOL "Enable X11")
set (WITH_SERVER ON CACHE BOOL "build with server")
set (WITH_SAMPLE ON CACHE BOOL "build with sample")
set (BUILD_TESTING_INTERNAL ON CACHE BOOL "build testing")
set (WITH_SANITIZE_ADDRESS ON CACHE BOOL "build with address sanitizer")
set (WITH_FREERDP_DEPRECATED_COMMANDLINE ON CACHE BOOL "Enable deprecated command line options")
set (WITH_KRB5 OFF CACHE BOOL "Kerberos support")
set (WITH_WEBVIEW OFF CACHE BOOL "ci default")
set (WITH_FFMPEG OFF CACHE BOOL "ci default")
set (WITH_OPUS OFF CACHE BOOL "ci default")
set (WITH_SWSCALE OFF CACHE BOOL "ci default")
set(CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "preload")
set(WITH_MANPAGES OFF CACHE BOOL "man pages")
set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "build type")
set(WITH_CUPS ON CACHE BOOL "CUPS printing")
set(CHANNEL_URBDRC OFF CACHE BOOL "USB redirection")
set(WITH_X11 ON CACHE BOOL "Enable X11")
set(WITH_SERVER ON CACHE BOOL "build with server")
set(WITH_SAMPLE ON CACHE BOOL "build with sample")
set(BUILD_TESTING_INTERNAL ON CACHE BOOL "build testing")
set(WITH_SANITIZE_ADDRESS ON CACHE BOOL "build with address sanitizer")
set(WITH_FREERDP_DEPRECATED_COMMANDLINE ON CACHE BOOL "Enable deprecated command line options")
set(WITH_KRB5 OFF CACHE BOOL "Kerberos support")
set(WITH_WEBVIEW OFF CACHE BOOL "ci default")
set(WITH_FFMPEG OFF CACHE BOOL "ci default")
set(WITH_OPUS OFF CACHE BOOL "ci default")
set(WITH_SWSCALE OFF CACHE BOOL "ci default")

View File

@@ -2,8 +2,7 @@ message("PRELOADING cache")
set(CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "preload")
set(WITH_SERVER ON CACHE BOOL "qa default")
set(WITH_SAMPLE ON CACHE BOOL "qa default")
set(WITH_SSE2 ON CACHE BOOL "qa default")
set(WITH_NEON ON CACHE BOOL "qa default")
set(WITH_SIMD ON CACHE BOOL "qa default")
set(WITH_VERBOSE_WINPR_ASSERT OFF CACHE BOOL "qa default")
set(ENABLE_WARNING_VERBOSE ON CACHE BOOL "preload")
set(BUILD_SHARED_LIBS OFF CACHE BOOL "qa default")

View File

@@ -11,8 +11,7 @@ set(WITH_CUPS ON CACHE BOOL "qa default")
set(WITH_OPENCL ON CACHE BOOL "qa default")
set(WITH_PCSC ON CACHE BOOL "qa default")
set(WITH_SOXR ON CACHE BOOL "qa default")
set(WITH_SSE2 ON CACHE BOOL "qa default")
set(WITH_NEON ON CACHE BOOL "qa default")
set(WITH_SIMD ON CACHE BOOL "qa default")
set(WITH_SWSCALE ON CACHE BOOL "qa default")
set(WITH_DSP_FFMPEG ON CACHE BOOL "qa default")
set(WITH_FFMPEG ON CACHE BOOL "qa default")

View File

@@ -1,15 +1,15 @@
message("PRELOADING cache")
set (CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "preload")
set (WITH_MANPAGES ON CACHE BOOL "man pages")
set (CMAKE_BUILD_TYPE "Debug" CACHE STRING "build type")
set (WITH_CUPS OFF CACHE BOOL "CUPS printing")
set (WITH_KRB5 ON CACHE BOOL "Kerberos support")
set (WITH_ALSA OFF CACHE BOOL "alsa audio")
set (WITH_FFMPEG OFF CACHE BOOL "ffmepg support")
set (WITH_XV OFF CACHE BOOL "xvideo support")
set (BUILD_TESTING_INTERNAL ON CACHE BOOL "build testing")
set (WITH_XSHM OFF CACHE BOOL "build with xshm support")
set (WITH_SERVER ON CACHE BOOL "build with server")
set (WITH_SAMPLE ON CACHE BOOL "build with sample")
set (WITH_SANITIZE_ADDRESS ON)
set (WITH_FREERDP_DEPRECATED_COMMANDLINE ON CACHE BOOL "Enable deprecated command line options")
set(CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "preload")
set(WITH_MANPAGES ON CACHE BOOL "man pages")
set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "build type")
set(WITH_CUPS OFF CACHE BOOL "CUPS printing")
set(WITH_KRB5 ON CACHE BOOL "Kerberos support")
set(WITH_ALSA OFF CACHE BOOL "alsa audio")
set(WITH_FFMPEG OFF CACHE BOOL "ffmepg support")
set(WITH_XV OFF CACHE BOOL "xvideo support")
set(BUILD_TESTING_INTERNAL ON CACHE BOOL "build testing")
set(WITH_XSHM OFF CACHE BOOL "build with xshm support")
set(WITH_SERVER ON CACHE BOOL "build with server")
set(WITH_SAMPLE ON CACHE BOOL "build with sample")
set(WITH_SANITIZE_ADDRESS ON)
set(WITH_FREERDP_DEPRECATED_COMMANDLINE ON CACHE BOOL "Enable deprecated command line options")

View File

@@ -1,21 +1,21 @@
message("PRELOADING windows cache")
set (CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "preload")
set (CMAKE_WINDOWS_VERSION "WIN7" CACHE STRING "windows build version")
set (BUILD_SHARED_LIBS OFF CACHE BOOL "build static linked executable")
set (CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded" CACHE STRING "MSVC runtime to use")
set (OPENSSL_USE_STATIC_LIBS ON CACHE BOOL "link OpenSSL static")
set (CMAKE_BUILD_TYPE "Debug" CACHE STRING "build type")
set (WITH_SERVER ON CACHE BOOL "build with server")
set (WITH_SAMPLE ON CACHE BOOL "build with sample")
set (WITH_SHADOW OFF CACHE BOOL "Do not build shadow server")
set (WITH_PLATFORM_SERVER OFF CACHE BOOL "Do not build platform server")
set (WITH_CLIENT_SDL ON CACHE BOOL "build with SDL client")
set (WITH_PROXY_MODULES "ON" CACHE BOOL "build proxy modules")
set (CHANNEL_URBDRC OFF CACHE BOOL "USB redirection")
set (BUILD_TESTING_INTERNAL ON CACHE BOOL "build testing")
set (WITH_FFMPEG OFF CACHE BOOL "ci default")
set (WITH_SWSCALE OFF CACHE BOOL "ci default")
set (WITH_WEBVIEW ON CACHE BOOL "ci default")
set (ZLIB_USE_STATIC_LIBS ON CACHE BOOL "ci default")
set (WITH_FREERDP_DEPRECATED_COMMANDLINE ON CACHE BOOL "Enable deprecated command line options")
set (WITH_SDL_LINK_SHARED OFF CACHE BOOL "ci default")
set(CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "preload")
set(CMAKE_WINDOWS_VERSION "WIN7" CACHE STRING "windows build version")
set(BUILD_SHARED_LIBS OFF CACHE BOOL "build static linked executable")
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded" CACHE STRING "MSVC runtime to use")
set(OPENSSL_USE_STATIC_LIBS ON CACHE BOOL "link OpenSSL static")
set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "build type")
set(WITH_SERVER ON CACHE BOOL "build with server")
set(WITH_SAMPLE ON CACHE BOOL "build with sample")
set(WITH_SHADOW OFF CACHE BOOL "Do not build shadow server")
set(WITH_PLATFORM_SERVER OFF CACHE BOOL "Do not build platform server")
set(WITH_CLIENT_SDL ON CACHE BOOL "build with SDL client")
set(WITH_PROXY_MODULES "ON" CACHE BOOL "build proxy modules")
set(CHANNEL_URBDRC OFF CACHE BOOL "USB redirection")
set(BUILD_TESTING_INTERNAL ON CACHE BOOL "build testing")
set(WITH_FFMPEG OFF CACHE BOOL "ci default")
set(WITH_SWSCALE OFF CACHE BOOL "ci default")
set(WITH_WEBVIEW ON CACHE BOOL "ci default")
set(ZLIB_USE_STATIC_LIBS ON CACHE BOOL "ci default")
set(WITH_FREERDP_DEPRECATED_COMMANDLINE ON CACHE BOOL "Enable deprecated command line options")
set(WITH_SDL_LINK_SHARED OFF CACHE BOOL "ci default")

View File

@@ -22,11 +22,6 @@ option(WITH_MANPAGES "Generate manpages." ${MANPAGE_DEF})
option(WITH_PROFILER "Compile profiler." OFF)
option(WITH_GPROF "Compile with GProf profiler." OFF)
option(WITH_SSE2 "Enable SSE2 optimization." OFF)
cmake_dependent_option(WITH_AVX2 "Compile AVX2 optimizations" ON "WITH_SSE2" OFF)
option(WITH_NEON "Enable NEON optimization." OFF)
option(WITH_JPEG "Use JPEG decoding." OFF)
include(CompilerDetect)

View File

@@ -1,44 +1,104 @@
include(CheckSymbolExists)
option(WITH_SIMD "Enable best platform specific vector instruction support" ON)
cmake_dependent_option(WITH_AVX2 "Compile AVX2 optimizations." ON "WITH_SIMD" OFF)
check_symbol_exists("__i586__" "" X86_i586)
check_symbol_exists("__i686__" "" X86_i686)
check_symbol_exists("__X86__" "" X86_X86)
check_symbol_exists("_X86_" "" X86_X862)
check_symbol_exists("__I86__" "" X86_I86)
check_symbol_exists("__IA32__" "" X86_IA32)
check_symbol_exists("_M_IX86" "" X86_M_IX86)
check_symbol_exists("__amd64" "" X86_AMD64)
check_symbol_exists("__amd64__" "" X86_AMD642)
check_symbol_exists("__x86_64" "" X86_X86_64)
check_symbol_exists("__x86_64__" "" X86_X86_642)
check_symbol_exists("_M_X64" "" X86_X64)
check_symbol_exists("__ia64" "" X86_IA64)
check_symbol_exists("__ia64__" "" X86_IA642)
check_symbol_exists("_M_IA64" "" X86_M_IA64)
check_symbol_exists("_M_ARM64" "" MSVC_ARM64)
check_symbol_exists("__aarch64__" "" ARCH_ARM64)
check_symbol_exists("M_ARM" "" ARCH_M_ARM)
check_symbol_exists("_arm__" "" ARCH_ARM)
check_symbol_exists("_thumb__" "" ARCH_THUMB)
check_symbol_exists("_TARGET_ARCH_ARM" "" ARCH_ARM_TARGET)
check_symbol_exists("_TARGET_ARCH_THUMB" "" ARCH_ARM_TARGET_THUMB)
if(X86_i586 OR X86_i686 OR X86_X86 OR X86_X862 OR X86_I86 OR X86_IA32 OR X86_M_IX86 OR X86_AMD64 OR X86_AMD642
OR X86_X86_64 OR X86_X86_642 OR X86_X64 OR X86_IA64 OR X86_IA642 OR X86_M_IA64
)
set(HAVE_SSE_OR_AVX ON CACHE INTERNAL "internal")
else()
set(HAVE_SSE_OR_AVX OFF CACHE INTERNAL "internal")
if(WITH_SSE2)
message(WARNING "WITH_SSE2 is deprecated, use WITH_SIMD instead")
set(WITH_SIMD ON CACHE BOOL "WITH_SSE2")
endif()
if(WITH_NEON)
message(WARNING "WITH_NEON is deprecated, use WITH_SIMD instead")
set(WITH_SIMD ON CACHE BOOL "WITH_NEON")
endif()
if(MSVC_ARM64 OR ARCH_ARM64 OR ARCH_M_ARM OR ARCH_ARM OR ARCH_THUMB OR ARCH_ARM_TARGET OR ARCH_ARM_TARGET_THUMB)
set(HAVE_NEON ON CACHE INTERNAL "internal")
else()
set(HAVE_NEON OFF CACHE INTERNAL "internal")
endif()
macro(set_simd_source_file_properties INTRINSIC_TYPE)
if(ARGC LESS_EQUAL 1)
message(FATAL_ERROR "set_simd_source_file_properties called with invalid arguments: [${ARGC}] {${ARGN}")
endif()
if(MSVC_ARM64 OR ARCH_ARM64)
set(HAVE_NEON64 ON CACHE INTERNAL "internal")
else()
set(HAVE_NEON64 OFF CACHE INTERNAL "internal")
endif()
# see https://cmake.org/cmake/help/latest/variable/CMAKE_LANG_COMPILER_ID.html
set(GCC_CLANG_NAMES "AppleClang;Clang;CrayClang;FujitsuClang;GNU;IntelLLVM;TIClang;XLClang;IBMClang")
set(SSE_X86_LIST "i686;x86;X86")
set(SSE_LIST "x86_64;ia64;x64;AMD64;IA64;EM64T;${SSE_X86_LIST}")
set(NEON_LIST "arm;armv7;armv8b;armv8l")
set(SUPPORTED_INTRINSICS_LIST "neon;sse2;sse3;ssse3;sse4.1;sse4.2;avx2")
if(NOT "${INTRINSIC_TYPE}" IN_LIST SUPPORTED_INTRINSICS_LIST)
message(WARNING "Intrinsic type ${INTRINSIC_TYPE} not supported, only ${SUPPORTED_INTRINSICS_LIST} are available")
else()
set(SIMD_LINK_ARG "")
if(MSVC)
# https://learn.microsoft.com/en-us/cpp/build/reference/arch-x64?view=msvc-140
if("${CMAKE_SYSTEM_PROCESSOR}" IN_LIST SSE_LIST)
if("${CMAKE_SYSTEM_PROCESSOR}" IN_LIST SSE_X86_LIST)
# /arch:SSE2 is the default, so do nothing
set(SIMD_LINK_ARG "ignore")
if("${INTRINSIC_TYPE}" STREQUAL "avx2")
set(SIMD_LINK_ARG "/arch:AVX2")
endif()
else()
# /arch:SSE2 is the default, so do nothing
set(SIMD_LINK_ARG "ignore")
if("${INTRINSIC_TYPE}" STREQUAL "sse4.2")
set(SIMD_LINK_ARG "/arch:SSE4.2")
elseif("${INTRINSIC_TYPE}" STREQUAL "avx2")
set(SIMD_LINK_ARG "/arch:AVX2")
endif()
endif()
endif()
elseif("${CMAKE_C_COMPILER_ID}" IN_LIST GCC_CLANG_NAMES)
set(HAVE_SSE_AVX OFF)
foreach(ARCH ${CMAKE_OSX_ARCHITECTURES})
if("${ARCH}" IN_LIST SSE_LIST)
set(HAVE_SSE_AVX ON)
endif()
endforeach()
if("${CMAKE_SYSTEM_PROCESSOR}" IN_LIST SSE_LIST OR HAVE_SSE_AVX)
if("${INTRINSIC_TYPE}" STREQUAL "sse2")
set(SIMD_LINK_ARG "-msse2")
elseif("${INTRINSIC_TYPE}" STREQUAL "sse3")
set(SIMD_LINK_ARG "-msse3")
elseif("${INTRINSIC_TYPE}" STREQUAL "ssse3")
set(SIMD_LINK_ARG "-mssse3")
elseif("${INTRINSIC_TYPE}" STREQUAL "sse4.1")
set(SIMD_LINK_ARG "-msse4.1")
elseif("${INTRINSIC_TYPE}" STREQUAL "sse4.2")
set(SIMD_LINK_ARG "-msse4.2")
elseif("${INTRINSIC_TYPE}" STREQUAL "avx2")
set(SIMD_LINK_ARG "-mavx2")
endif()
endif()
else()
message(WARNING "[SIMD] Unsupported compiler ${CMAKE_C_COMPILER_ID}, ignoring")
endif()
if("${INTRINSIC_TYPE}" STREQUAL "neon")
set(HAVE_NEON OFF)
foreach(ARCH ${CMAKE_OSX_ARCHITECTURES})
if("${ARCH}" IN_LIST NEON_LIST)
set(HAVE_NEON ON)
endif()
endforeach()
if("${CMAKE_SYSTEM_PROCESSOR}" IN_LIST NEON_LIST OR HAVE_NEON)
if(MSVC)
set(SIMD_LINK_ARG "/arch:VFPv4")
elseif("${CMAKE_C_COMPILER_ID}" IN_LIST GCC_CLANG_NAMES)
set(SIMD_LINK_ARG "-mfpu=neon")
else()
message(WARNING "[SIMD] Unsupported compiler ${CMAKE_C_COMPILER_ID}, ignoring")
endif()
endif()
endif()
if(SIMD_LINK_ARG STREQUAL "")
message(NOTICE "INTRINSIC_TYPE=${INTRINSIC_TYPE}: not supported on target platform, ignoring")
elseif(SIMD_LINK_ARG STREQUAL "ignore")
message(NOTICE "INTRINSIC_TYPE=${INTRINSIC_TYPE}: does not require linker flags, enabled by default")
else()
message("[SIMD] linking ${INTRINSIC_TYPE} [${SIMD_LINK_ARG}]: ${ARGN}")
foreach(src ${ARGN})
set_source_files_properties(${src} PROPERTIES COMPILE_FLAGS "${SIMD_LINK_ARG}")
endforeach()
endif()
endif()
endmacro()

View File

@@ -21,9 +21,8 @@
#cmakedefine WITH_ADD_PLUGIN_TO_RPATH
#cmakedefine WITH_PROFILER
#cmakedefine WITH_GPROF
#cmakedefine WITH_SSE2
#cmakedefine WITH_SIMD
#cmakedefine WITH_AVX2
#cmakedefine WITH_NEON
#cmakedefine WITH_CUPS
#cmakedefine WITH_JPEG
#cmakedefine WITH_WIN8

View File

@@ -53,29 +53,9 @@ list(APPEND CODEC_SRCS ${CODEC_NEON_SRCS})
include(CompilerDetect)
include(DetectIntrinsicSupport)
if(WITH_SSE2)
if(HAVE_SSE_OR_AVX)
if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG)
if(CODEC_SSE2_SRCS)
set_source_files_properties(${CODEC_SSE2_SRCS} PROPERTIES COMPILE_FLAGS "-msse2")
endif()
endif()
if(MSVC)
if(CODEC_SSE2_SRCS)
set_source_files_properties(${CODEC_SSE2_SRCS} PROPERTIES COMPILE_FLAGS "/arch:SSE2")
endif()
endif()
endif()
endif()
if(WITH_NEON)
# aarch64 requires NEON by default, no flag required
if(HAVE_NEON AND NOT HAVE_NEON64)
if(CODEC_SSE2_SRCS)
set_source_files_properties(${CODEC_NEON_SRCS} PROPERTIES COMPILE_FLAGS "-mfpu=neon")
endif()
endif()
if(WITH_SIMD)
set_simd_source_file_properties("sse2" ${CODEC_SSE2_SRCS})
set_simd_source_file_properties("neon" ${CODEC_NEON_SRCS})
endif()
if(WITH_DSP_FFMPEG)

View File

@@ -26,19 +26,15 @@
#include "../nsc_types.h"
#include "nsc_neon.h"
#if defined(WITH_NEON)
#if defined(_M_ARM64) || defined(_M_ARM)
#define NEON_ENABLED
#endif
#endif
#include "../../core/simd.h"
#if defined(NEON_ENABLED)
#if defined(NEON_INTRINSICS_ENABLED)
#define TAG FREERDP_TAG("codec.nsc.neon")
#endif
void nsc_init_neon(NSC_CONTEXT* context)
{
#if defined(NEON_ENABLED)
#if defined(NEON_INTRINSICS_ENABLED)
if (!IsProcessorFeaturePresent(PF_ARM_NEON_INSTRUCTIONS_AVAILABLE))
return;

View File

@@ -24,13 +24,9 @@
#include "../rfx_types.h"
#include "rfx_neon.h"
#if defined(WITH_NEON)
#if defined(_M_ARM64) || defined(_M_ARM)
#define NEON_ENABLED
#endif
#endif
#include "../../core/simd.h"
#if defined(NEON_ENABLED)
#if defined(NEON_INTRINSICS_ENABLED)
#include <stdio.h>
#include <stdlib.h>
@@ -525,11 +521,11 @@ static void rfx_dwt_2d_extrapolate_decode_neon(INT16* buffer, INT16* temp)
rfx_dwt_2d_decode_extrapolate_block_neon(&buffer[3007], temp, 2);
rfx_dwt_2d_decode_extrapolate_block_neon(&buffer[0], temp, 1);
}
#endif // NEON_ENABLED
#endif // NEON_INTRINSICS_ENABLED
void rfx_init_neon(RFX_CONTEXT* context)
{
#if defined(NEON_ENABLED)
#if defined(NEON_INTRINSICS_ENABLED)
if (IsProcessorFeaturePresent(PF_ARM_NEON_INSTRUCTIONS_AVAILABLE))
{
DEBUG_RFX("Using NEON optimizations");

View File

@@ -23,13 +23,9 @@
#include "../nsc_types.h"
#include "nsc_sse2.h"
#if defined(WITH_SSE2)
#if defined(_M_IX86) || defined(_M_AMD64) || defined(_M_IA64) || defined(_M_IX86_AMD64)
#define SSE2_ENABLED
#endif
#endif
#include "../../core/simd.h"
#if defined(SSE2_ENABLED)
#if defined(SSE_AVX_INTRINSICS_ENABLED)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -388,7 +384,7 @@ static BOOL nsc_encode_sse2(NSC_CONTEXT* context, const BYTE* data, UINT32 scanl
void nsc_init_sse2(NSC_CONTEXT* context)
{
#if defined(SSE2_ENABLED)
#if defined(SSE_AVX_INTRINSICS_ENABLED)
if (!IsProcessorFeaturePresent(PF_XMMI64_INSTRUCTIONS_AVAILABLE))
return;

View File

@@ -24,13 +24,9 @@
#include "../rfx_types.h"
#include "rfx_sse2.h"
#if defined(WITH_SSE2)
#if defined(_M_IX86) || defined(_M_AMD64) || defined(_M_IA64) || defined(_M_IX86_AMD64)
#define SSE2_ENABLED
#endif
#endif
#include "../../core/simd.h"
#if defined(SSE2_ENABLED)
#if defined(SSE_AVX_INTRINSICS_ENABLED)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -488,7 +484,7 @@ static void rfx_dwt_2d_encode_sse2(INT16* WINPR_RESTRICT buffer, INT16* WINPR_RE
void rfx_init_sse2(RFX_CONTEXT* context)
{
#if defined(SSE2_ENABLED)
#if defined(SSE_AVX_INTRINSICS_ENABLED)
if (!IsProcessorFeaturePresent(PF_XMMI64_INSTRUCTIONS_AVAILABLE))
return;

View File

@@ -56,6 +56,7 @@ set(${MODULE_PREFIX}_GATEWAY_SRCS
)
set(${MODULE_PREFIX}_SRCS
simd.h
state.h
state.c
utils.c

39
libfreerdp/core/simd.h Normal file
View File

@@ -0,0 +1,39 @@
/**
* FreeRDP: A Remote Desktop Protocol Implementation
* SIMD support detection header
*
* Copyright 2024 Armin Novak <anovak@thincast.com>
* Copyright 2024 Thincast Technologies GmbH
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#pragma once
#include <freerdp/config.h>
/* https://sourceforge.net/p/predef/wiki/Architectures/
*
* contains a list of defined symbols for each compiler
*/
#if defined(WITH_SIMD)
#if defined(_M_IX86) || defined(_M_AMD64) || defined(_M_IA64) || defined(_M_IX86_AMD64) || \
defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) || \
defined(__i686__) || defined(__ia64__)
#define SSE_AVX_INTRINSICS_ENABLED
#endif
#if defined(_M_ARM64) || defined(_M_ARM) || defined(__arm) || defined(__aarch64__)
#define NEON_INTRINSICS_ENABLED
#endif
#endif

View File

@@ -79,43 +79,14 @@ add_library(freerdp-primitives OBJECT ${PRIMITIVES_SRCS})
include(CompilerDetect)
include(DetectIntrinsicSupport)
if(WITH_SSE2)
if(HAVE_SSE_OR_AVX)
if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG)
if(PRIMITIVES_SSE2_SRCS)
set_source_files_properties(${PRIMITIVES_SSE2_SRCS} PROPERTIES COMPILE_FLAGS "-msse2")
endif()
if(PRIMITIVES_SSE3_SRCS)
set_source_files_properties(${PRIMITIVES_SSE3_SRCS} PROPERTIES COMPILE_FLAGS "-msse3")
endif()
if(PRIMITIVES_SSSE3_SRCS)
set_source_files_properties(${PRIMITIVES_SSSE3_SRCS} PROPERTIES COMPILE_FLAGS "-mssse3")
endif()
if(PRIMITIVES_SSE4_1_SRCS)
set_source_files_properties(${PRIMITIVES_SSE4_1_SRCS} PROPERTIES COMPILE_FLAGS "-msse4.1")
endif()
if(PRIMITIVES_SSE4_2_SRCS)
set_source_files_properties(${PRIMITIVES_SSE4_2_SRCS} PROPERTIES COMPILE_FLAGS "-msse4.2")
endif()
if(PRIMITIVES_AVX2_SRCS AND WITH_AVX2)
set_source_files_properties(${PRIMITIVES_AVX2_SRCS} PROPERTIES COMPILE_FLAGS "-mavx2")
endif()
endif()
if(MSVC)
set_source_files_properties(${PRIMITIVES_OPT_SRCS} PROPERTIES COMPILE_FLAGS "/arch:SSE2")
endif()
endif()
elseif(WITH_NEON)
# aarch64 requires NEON by default, no flag required
if(HAVE_NEON AND NOT HAVE_NEON64)
if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG)
if(NOT MSVC_ARM64 AND NOT ARCH_ARM64)
set_source_files_properties(${PRIMITIVES_OPT_SRCS} PROPERTIES COMPILE_FLAGS "-mfpu=neon")
endif()
endif()
# TODO: Add MSVC equivalent
endif()
if(WITH_SIMD)
set_simd_source_file_properties("sse2" ${PRIMITIVES_SSE2_SRCS})
set_simd_source_file_properties("sse3" ${PRIMITIVES_SSE3_SRCS})
set_simd_source_file_properties("ssse3" ${PRIMITIVES_SSSE3_SRCS})
set_simd_source_file_properties("sse4.1" ${PRIMITIVES_SSE4_1_SRCS})
set_simd_source_file_properties("sse4.2" ${PRIMITIVES_SSE4_2_SRCS})
set_simd_source_file_properties("avx2" ${PRIMITIVES_AVX2_SRCS})
set_simd_source_file_properties("neon" ${PRIMITIVES_OPT_SRCS})
endif()
freerdp_object_library_add(freerdp-primitives)

View File

@@ -27,7 +27,7 @@
#include "prim_templates.h"
#include "prim_YCoCg.h"
#if defined(NEON_ENABLED)
#if defined(NEON_INTRINSICS_ENABLED)
#include <arm_neon.h>
static primitives_t* generic = NULL;
@@ -157,7 +157,7 @@ static pstatus_t neon_YCoCgToRGB_8u_AC4R(const BYTE* WINPR_RESTRICT pSrc, INT32
/* ------------------------------------------------------------------------- */
void primitives_init_YCoCg_neon(primitives_t* WINPR_RESTRICT prims)
{
#if defined(NEON_ENABLED)
#if defined(NEON_INTRINSICS_ENABLED)
generic = primitives_get_generic();
primitives_init_YCoCg(prims);
@@ -167,7 +167,7 @@ void primitives_init_YCoCg_neon(primitives_t* WINPR_RESTRICT prims)
prims->YCoCgToRGB_8u_AC4R = neon_YCoCgToRGB_8u_AC4R;
}
#else
WLog_VRB(PRIM_TAG, "undefined WITH_NEON");
WLog_VRB(PRIM_TAG, "undefined WITH_SIMD or neon intrinsics not available");
WINPR_UNUSED(prims);
#endif
}

View File

@@ -30,7 +30,7 @@
#include "prim_internal.h"
#include "prim_YUV.h"
#if defined(NEON_ENABLED)
#if defined(NEON_INTRINSICS_ENABLED)
#include <arm_neon.h>
static primitives_t* generic = NULL;
@@ -741,7 +741,7 @@ static pstatus_t neon_YUV420CombineToYUV444(avc444_frame_type type,
void primitives_init_YUV_neon(primitives_t* WINPR_RESTRICT prims)
{
#if defined(NEON_ENABLED)
#if defined(NEON_INTRINSICS_ENABLED)
generic = primitives_get_generic();
primitives_init_YUV(prims);
@@ -753,7 +753,7 @@ void primitives_init_YUV_neon(primitives_t* WINPR_RESTRICT prims)
prims->YUV420CombineToYUV444 = neon_YUV420CombineToYUV444;
}
#else
WLog_VRB(PRIM_TAG, "undefined WITH_NEON");
WLog_VRB(PRIM_TAG, "undefined WITH_SIMD or neon intrinsics not available");
WINPR_UNUSED(prims);
#endif
}

View File

@@ -28,7 +28,7 @@
#include "prim_colors.h"
/*---------------------------------------------------------------------------*/
#if defined(NEON_ENABLED)
#if defined(NEON_INTRINSICS_ENABLED)
#include <arm_neon.h>
static primitives_t* generic = NULL;
@@ -341,12 +341,12 @@ neon_RGBToRGB_16s8u_P3AC4R(const INT16* WINPR_RESTRICT pSrc[3], /* 16-bit R,G, a
return generic->RGBToRGB_16s8u_P3AC4R(pSrc, srcStep, pDst, dstStep, DstFormat, roi);
}
}
#endif /* NEON_ENABLED */
#endif /* NEON_INTRINSICS_ENABLED */
/* ------------------------------------------------------------------------- */
void primitives_init_colors_neon(primitives_t* prims)
{
#if defined(NEON_ENABLED)
#if defined(NEON_INTRINSICS_ENABLED)
generic = primitives_get_generic();
primitives_init_colors(prims);
@@ -358,7 +358,7 @@ void primitives_init_colors_neon(primitives_t* prims)
prims->yCbCrToRGB_16s16s_P3P3 = neon_yCbCrToRGB_16s16s_P3P3;
}
#else
WLog_VRB(PRIM_TAG, "undefined WITH_NEON");
WLog_VRB(PRIM_TAG, "undefined WITH_SIMD or neon intrinsics not available");
WINPR_UNUSED(prims);
#endif
}

View File

@@ -24,6 +24,9 @@
#include <freerdp/api.h>
#include <freerdp/log.h>
#include "../core/simd.h"
#define PRIM_TAG FREERDP_TAG("primitives")
#ifdef __GNUC__
@@ -34,27 +37,15 @@
#endif
#endif
#if defined(WITH_SSE2)
#if defined(_M_IX86) || defined(_M_AMD64) || defined(_M_IA64) || defined(_M_IX86_AMD64)
#define SSE2_ENABLED
#endif
#endif
#if defined(WITH_NEON)
#if defined(_M_ARM64) || defined(_M_ARM)
#define NEON_ENABLED
#endif
#endif
#if defined(SSE2_ENABLED) || defined(NEON_ENABLED) || defined(WITH_OPENCL)
#if defined(SSE_AVX_INTRINSICS_ENABLED) || defined(NEON_INTRINSICS_ENABLED) || defined(WITH_OPENCL)
#define HAVE_OPTIMIZED_PRIMITIVES 1
#endif
#if defined(SSE2_ENABLED) || defined(NEON_ENABLED)
#if defined(SSE_AVX_INTRINSICS_ENABLED) || defined(NEON_INTRINSICS_ENABLED)
#define HAVE_CPU_OPTIMIZED_PRIMITIVES 1
#endif
#if defined(SSE2_ENABLED)
#if defined(SSE_AVX_INTRINSICS_ENABLED)
/* Use lddqu for unaligned; load for 16-byte aligned. */
#define LOAD_SI128(_ptr_) \
(((const ULONG_PTR)(_ptr_)&0x0f) ? _mm_lddqu_si128((const __m128i*)(_ptr_)) \

View File

@@ -28,7 +28,7 @@
#include "prim_internal.h"
#include "prim_templates.h"
#if defined(SSE2_ENABLED)
#if defined(SSE_AVX_INTRINSICS_ENABLED)
#include <emmintrin.h>
#include <tmmintrin.h>
@@ -439,7 +439,7 @@ static pstatus_t ssse3_YCoCgRToRGB_8u_AC4R(const BYTE* WINPR_RESTRICT pSrc, INT3
/* ------------------------------------------------------------------------- */
void primitives_init_YCoCg_ssse3(primitives_t* WINPR_RESTRICT prims)
{
#if defined(SSE2_ENABLED)
#if defined(SSE_AVX_INTRINSICS_ENABLED)
generic = primitives_get_generic();
primitives_init_YCoCg(prims);
@@ -450,7 +450,7 @@ void primitives_init_YCoCg_ssse3(primitives_t* WINPR_RESTRICT prims)
prims->YCoCgToRGB_8u_AC4R = ssse3_YCoCgRToRGB_8u_AC4R;
}
#else
WLog_VRB(PRIM_TAG, "undefined WITH_SSE2");
WLog_VRB(PRIM_TAG, "undefined WITH_SIMD or SSE2 intrinsics not available");
WINPR_UNUSED(prims);
#endif
}

View File

@@ -31,7 +31,7 @@
#include "prim_internal.h"
#include "prim_YUV.h"
#if defined(SSE2_ENABLED)
#if defined(SSE_AVX_INTRINSICS_ENABLED)
#include <emmintrin.h>
#include <tmmintrin.h>
@@ -1496,7 +1496,7 @@ static pstatus_t ssse3_YUV420CombineToYUV444(avc444_frame_type type,
void primitives_init_YUV_ssse3(primitives_t* WINPR_RESTRICT prims)
{
#if defined(SSE2_ENABLED)
#if defined(SSE_AVX_INTRINSICS_ENABLED)
generic = primitives_get_generic();
primitives_init_YUV(prims);
@@ -1512,7 +1512,7 @@ void primitives_init_YUV_ssse3(primitives_t* WINPR_RESTRICT prims)
prims->YUV420CombineToYUV444 = ssse3_YUV420CombineToYUV444;
}
#else
WLog_VRB(PRIM_TAG, "undefined WITH_SSE2");
WLog_VRB(PRIM_TAG, "undefined WITH_SIMD or SSSE3 intrinsics not available");
WINPR_UNUSED(prims);
#endif
}

View File

@@ -25,7 +25,7 @@
#include "prim_internal.h"
#include "prim_templates.h"
#if defined(SSE2_ENABLED)
#if defined(SSE_AVX_INTRINSICS_ENABLED)
#include <emmintrin.h>
#include <pmmintrin.h>
@@ -173,7 +173,7 @@ static pstatus_t sse3_add_16s_inplace(INT16* WINPR_RESTRICT pSrcDst1,
/* ------------------------------------------------------------------------- */
void primitives_init_add_sse3(primitives_t* WINPR_RESTRICT prims)
{
#if defined(SSE2_ENABLED)
#if defined(SSE_AVX_INTRINSICS_ENABLED)
generic = primitives_get_generic();
primitives_init_add(prims);
@@ -186,7 +186,7 @@ void primitives_init_add_sse3(primitives_t* WINPR_RESTRICT prims)
}
#else
WLog_VRB(PRIM_TAG, "undefined WITH_SSE2");
WLog_VRB(PRIM_TAG, "undefined WITH_SIMD or SSE3 intrinsics not available");
WINPR_UNUSED(prims);
#endif
}

View File

@@ -31,7 +31,7 @@
#include "prim_internal.h"
/* ------------------------------------------------------------------------- */
#if defined(SSE2_ENABLED)
#if defined(SSE_AVX_INTRINSICS_ENABLED)
#include <emmintrin.h>
#include <pmmintrin.h>
@@ -209,7 +209,7 @@ static pstatus_t sse2_alphaComp_argb(const BYTE* WINPR_RESTRICT pSrc1, UINT32 sr
/* ------------------------------------------------------------------------- */
void primitives_init_alphaComp_sse3(primitives_t* WINPR_RESTRICT prims)
{
#if defined(SSE2_ENABLED)
#if defined(SSE_AVX_INTRINSICS_ENABLED)
generic = primitives_get_generic();
primitives_init_alphaComp(prims);
@@ -221,7 +221,7 @@ void primitives_init_alphaComp_sse3(primitives_t* WINPR_RESTRICT prims)
}
#else
WLog_VRB(PRIM_TAG, "undefined WITH_SSE2");
WLog_VRB(PRIM_TAG, "undefined WITH_SIMD or SSE3 intrinsics not available");
WINPR_UNUSED(prims);
#endif
}

View File

@@ -24,7 +24,7 @@
#include "prim_internal.h"
#include "prim_templates.h"
#if defined(SSE2_ENABLED)
#if defined(SSE_AVX_INTRINSICS_ENABLED)
#include <emmintrin.h>
#include <pmmintrin.h>
@@ -40,7 +40,7 @@ SSE3_SCD_PRE_ROUTINE(sse3_orC_32u, UINT32, generic->orC_32u, _mm_or_si128, *dptr
/* ------------------------------------------------------------------------- */
void primitives_init_andor_sse3(primitives_t* WINPR_RESTRICT prims)
{
#if defined(SSE2_ENABLED)
#if defined(SSE_AVX_INTRINSICS_ENABLED)
generic = primitives_get_generic();
primitives_init_andor(prims);
@@ -53,7 +53,7 @@ void primitives_init_andor_sse3(primitives_t* WINPR_RESTRICT prims)
}
#else
WLog_VRB(PRIM_TAG, "undefined WITH_SSE2");
WLog_VRB(PRIM_TAG, "undefined WITH_SIMD or SSE3 intrinsics not available");
WINPR_UNUSED(prims);
#endif
}

View File

@@ -28,7 +28,7 @@
#include "prim_internal.h"
#include "prim_templates.h"
#if defined(SSE2_ENABLED)
#if defined(SSE_AVX_INTRINSICS_ENABLED)
#include <emmintrin.h>
static primitives_t* generic = NULL;
@@ -1245,7 +1245,7 @@ sse2_RGBToRGB_16s8u_P3AC4R(const INT16* WINPR_RESTRICT pSrc[3], /* 16-bit R,G, a
void primitives_init_colors_sse2(primitives_t* prims)
{
#if defined(SSE2_ENABLED)
#if defined(SSE_AVX_INTRINSICS_ENABLED)
generic = primitives_get_generic();
primitives_init_colors(prims);
@@ -1259,7 +1259,7 @@ void primitives_init_colors_sse2(primitives_t* prims)
}
#else
WLog_VRB(PRIM_TAG, "undefined WITH_SSE2");
WLog_VRB(PRIM_TAG, "undefined WITH_SIMD or SSE2 intrinsics not available");
WINPR_UNUSED(prims);
#endif
}

View File

@@ -28,7 +28,7 @@
#include <freerdp/codec/color.h>
#if defined(SSE2_ENABLED)
#if defined(SSE_AVX_INTRINSICS_ENABLED)
#define TAG FREERDP_TAG("primitives.copy")
#include <emmintrin.h>
@@ -274,14 +274,14 @@ static pstatus_t avx2_image_copy_no_overlap(BYTE* WINPR_RESTRICT pDstData, DWORD
/* ------------------------------------------------------------------------- */
void primitives_init_copy_avx2(primitives_t* prims)
{
#if defined(SSE2_ENABLED)
#if defined(SSE_AVX_INTRINSICS_ENABLED)
if (IsProcessorFeaturePresent(PF_AVX2_INSTRUCTIONS_AVAILABLE))
{
WLog_VRB(PRIM_TAG, "AVX2 optimizations");
prims->copy_no_overlap = avx2_image_copy_no_overlap;
}
#else
WLog_VRB(PRIM_TAG, "undefined WITH_SSE2");
WLog_VRB(PRIM_TAG, "undefined WITH_SIMD or WITH_AVX2 or AVX2 intrinsics not available");
WINPR_UNUSED(prims);
#endif
}

View File

@@ -28,7 +28,7 @@
#include <freerdp/codec/color.h>
#if defined(SSE2_ENABLED)
#if defined(SSE_AVX_INTRINSICS_ENABLED)
#define TAG FREERDP_TAG("primitives.copy")
#include <emmintrin.h>
@@ -258,14 +258,14 @@ static pstatus_t sse_image_copy_no_overlap(BYTE* WINPR_RESTRICT pDstData, DWORD
/* ------------------------------------------------------------------------- */
void primitives_init_copy_sse41(primitives_t* prims)
{
#if defined(SSE2_ENABLED)
#if defined(SSE_AVX_INTRINSICS_ENABLED)
if (IsProcessorFeaturePresent(PF_SSE4_1_INSTRUCTIONS_AVAILABLE))
{
WLog_VRB(PRIM_TAG, "SSE4.1 optimizations");
prims->copy_no_overlap = sse_image_copy_no_overlap;
}
#else
WLog_VRB(PRIM_TAG, "undefined WITH_SSE2");
WLog_VRB(PRIM_TAG, "undefined WITH_SIMD or SSE4.1 intrinsics not available");
WINPR_UNUSED(prims);
#endif
}

View File

@@ -25,7 +25,7 @@
#include "prim_set.h"
/* ========================================================================= */
#if defined(SSE2_ENABLED)
#if defined(SSE_AVX_INTRINSICS_ENABLED)
#include <emmintrin.h>
static primitives_t* generic = NULL;
@@ -215,7 +215,7 @@ static pstatus_t sse2_set_32s(INT32 val, INT32* WINPR_RESTRICT pDst, UINT32 len)
/* ------------------------------------------------------------------------- */
void primitives_init_set_sse2(primitives_t* WINPR_RESTRICT prims)
{
#if defined(SSE2_ENABLED)
#if defined(SSE_AVX_INTRINSICS_ENABLED)
generic = primitives_get_generic();
primitives_init_set(prims);
/* Pick tuned versions if possible. */
@@ -229,7 +229,7 @@ void primitives_init_set_sse2(primitives_t* WINPR_RESTRICT prims)
}
#else
WLog_VRB(PRIM_TAG, "undefined WITH_SSE2");
WLog_VRB(PRIM_TAG, "undefined WITH_SIMD or SSE2 intrinsics not available");
WINPR_UNUSED(prims);
#endif
}

View File

@@ -24,7 +24,7 @@
#include "prim_internal.h"
#include "prim_templates.h"
#if defined(SSE2_ENABLED)
#if defined(SSE_AVX_INTRINSICS_ENABLED)
#include <emmintrin.h>
#include <pmmintrin.h>
@@ -142,7 +142,7 @@ static pstatus_t sse2_lShiftC_16s_inplace(INT16* WINPR_RESTRICT pSrcDst, UINT32
/* ------------------------------------------------------------------------- */
void primitives_init_shift_sse3(primitives_t* WINPR_RESTRICT prims)
{
#if defined(SSE2_ENABLED)
#if defined(SSE_AVX_INTRINSICS_ENABLED)
generic = primitives_get_generic();
primitives_init_shift(prims);
@@ -158,7 +158,7 @@ void primitives_init_shift_sse3(primitives_t* WINPR_RESTRICT prims)
}
#else
WLog_VRB(PRIM_TAG, "undefined WITH_SSE2");
WLog_VRB(PRIM_TAG, "undefined WITH_SIMD or SSE3 intrinsics not available");
WINPR_UNUSED(prims);
#endif
}

View File

@@ -23,7 +23,7 @@
#include "prim_internal.h"
#if defined(SSE2_ENABLED)
#if defined(SSE_AVX_INTRINSICS_ENABLED)
#include <emmintrin.h>
#include <tmmintrin.h>
@@ -165,12 +165,12 @@ static pstatus_t ssse3_sign_16s(const INT16* WINPR_RESTRICT pSrc, INT16* WINPR_R
return PRIMITIVES_SUCCESS;
}
#endif /* SSE2_ENABLED */
#endif /* SSE_AVX_INTRINSICS_ENABLED */
/* ------------------------------------------------------------------------- */
void primitives_init_sign_ssse3(primitives_t* WINPR_RESTRICT prims)
{
#if defined(SSE2_ENABLED)
#if defined(SSE_AVX_INTRINSICS_ENABLED)
generic = primitives_get_generic();
primitives_init_sign(prims);
/* Pick tuned versions if possible. */
@@ -184,7 +184,7 @@ void primitives_init_sign_ssse3(primitives_t* WINPR_RESTRICT prims)
}
#else
WLog_VRB(PRIM_TAG, "undefined WITH_SSE2");
WLog_VRB(PRIM_TAG, "undefined WITH_SIMD or SSSE3/SSE3 intrinsics not available");
WINPR_UNUSED(prims);
#endif
}

View File

@@ -269,8 +269,7 @@ cd $BUILD
cmake -GNinja -Bfreerdp -S"$SCRIPT_PATH/.." \
$CMAKE_ARGS \
-DWITH_PLATFORM_SERVER=OFF \
-DWITH_NEON=ON \
-DWITH_SSE=ON \
-DWITH_SIMD=ON \
-DWITH_FFMPEG=OFF \
-DWITH_SWSCALE=ON \
-DWITH_OPUS=ON \