--- /dev/null
+include(CMakeCheckCompilerFlagCommonPatterns)
+
+function(check_asm_compiler_flag flag var)
+ if(DEFINED "${var}")
+ return()
+ endif()
+
+ set(locale_vars LC_ALL LC_MESSAGES LANG)
+ foreach(v IN LISTS locale_vars)
+ set(locale_vars_saved_${v} "$ENV{${v}}")
+ set(ENV{${v}} C)
+ endforeach()
+
+ check_compiler_flag_common_patterns(common_patterns)
+
+ set(test_file "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.S")
+ file(WRITE "${test_file}" ".global main\nmain:\n")
+
+ if(NOT CMAKE_REQUIRED_QUIET)
+ message(STATUS "Performing Test ${var}")
+ endif()
+ try_compile(
+ ${var}
+ "${CMAKE_BINARY_DIR}"
+ "${test_file}"
+ COMPILE_DEFINITIONS "${flag}"
+ OUTPUT_VARIABLE output)
+
+ check_compiler_flag_common_patterns(common_fail_patterns)
+
+ foreach(regex ${common_fail_patterns})
+ if("${output}" MATCHES "${regex}")
+ set(${var} 0)
+ endif()
+ endforeach()
+
+ if(${${var}})
+ set(${var} 1 CACHE INTERNAL "Test ${var}")
+ if(NOT CMAKE_REQUIRED_QUIET)
+ message(STATUS "Performing Test ${var} - Success")
+ endif()
+ file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+ "Performing ASM SOURCE FILE Test ${var} succeeded with the following output:\n"
+ "${output}\n"
+ "Source file was:\n${test_file}\n")
+ else()
+ if(NOT CMAKE_REQUIRED_QUIET)
+ message(STATUS "Performing Test ${var} - Failed")
+ endif()
+ set(${var} "" CACHE INTERNAL "Test ${var}")
+ file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+ "Performing ASM SOURCE FILE Test ${var} failed with the following output:\n"
+ "${output}\n"
+ "Source file was:\n${test_file}\n")
+ endif()
+
+ foreach(v IN LISTS locale_vars)
+ set(ENV{${v}} ${locale_vars_saved_${v}})
+ endforeach()
+
+ set(${var} "${${var}}" PARENT_SCOPE)
+endfunction()
target_link_libraries(blake3 PRIVATE standard_settings)
if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND CMAKE_SIZEOF_VOID_P EQUAL 8)
+ set(blake_source_type asm)
set(blake_suffix "_x86-64_unix.S")
else()
+ set(blake_source_type c)
set(blake_suffix ".c")
endif()
-include(CheckCXXCompilerFlag)
+include(CheckAsmCompilerFlag)
+include(CheckCCompilerFlag)
function(add_source_if_enabled feature compile_flags)
- string(TOUPPER "have_${feature}" have_feature)
- check_cxx_compiler_flag(${compile_flags} ${have_feature})
+ string(TOUPPER "have_${blake_source_type}_${feature}" have_feature)
+ if(${blake_source_type} STREQUAL "asm")
+ check_asm_compiler_flag(${compile_flags} ${have_feature})
+ else()
+ check_c_compiler_flag(${compile_flags} ${have_feature})
+ endif()
if(${have_feature})
target_sources(blake3 PRIVATE blake3_${feature}${blake_suffix})