From 7393cb930262fff91e1828d646315563f22b2866 Mon Sep 17 00:00:00 2001 From: Alex Reinking Date: Thu, 4 Aug 2022 12:23:18 -0400 Subject: [PATCH 01/11] Remove AddCudaToTarget.cmake --- cmake/AddCudaToTarget.cmake | 41 --------------------------- test/generator/CMakeLists.txt | 52 ++++++++++++++++++----------------- 2 files changed, 27 insertions(+), 66 deletions(-) delete mode 100644 cmake/AddCudaToTarget.cmake diff --git a/cmake/AddCudaToTarget.cmake b/cmake/AddCudaToTarget.cmake deleted file mode 100644 index e475f1da4c2f..000000000000 --- a/cmake/AddCudaToTarget.cmake +++ /dev/null @@ -1,41 +0,0 @@ -function(add_cuda_to_target TARGET VISIBILITY) - if (TARGET CUDA::cuda_driver AND TARGET CUDA::cudart) - target_link_libraries(${TARGET} ${VISIBILITY} CUDA::cuda_driver CUDA::cudart) - return() - endif () - - find_package(CUDAToolkit QUIET) - if (TARGET CUDA::cuda_driver AND TARGET CUDA::cudart) - target_link_libraries(${TARGET} ${VISIBILITY} CUDA::cuda_driver CUDA::cudart) - return() - endif () - - # Find the package for the CUDA_TOOLKIT_ROOT_DIR hint. - find_package(CUDA QUIET) - if (NOT CUDA_FOUND) - set(CUDA_TOOLKIT_ROOT_DIR) - endif () - - # Find the CUDA driver library by doing what the CUDAToolkit module from - # CMake 3.17 does. - find_library(CUDA_DRIVER_LIBRARY - NAMES cuda_driver cuda - HINTS ${CUDA_TOOLKIT_ROOT_DIR} ENV CUDA_PATH - PATH_SUFFIXES nvidia/current lib64 lib/x64 lib) - if (NOT CUDA_DRIVER_LIBRARY) - # Don't try any stub directories until we have exhausted all other search locations. - find_library(CUDA_DRIVER_LIBRARY - NAMES cuda_driver cuda - HINTS ${CUDA_TOOLKIT_ROOT_DIR} ENV CUDA_PATH - PATH_SUFFIXES lib64/stubs lib/x64/stubs lib/stubs stubs) - endif () - mark_as_advanced(CUDA_DRIVER_LIBRARY) - - if (NOT CUDA_DRIVER_LIBRARY) - message(WARNING "CUDA driver library not found on system.") - return() - endif () - - target_include_directories(${TARGET} ${VISIBILITY} ${CUDA_INCLUDE_DIRS}) - target_link_libraries(${TARGET} ${VISIBILITY} ${CUDA_LIBRARIES} ${CUDA_DRIVER_LIBRARY}) -endfunction() diff --git a/test/generator/CMakeLists.txt b/test/generator/CMakeLists.txt index 3097fc8b6955..f3e90f988b93 100644 --- a/test/generator/CMakeLists.txt +++ b/test/generator/CMakeLists.txt @@ -40,9 +40,11 @@ function(halide_define_aot_test NAME) add_wasm_halide_test("${TARGET}" GROUPS generator "${args_GROUPS}") else () add_executable("${TARGET}" "${NAME}_aottest.cpp") - target_include_directories("${TARGET}" PRIVATE + target_include_directories( + "${TARGET}" PRIVATE "${Halide_SOURCE_DIR}/test/common" - "${Halide_SOURCE_DIR}/tools") + "${Halide_SOURCE_DIR}/tools" + ) if (NOT args_OMIT_DEFAULT_GENERATOR) target_link_libraries(${TARGET} PRIVATE ${NAME}) endif () @@ -80,7 +82,7 @@ if (NOT ${USING_WASM}) endif () if (TARGET_NVPTX AND Halide_TARGET MATCHES "cuda") - include(AddCudaToTarget) + find_package(CUDAToolkit REQUIRED) endif () if (TARGET_NVPTX AND Halide_TARGET MATCHES "opencl") find_package(OpenCL REQUIRED) @@ -95,7 +97,7 @@ endif () # acquire_release_generator.cpp halide_define_aot_test(acquire_release) if (TARGET_NVPTX AND Halide_TARGET MATCHES "cuda") - add_cuda_to_target(generator_aot_acquire_release PRIVATE) + target_link_libraries(generator_aot_acquire_release PRIVATE CUDA::cuda_driver CUDA::cudart) endif () if (TARGET_NVPTX AND Halide_TARGET MATCHES "opencl") target_link_libraries(generator_aot_acquire_release PRIVATE OpenCL::OpenCL) @@ -239,23 +241,23 @@ halide_define_aot_test(float16_t) # gpu_multi_context_threaded_generator.cpp # (Doesn't build/link properly under wasm, and isn't useful there anyway) if (NOT Halide_TARGET MATCHES "wasm") - halide_define_aot_test(gpu_multi_context_threaded - OMIT_DEFAULT_GENERATOR - EXTRA_LIBS - gpu_multi_context_threaded_add - gpu_multi_context_threaded_mul) - - add_halide_library(gpu_multi_context_threaded_add FROM gpu_multi_context_threaded.generator - FEATURES user_context) - add_halide_library(gpu_multi_context_threaded_mul FROM gpu_multi_context_threaded.generator - FEATURES user_context) - - if (TARGET_NVPTX AND Halide_TARGET MATCHES "cuda") - add_cuda_to_target(generator_aot_gpu_multi_context_threaded PRIVATE) - endif () - if (TARGET_NVPTX AND Halide_TARGET MATCHES "opencl") - target_link_libraries(generator_aot_gpu_multi_context_threaded PRIVATE OpenCL::OpenCL) - endif () + halide_define_aot_test(gpu_multi_context_threaded + OMIT_DEFAULT_GENERATOR + EXTRA_LIBS + gpu_multi_context_threaded_add + gpu_multi_context_threaded_mul) + + add_halide_library(gpu_multi_context_threaded_add FROM gpu_multi_context_threaded.generator + FEATURES user_context) + add_halide_library(gpu_multi_context_threaded_mul FROM gpu_multi_context_threaded.generator + FEATURES user_context) + + if (TARGET_NVPTX AND Halide_TARGET MATCHES "cuda") + target_link_libraries(generator_aot_gpu_multi_context_threaded PRIVATE CUDA::cuda_driver CUDA::cudart) + endif () + if (TARGET_NVPTX AND Halide_TARGET MATCHES "opencl") + target_link_libraries(generator_aot_gpu_multi_context_threaded PRIVATE OpenCL::OpenCL) + endif () endif () # gpu_object_lifetime_aottest.cpp @@ -337,10 +339,10 @@ halide_define_aot_test(msan FEATURES msan # (Doesn't build/link properly on windows / under wasm) if (NOT Halide_TARGET MATCHES "windows" AND NOT CMAKE_SYSTEM_NAME MATCHES "Windows" AND NOT Halide_TARGET MATCHES "wasm") - # sanitizercoverage_aottest.cpp - # sanitizercoverage_generator.cpp - halide_define_aot_test(sanitizercoverage FEATURES sanitizer_coverage) -endif() + # sanitizercoverage_aottest.cpp + # sanitizercoverage_generator.cpp + halide_define_aot_test(sanitizercoverage FEATURES sanitizer_coverage) +endif () # multitarget_aottest.cpp # multitarget_generator.cpp From fa85289e598c07ab829ea91cac87ecd9b2e734a1 Mon Sep 17 00:00:00 2001 From: Alex Reinking Date: Thu, 4 Aug 2022 13:14:46 -0400 Subject: [PATCH 02/11] Remove MakeShellPath.cmake --- CMakeLists.txt | 1 - cmake/MakeShellPath.cmake | 15 --------------- python_bindings/test/apps/CMakeLists.txt | 17 +++++++++-------- .../test/correctness/CMakeLists.txt | 12 ++++++++---- python_bindings/tutorial/CMakeLists.txt | 12 ++++++++---- src/autoschedulers/li2018/CMakeLists.txt | 18 +++++++++--------- 6 files changed, 34 insertions(+), 41 deletions(-) delete mode 100644 cmake/MakeShellPath.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 3e0b5a4cd341..e83efc094276 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,7 +13,6 @@ enable_testing() # Make our custom helpers available throughout the project via include(). list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake) include(HalideGeneratorHelpers) -include(MakeShellPath) include(CMakeDependentOption) # Build Halide as a shared lib by default, but still honor command-line settings. diff --git a/cmake/MakeShellPath.cmake b/cmake/MakeShellPath.cmake deleted file mode 100644 index 37596801c64a..000000000000 --- a/cmake/MakeShellPath.cmake +++ /dev/null @@ -1,15 +0,0 @@ -## -# Convenience function for creating shell paths -## - -function(make_shell_path OUTVAR) - if (WIN32) - set(SEP "\\$") - else () - set(SEP ":") - endif () - - list(TRANSFORM ARGN REPLACE "^(.+)$" "$") - string(REPLACE ";" "${SEP}" ARGN "${ARGN}") - set(${OUTVAR} "${ARGN}" PARENT_SCOPE) -endfunction() diff --git a/python_bindings/test/apps/CMakeLists.txt b/python_bindings/test/apps/CMakeLists.txt index 90e8de28eadd..24ef885aeeb2 100644 --- a/python_bindings/test/apps/CMakeLists.txt +++ b/python_bindings/test/apps/CMakeLists.txt @@ -5,14 +5,12 @@ set(SCRIPTS interpolate.py local_laplacian.py) -make_shell_path( - PYTHONPATH +set(PYTHONPATH "$" - "${Halide_SOURCE_DIR}/python_bindings/src" -) + "${Halide_SOURCE_DIR}/python_bindings/src") +list(TRANSFORM PYTHONPATH PREPEND "PYTHONPATH=path_list_prepend:") set(TEST_ENV - "PYTHONPATH=${PYTHONPATH}" "HL_TARGET=${Halide_TARGET}" "TEST_TMPDIR=$" "TEST_IMAGES_DIR=$" @@ -22,7 +20,10 @@ foreach (SCRIPT IN LISTS SCRIPTS) get_filename_component(BASE ${SCRIPT} NAME_WE) add_test(NAME python_apps_${BASE} COMMAND Python3::Interpreter "$") - set_tests_properties(python_apps_${BASE} PROPERTIES - LABELS python - ENVIRONMENT "${TEST_ENV}") + set_tests_properties( + python_apps_${BASE} PROPERTIES + LABELS python + ENVIRONMENT "${TEST_ENV}" + ENVIRONMENT_MODIFICATION "${PYTHONPATH}" + ) endforeach () diff --git a/python_bindings/test/correctness/CMakeLists.txt b/python_bindings/test/correctness/CMakeLists.txt index 205256e4d2f7..7306e6466be6 100644 --- a/python_bindings/test/correctness/CMakeLists.txt +++ b/python_bindings/test/correctness/CMakeLists.txt @@ -27,19 +27,23 @@ set(TESTS ) # Use generator expressions to get the true output paths of these files. -make_shell_path( +set( PYTHONPATH "$" "$" "$" "${Halide_SOURCE_DIR}/python_bindings/src" ) +list(TRANSFORM PYTHONPATH PREPEND "PYTHONPATH=path_list_prepend:") foreach (TEST IN LISTS TESTS) get_filename_component(TEST_NAME ${TEST} NAME_WE) add_test(NAME python_correctness_${TEST_NAME} COMMAND Python3::Interpreter "$") - set_tests_properties(python_correctness_${TEST_NAME} PROPERTIES - LABELS "python" - ENVIRONMENT "PYTHONPATH=${PYTHONPATH};HL_TARGET=${Halide_TARGET}") + set_tests_properties( + python_correctness_${TEST_NAME} PROPERTIES + LABELS "python" + ENVIRONMENT "HL_TARGET=${Halide_TARGET}" + ENVIRONMENT_MODIFICATION "${PYTHONPATH}" + ) endforeach () diff --git a/python_bindings/tutorial/CMakeLists.txt b/python_bindings/tutorial/CMakeLists.txt index 09f2759a9e82..f7b0557a0468 100644 --- a/python_bindings/tutorial/CMakeLists.txt +++ b/python_bindings/tutorial/CMakeLists.txt @@ -16,21 +16,25 @@ set(TESTS lesson_14_types.py ) -make_shell_path( +set( PYTHONPATH "$" "$" "${Halide_SOURCE_DIR}/python_bindings/src" ) +list(TRANSFORM PYTHONPATH PREPEND "PYTHONPATH=path_list_prepend:") foreach (TEST IN LISTS TESTS) get_filename_component(TEST_NAME ${TEST} NAME_WE) add_test(NAME python_tutorial_${TEST_NAME} COMMAND Python3::Interpreter "$") - set_tests_properties(python_tutorial_${TEST_NAME} PROPERTIES - LABELS python - ENVIRONMENT "PYTHONPATH=${PYTHONPATH};HL_TARGET=${Halide_TARGET}") + set_tests_properties( + python_tutorial_${TEST_NAME} PROPERTIES + LABELS python + ENVIRONMENT "HL_TARGET=${Halide_TARGET}" + ENVIRONMENT_MODIFICATION "${PYTHONPATH}" + ) endforeach () ## Add some hacks for getting CMake to delay compiling lesson_10_halide until after the test has run. The "better" way diff --git a/src/autoschedulers/li2018/CMakeLists.txt b/src/autoschedulers/li2018/CMakeLists.txt index 31a1fb2f8eab..663ba0d19ddf 100644 --- a/src/autoschedulers/li2018/CMakeLists.txt +++ b/src/autoschedulers/li2018/CMakeLists.txt @@ -45,22 +45,22 @@ if (WITH_PYTHON_BINDINGS) add_test(NAME gradient_autoscheduler_test_py COMMAND Python3::Interpreter "${CMAKE_CURRENT_SOURCE_DIR}/test.py") - make_shell_path( + set( PYTHONPATH "$" "${Halide_SOURCE_DIR}/python_bindings/src" ) + list(TRANSFORM PYTHONPATH PREPEND "PYTHONPATH=path_list_prepend:") - if (WIN32) - set(SEP "\\$") - else () - set(SEP ":") - endif () + set( + PATH + "$" + "$" + ) + list(TRANSFORM PATH PREPEND "PATH=path_list_prepend:") - set(_PATH "$>;$>;$ENV{PATH}") - string(REPLACE ";" "${SEP}" _PATH "${_PATH}") set_tests_properties(gradient_autoscheduler_test_py PROPERTIES LABELS "Li2018;auto_schedule" - ENVIRONMENT "PYTHONPATH=${PYTHONPATH};PATH=${_PATH}") + ENVIRONMENT_MODIFICATION "${PYTHONPATH};${PATH}") endif () endif () From 309d88bece0ca64f178d211f8f631610020b3aef Mon Sep 17 00:00:00 2001 From: Alex Reinking Date: Thu, 4 Aug 2022 18:21:45 -0400 Subject: [PATCH 03/11] Use CheckLinkerFlag in TargetExportScript --- cmake/TargetExportScript.cmake | 22 ++++------------------ 1 file changed, 4 insertions(+), 18 deletions(-) diff --git a/cmake/TargetExportScript.cmake b/cmake/TargetExportScript.cmake index 5f5e438dbcd0..36e53558aff6 100644 --- a/cmake/TargetExportScript.cmake +++ b/cmake/TargetExportScript.cmake @@ -1,7 +1,4 @@ -# Note: in CMake 3.18+ there is a CheckLinkerFlags module that should be used to replace this. -# Sadly, CMake does not attempt to detect the underlying linker and people can try to use, eg. -# gold or lld via CMAKE_CXX_FLAGS. -include(CheckCXXSourceCompiles) +include(CheckLinkerFlag) function(target_export_script TARGET) set(options) @@ -10,7 +7,7 @@ function(target_export_script TARGET) cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) get_property(target_type TARGET ${TARGET} PROPERTY TYPE) - if (NOT target_type STREQUAL "SHARED_LIBRARY" AND NOT target_type STREQUAL "MODULE_LIBRARY") + if (NOT target_type MATCHES "(SHARED|MODULE)_LIBRARY") # Linker scripts do nothing on non-shared libraries. return() endif () @@ -21,16 +18,8 @@ function(target_export_script TARGET) return() endif () - set(dummy_source [[ int main() { return 0; } ]]) - - # CMake doesn't recognize MSVC/ldd link.exe's unknown-option warnings - set(extra_errors FAIL_REGEX "LNK4044: unrecognized option|warning : ignoring unknown argument") - ## More linkers support the GNU syntax (ld, lld, gold), so try it first. - set(version_script "LINKER:--version-script=${ARG_GNU_LD}") - - set(CMAKE_REQUIRED_LINK_OPTIONS "${version_script}") - check_cxx_source_compiles("${dummy_source}" LINKER_HAS_FLAG_VERSION_SCRIPT ${extra_errors}) + check_linker_flag(CXX "LINKER:--version-script=${ARG_GNU_LD}" LINKER_HAS_FLAG_VERSION_SCRIPT) if (LINKER_HAS_FLAG_VERSION_SCRIPT) target_link_options(${TARGET} PRIVATE "${version_script}") @@ -39,10 +28,7 @@ function(target_export_script TARGET) endif () ## The Apple linker expects a different flag. - set(exported_symbols_list "LINKER:-exported_symbols_list,${ARG_APPLE_LD}") - - set(CMAKE_REQUIRED_LINK_OPTIONS "${exported_symbols_list}") - check_cxx_source_compiles("${dummy_source}" LINKER_HAS_FLAG_EXPORTED_SYMBOLS_LIST ${extra_errors}) + check_linker_flag(CXX "LINKER:-exported_symbols_list,${ARG_APPLE_LD}" LINKER_HAS_FLAG_EXPORTED_SYMBOLS_LIST) if (LINKER_HAS_FLAG_EXPORTED_SYMBOLS_LIST) target_link_options(${TARGET} PRIVATE "${exported_symbols_list}") From d85aef133bffcd7e0d504e043c4280b2eec9a824 Mon Sep 17 00:00:00 2001 From: Alex Reinking Date: Thu, 4 Aug 2022 18:45:19 -0400 Subject: [PATCH 04/11] Use DEPFILE for all generators --- src/runtime/CMakeLists.txt | 31 +++---------------------------- 1 file changed, 3 insertions(+), 28 deletions(-) diff --git a/src/runtime/CMakeLists.txt b/src/runtime/CMakeLists.txt index 1d1832be504f..946784f662d5 100644 --- a/src/runtime/CMakeLists.txt +++ b/src/runtime/CMakeLists.txt @@ -1,7 +1,3 @@ -if (NOT CMAKE_GENERATOR MATCHES "Make|Ninja") - message(STATUS "Notice: ${CMAKE_GENERATOR} does not support depfile dependencies. Incremental builds may fail.") -endif () - # Keep these lists in alphabetical order. set(RUNTIME_CPP aarch64_cpu_features @@ -235,28 +231,7 @@ foreach (i IN LISTS RUNTIME_CPP) set(INITMOD "_initmod_${i}_${j}${SUFFIX}.cpp") set(SYMBOL "halide_internal_initmod_${i}_${j}${SUFFIX}") - set(clang_flags ${RUNTIME_CXX_FLAGS} ${fpic} ${fshort-wchar} ${RUNTIME_DEFINES${SUFFIX}} -m${j} -target ${TARGET} -emit-llvm -S) - - set(ll_path "${LL}") - if (CMAKE_GENERATOR MATCHES "Ninja") - if (POLICY CMP0116) - # CMake 3.20+ does the right thing here and transforms the depfiles for us - list(APPEND clang_flags -MD -MF "${basename}.d") - set(dep_args DEPFILE "${basename}.d") - else() - # Dep-files are subtle and require clang to run using *just* the right - # relative paths to the build root, NOT the Halide build root. This is - # a perfect storm of bad behavior from CMake <3.20, Ninja, and Clang. - file(RELATIVE_PATH ll_path "${CMAKE_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/${LL}") - file(TO_NATIVE_PATH "${ll_path}" ll_path) - list(APPEND clang_flags -MD -MF "$") - set(dep_args - WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" - DEPFILE "${CMAKE_CURRENT_BINARY_DIR}/${basename}.d") - endif() - elseif (CMAKE_GENERATOR MATCHES "Make") - set(dep_args IMPLICIT_DEPENDS CXX "${SOURCE}") - endif () + set(clang_flags ${RUNTIME_CXX_FLAGS} ${fpic} ${fshort-wchar} ${RUNTIME_DEFINES${SUFFIX}} -m${j} -target ${TARGET} -emit-llvm -S -MD -MF "${basename}.d") if (Halide_CLANG_TIDY_BUILD) # Create a 'fake' entry just so that clang-tidy will see a C++ compilation command @@ -267,9 +242,9 @@ foreach (i IN LISTS RUNTIME_CPP) target_compile_definitions(${basename} PRIVATE ${RUNTIME_DEFINES}) else() add_custom_command(OUTPUT "${LL}" - COMMAND ${CMAKE_C_COMPILER_LAUNCHER} $ ${clang_flags} -o "${ll_path}" "$" + COMMAND ${CMAKE_C_COMPILER_LAUNCHER} $ ${clang_flags} -o "${LL}" "$" DEPENDS "${SOURCE}" - ${dep_args} + DEPFILE "${basename}.d" VERBATIM) endif() From 82f061b949210a571a67dbe31ce4b09fe9302ac2 Mon Sep 17 00:00:00 2001 From: Alex Reinking Date: Thu, 4 Aug 2022 19:17:57 -0400 Subject: [PATCH 05/11] Use REQUIRED with find_program, where applicable --- CMakeLists.txt | 30 +++++++++++++++--------------- apps/HelloWasm/CMakeLists.txt | 5 +---- dependencies/wasm/CMakeLists.txt | 13 ++----------- 3 files changed, 18 insertions(+), 30 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e83efc094276..2c6d0a379bf3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -49,22 +49,22 @@ endif() # Build Halide with ccache if the package is present option(Halide_CCACHE_BUILD "Set to ON for a ccache enabled build" OFF) mark_as_advanced(Halide_CCACHE_BUILD) + if (Halide_CCACHE_BUILD) - find_program(CCACHE_PROGRAM ccache) - if (CCACHE_PROGRAM) - # TODO: ccache recommends setting CCACHE_SLOPPINESS=pch_defines,time_macros to - # enable precompiled header caching. Our timing found it slightly faster with - # just CCACHE_SLOPPINESS=pch_defines, so that's what we're using. Maybe revisit - # if issues occur (but we don't use any of the time macros so should be irrelevant). - set(Halide_CCACHE_PARAMS CCACHE_CPP2=yes CCACHE_HASHDIR=yes CCACHE_SLOPPINESS=pch_defines - CACHE STRING "Parameters to pass through to ccache") - mark_as_advanced(Halide_CCACHE_PARAMS) - set(CMAKE_C_COMPILER_LAUNCHER ${CMAKE_COMMAND} -E env ${Halide_CCACHE_PARAMS} ${CCACHE_PROGRAM}) - set(CMAKE_CXX_COMPILER_LAUNCHER ${CMAKE_COMMAND} -E env ${Halide_CCACHE_PARAMS} ${CCACHE_PROGRAM}) - message(STATUS "Enabling ccache usage for building.") - else () - message(FATAL_ERROR "Unable to find the program ccache. Set Halide_CCACHE_BUILD to OFF") - endif () + find_program(CCACHE_PROGRAM ccache REQUIRED) + + # TODO: ccache recommends setting CCACHE_SLOPPINESS=pch_defines,time_macros to + # enable precompiled header caching. Our timing found it slightly faster with + # just CCACHE_SLOPPINESS=pch_defines, so that's what we're using. Maybe revisit + # if issues occur (but we don't use any of the time macros so should be irrelevant). + set(Halide_CCACHE_PARAMS CCACHE_CPP2=yes CCACHE_HASHDIR=yes CCACHE_SLOPPINESS=pch_defines + CACHE STRING "Parameters to pass through to ccache") + mark_as_advanced(Halide_CCACHE_PARAMS) + + set(CMAKE_C_COMPILER_LAUNCHER ${CMAKE_COMMAND} -E env ${Halide_CCACHE_PARAMS} ${CCACHE_PROGRAM}) + set(CMAKE_CXX_COMPILER_LAUNCHER ${CMAKE_COMMAND} -E env ${Halide_CCACHE_PARAMS} ${CCACHE_PROGRAM}) + + message(STATUS "Enabling ccache usage for building.") endif () # Enable the SPIR-V target if requested (must declare before processing dependencies) diff --git a/apps/HelloWasm/CMakeLists.txt b/apps/HelloWasm/CMakeLists.txt index a88bdb5e505d..206639111e84 100644 --- a/apps/HelloWasm/CMakeLists.txt +++ b/apps/HelloWasm/CMakeLists.txt @@ -10,10 +10,7 @@ set(CMAKE_CXX_EXTENSIONS NO) find_package(Halide REQUIRED) set(halide_includes "$") -find_program(EMCC emcc HINTS "$ENV{EMSDK}/upstream/emscripten") -if (NOT EMCC) - message(FATAL_ERROR "Could not find emscripten/emcc!") -endif () +find_program(EMCC emcc REQUIRED HINTS "$ENV{EMSDK}/upstream/emscripten") configure_file(index.html index.html COPYONLY) diff --git a/dependencies/wasm/CMakeLists.txt b/dependencies/wasm/CMakeLists.txt index 13b920a9a59f..0c9d76007007 100644 --- a/dependencies/wasm/CMakeLists.txt +++ b/dependencies/wasm/CMakeLists.txt @@ -87,11 +87,7 @@ function(add_wasm_executable TARGET) # target_link_libraries(${TARGET} PRIVATE ${args_DEPS}) # endif () - find_program(EMCC emcc HINTS "$ENV{EMSDK}/upstream/emscripten") - - if (NOT EMCC) - message(FATAL_ERROR "Building tests or apps for WASM requires that EMSDK point to a valid Emscripten install.") - endif () + find_program(EMCC emcc REQUIRED HINTS "$ENV{EMSDK}/upstream/emscripten") # TODO: this is currently hardcoded to settings that are sensible for most of Halide's # internal purposes. Consider adding ways to customize this as appropriate. @@ -155,12 +151,7 @@ function(add_wasm_halide_test TARGET) endfunction() function(find_node_js) - find_program(NODE_JS_EXECUTABLE node nodejs) - - # TODO: when we eventually upgrade to CMake >= 3.18, replace with REQUIRED in find_program - if (NOT NODE_JS_EXECUTABLE) - message(FATAL_ERROR "Could not find nodejs. Please set NODE_JS_EXECUTABLE on the CMake command line.") - endif () + find_program(NODE_JS_EXECUTABLE node nodejs REQUIRED) execute_process(COMMAND "${NODE_JS_EXECUTABLE}" --version OUTPUT_VARIABLE NODE_JS_VERSION_RAW From ec44d58587926be0bf042a2ee0708c89b5e93d54 Mon Sep 17 00:00:00 2001 From: Alex Reinking Date: Thu, 4 Aug 2022 19:21:48 -0400 Subject: [PATCH 06/11] Use REQUIRED with find_library, where applicable --- cmake/HalideGeneratorHelpers.cmake | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/cmake/HalideGeneratorHelpers.cmake b/cmake/HalideGeneratorHelpers.cmake index a0329ee6396f..67cdaa04f9b7 100644 --- a/cmake/HalideGeneratorHelpers.cmake +++ b/cmake/HalideGeneratorHelpers.cmake @@ -488,19 +488,9 @@ function(_Halide_target_link_gpu_libs TARGET VISIBILITY) endif () if ("${ARGN}" MATCHES "metal") - find_library(METAL_LIBRARY Metal) - if (NOT METAL_LIBRARY) - message(AUTHOR_WARNING "Metal framework dependency not found on system.") - else () - target_link_libraries(${TARGET} ${VISIBILITY} "${METAL_LIBRARY}") - endif () - - find_library(FOUNDATION_LIBRARY Foundation) - if (NOT FOUNDATION_LIBRARY) - message(AUTHOR_WARNING "Foundation framework dependency not found on system.") - else () - target_link_libraries(${TARGET} ${VISIBILITY} "${FOUNDATION_LIBRARY}") - endif () + find_library(FOUNDATION_LIBRARY Foundation REQUIRED) + find_library(METAL_LIBRARY Metal REQUIRED) + target_link_libraries(${TARGET} ${VISIBILITY} "${FOUNDATION_LIBRARY}" "${METAL_LIBRARY}") endif () endfunction() From 613e3d5bc0a74cac8ddc43f9e9192c8a37608ba6 Mon Sep 17 00:00:00 2001 From: Alex Reinking Date: Fri, 5 Aug 2022 16:45:25 -0400 Subject: [PATCH 07/11] Use CMake 3.21 cache behavior in HalideTargetHelpers.cmake --- cmake/HalideTargetHelpers.cmake | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/cmake/HalideTargetHelpers.cmake b/cmake/HalideTargetHelpers.cmake index a7235d974a9b..9edb5cfd8fdd 100644 --- a/cmake/HalideTargetHelpers.cmake +++ b/cmake/HalideTargetHelpers.cmake @@ -1,3 +1,5 @@ +cmake_minimum_required(VERSION 3.22) + ## # Utilities for manipulating Halide target triples ## @@ -27,22 +29,16 @@ function(_Halide_cmake_target OUTVAR) set(${OUTVAR} "${arch}-${bits}-${os}" PARENT_SCOPE) endfunction() -function(_Halide_cache var val doc) - if (DEFINED ${var}) - set(${var} "${${var}}" CACHE STRING "${doc}") - else () - set(${var} "${val}" CACHE STRING "${doc}") - endif () -endfunction() - ## # Set Halide `host` and `cmake` meta-target values ## _Halide_cmake_target(_active_triple) -_Halide_cache(Halide_HOST_TARGET "${_active_triple}" "Halide target triple matching the Halide library") -_Halide_cache(Halide_CMAKE_TARGET "${_active_triple}" "Halide target triple matching the CMake target") +set(Halide_HOST_TARGET "${_active_triple}" + CACHE STRING "Halide target triple matching the Halide library") +set(Halide_CMAKE_TARGET "${_active_triple}" + CACHE STRING "Halide target triple matching the CMake target") unset(_active_triple) @@ -58,7 +54,8 @@ else () set(_default_target "${Halide_CMAKE_TARGET}") endif () -_Halide_cache(Halide_TARGET "${_default_target}" "The default target to use when AOT compiling") +set(Halide_TARGET "${_default_target}" + CACHE STRING "The default target to use when AOT compiling") unset(_default_target) From a3bee9d17ee28a85ce3c9b7ecaca3057591ac285 Mon Sep 17 00:00:00 2001 From: Alex Reinking Date: Mon, 8 Aug 2022 00:14:02 -0400 Subject: [PATCH 08/11] Replace uses of get_filename_component with cmake_path --- cmake/BundleStatic.cmake | 2 +- cmake/HalideTestHelpers.cmake | 2 +- python_bindings/test/apps/CMakeLists.txt | 12 ++++++------ python_bindings/test/correctness/CMakeLists.txt | 12 ++++++------ python_bindings/tutorial/CMakeLists.txt | 12 ++++++------ tutorial/CMakeLists.txt | 2 +- 6 files changed, 21 insertions(+), 21 deletions(-) diff --git a/cmake/BundleStatic.cmake b/cmake/BundleStatic.cmake index b83fc583cbd6..023db8edd1f2 100644 --- a/cmake/BundleStatic.cmake +++ b/cmake/BundleStatic.cmake @@ -149,7 +149,7 @@ function(transfer_locations) get_property(lib TARGET ${ARG_FROM} PROPERTY "IMPORTED_LOCATION${cfg}") if (lib) - get_filename_component(stage "${lib}" NAME_WE) + cmake_path(GET lib STEM stage) set(stage "${CMAKE_CURRENT_BINARY_DIR}/${stage}.obj") if (NOT EXISTS "${stage}") diff --git a/cmake/HalideTestHelpers.cmake b/cmake/HalideTestHelpers.cmake index 3ec36a1851a9..50b072f2814a 100644 --- a/cmake/HalideTestHelpers.cmake +++ b/cmake/HalideTestHelpers.cmake @@ -81,7 +81,7 @@ function(tests) set(TEST_NAMES "") foreach (file IN LISTS args_SOURCES) - get_filename_component(name "${file}" NAME_WE) + cmake_path(GET file STEM name) set(TARGET "${PRIMARY_GROUP}_${name}") list(APPEND TEST_NAMES "${TARGET}") diff --git a/python_bindings/test/apps/CMakeLists.txt b/python_bindings/test/apps/CMakeLists.txt index 24ef885aeeb2..92bc490f3edf 100644 --- a/python_bindings/test/apps/CMakeLists.txt +++ b/python_bindings/test/apps/CMakeLists.txt @@ -1,4 +1,4 @@ -set(SCRIPTS +set(scripts bilateral_grid.py blur.py erode.py @@ -16,12 +16,12 @@ set(TEST_ENV "TEST_IMAGES_DIR=$" ) -foreach (SCRIPT IN LISTS SCRIPTS) - get_filename_component(BASE ${SCRIPT} NAME_WE) - add_test(NAME python_apps_${BASE} - COMMAND Python3::Interpreter "$") +foreach (script IN LISTS scripts) + cmake_path(GET script STEM base) + add_test(NAME python_apps_${base} + COMMAND Python3::Interpreter "$") set_tests_properties( - python_apps_${BASE} PROPERTIES + python_apps_${base} PROPERTIES LABELS python ENVIRONMENT "${TEST_ENV}" ENVIRONMENT_MODIFICATION "${PYTHONPATH}" diff --git a/python_bindings/test/correctness/CMakeLists.txt b/python_bindings/test/correctness/CMakeLists.txt index 7306e6466be6..df0742bf806d 100644 --- a/python_bindings/test/correctness/CMakeLists.txt +++ b/python_bindings/test/correctness/CMakeLists.txt @@ -1,7 +1,7 @@ add_library(the_sort_function MODULE the_sort_function.c) target_link_libraries(the_sort_function PRIVATE Halide::Runtime) -set(TESTS +set(tests addconstant_test.py atomics.py autodiff.py @@ -36,12 +36,12 @@ set( ) list(TRANSFORM PYTHONPATH PREPEND "PYTHONPATH=path_list_prepend:") -foreach (TEST IN LISTS TESTS) - get_filename_component(TEST_NAME ${TEST} NAME_WE) - add_test(NAME python_correctness_${TEST_NAME} - COMMAND Python3::Interpreter "$") +foreach (test IN LISTS tests) + cmake_path(GET test STEM test_name) + add_test(NAME python_correctness_${test_name} + COMMAND Python3::Interpreter "$") set_tests_properties( - python_correctness_${TEST_NAME} PROPERTIES + python_correctness_${test_name} PROPERTIES LABELS "python" ENVIRONMENT "HL_TARGET=${Halide_TARGET}" ENVIRONMENT_MODIFICATION "${PYTHONPATH}" diff --git a/python_bindings/tutorial/CMakeLists.txt b/python_bindings/tutorial/CMakeLists.txt index f7b0557a0468..2d4d626b2199 100644 --- a/python_bindings/tutorial/CMakeLists.txt +++ b/python_bindings/tutorial/CMakeLists.txt @@ -1,4 +1,4 @@ -set(TESTS +set(tests lesson_01_basics.py lesson_02_input_image.py lesson_03_debugging_1.py @@ -24,13 +24,13 @@ set( ) list(TRANSFORM PYTHONPATH PREPEND "PYTHONPATH=path_list_prepend:") -foreach (TEST IN LISTS TESTS) - get_filename_component(TEST_NAME ${TEST} NAME_WE) - add_test(NAME python_tutorial_${TEST_NAME} - COMMAND Python3::Interpreter "$") +foreach (test IN LISTS tests) + cmake_path(GET test STEM test_name) + add_test(NAME python_tutorial_${test_name} + COMMAND Python3::Interpreter "$") set_tests_properties( - python_tutorial_${TEST_NAME} PROPERTIES + python_tutorial_${test_name} PROPERTIES LABELS python ENVIRONMENT "HL_TARGET=${Halide_TARGET}" ENVIRONMENT_MODIFICATION "${PYTHONPATH}" diff --git a/tutorial/CMakeLists.txt b/tutorial/CMakeLists.txt index 2db06c7d0dfa..11265d2647c5 100644 --- a/tutorial/CMakeLists.txt +++ b/tutorial/CMakeLists.txt @@ -7,7 +7,7 @@ function(add_tutorial source_file) set(multiValueArgs SRCS GROUPS) cmake_parse_arguments(args "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) - get_filename_component(name "${source_file}" NAME_WE) + cmake_path(GET source_file STEM name) add_executable("${name}" "${source_file}") target_link_libraries("${name}" PRIVATE Halide::Halide Halide::Tools) From c14ade8f405e2f8514652a960d527ccae84aa20d Mon Sep 17 00:00:00 2001 From: Alex Reinking Date: Mon, 8 Aug 2022 01:10:55 -0400 Subject: [PATCH 09/11] Rework BLAS detection in linear_algebra app --- apps/linear_algebra/CMakeLists.txt | 57 ++++++++++--------- apps/linear_algebra/benchmarks/CMakeLists.txt | 52 +++++++++-------- apps/linear_algebra/tests/CMakeLists.txt | 2 +- 3 files changed, 59 insertions(+), 52 deletions(-) diff --git a/apps/linear_algebra/CMakeLists.txt b/apps/linear_algebra/CMakeLists.txt index e2e96dc4f28d..adbe63b91df4 100644 --- a/apps/linear_algebra/CMakeLists.txt +++ b/apps/linear_algebra/CMakeLists.txt @@ -12,42 +12,47 @@ set(CMAKE_CXX_EXTENSIONS NO) find_package(Halide REQUIRED) # Find BLAS-es -set(DEFAULT_BLAS "") -set(BLAS_TARGETS "") -set(BLAS_VENDORS OpenBLAS ATLAS Apple Generic) - -# ATLAS is weird and has extra requirements -find_library(CBLAS_LIBRARY cblas) -set(ATLAS_EXTRA_LIBS ${CBLAS_LIBRARY}) +set(found_blases "") +set(known_vendors OpenBLAS ATLAS Apple Intel10_64_dyn Generic) message(STATUS "Checking for available CBLAS implementations") -foreach (BLA_VENDOR IN LISTS BLAS_VENDORS) +foreach (BLA_VENDOR IN LISTS known_vendors) find_package(BLAS QUIET) - if (NOT BLAS_FOUND - OR ("${BLA_VENDOR}" STREQUAL "ATLAS" AND NOT CBLAS_LIBRARY) - OR ("${BLA_VENDOR}" STREQUAL "Generic" AND BLAS_TARGETS)) - message(STATUS "${BLA_VENDOR}: Missing") - else () - list(APPEND BLAS_LIBRARIES ${${BLA_VENDOR}_EXTRA_LIBS}) - - message(STATUS "${BLA_VENDOR}: Found ${BLAS_LIBRARIES}") - add_library(BLAS_${BLA_VENDOR} INTERFACE) - add_library(${BLA_VENDOR}::${BLA_VENDOR} ALIAS BLAS_${BLA_VENDOR}) - target_link_libraries(BLAS_${BLA_VENDOR} INTERFACE ${BLAS_LIBRARIES}) - target_link_options(BLAS_${BLA_VENDOR} INTERFACE ${BLAS_LINKER_FLAGS}) - target_include_directories(BLAS_${BLA_VENDOR} SYSTEM INTERFACE include) # Use CBlas header in our own tree. + # Fail early if not found + if (NOT BLAS_FOUND) + message(STATUS "${BLA_VENDOR}: Missing") + continue() + endif () - if (NOT DEFAULT_BLAS) - set(DEFAULT_BLAS ${BLA_VENDOR}::${BLA_VENDOR}) + # ATLAS is weird and has extra requirements + if (BLA_VENDOR STREQUAL "ATLAS") + find_library(CBLAS_LIBRARY cblas) + if (NOT CBLAS_LIBRARY) + message(STATUS "${BLA_VENDOR}: Missing dependency on CBLAS (hint: set CBLAS_LIBRARY)") + continue() endif () + list(APPEND BLAS_LIBRARIES "${CBLAS_LIBRARY}") + endif () - list(APPEND BLAS_TARGETS ${BLA_VENDOR}) + # Don't use "Generic" BLAS if any good BLAS is available. + if (BLA_VENDOR STREQUAL "Generic" AND found_blases) + message(STATUS "${BLA_VENDOR}: Not considered") + continue() endif () + + message(STATUS "${BLA_VENDOR}: Found ${BLAS_LIBRARIES}") + + add_library(BLAS::${BLA_VENDOR} INTERFACE IMPORTED) + target_link_libraries(BLAS::${BLA_VENDOR} INTERFACE ${BLAS_LIBRARIES}) + target_link_options(BLAS::${BLA_VENDOR} INTERFACE ${BLAS_LINKER_FLAGS}) + target_include_directories(BLAS::${BLA_VENDOR} INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/include") # Use CBlas header in our own tree. + + list(APPEND found_blases ${BLA_VENDOR}) endforeach () -if (NOT BLAS_TARGETS) - message(FATAL_ERROR "Could not find any BLAS libraries! Searched among ${BLAS_VENDORS}") +if (NOT found_blases) + message(FATAL_ERROR "Could not find any BLAS libraries! Searched among ${known_vendors}") endif () # Load in the rest of the project. diff --git a/apps/linear_algebra/benchmarks/CMakeLists.txt b/apps/linear_algebra/benchmarks/CMakeLists.txt index ab76d880c017..e8e0a470c47e 100644 --- a/apps/linear_algebra/benchmarks/CMakeLists.txt +++ b/apps/linear_algebra/benchmarks/CMakeLists.txt @@ -1,7 +1,7 @@ add_executable(halide_benchmarks halide_benchmarks.cpp) target_compile_definitions(halide_benchmarks PRIVATE ENABLE_FTZ_DAZ) target_link_libraries(halide_benchmarks PRIVATE halide_blas Halide::Tools) -set(BENCHMARK_TARGETS halide_benchmarks) +set(benchmark_targets halide_benchmarks) find_package(Eigen3 QUIET) set(Eigen3 Eigen3::Eigen) @@ -18,39 +18,41 @@ if (TARGET ${Eigen3}) add_executable(eigen_benchmarks eigen_benchmarks.cpp) target_compile_definitions(eigen_benchmarks PRIVATE EIGEN_DONT_PARALLELIZE ENABLE_FTZ_DAZ) target_link_libraries(eigen_benchmarks PRIVATE ${Eigen3} Halide::Tools) - list(APPEND BENCHMARK_TARGETS eigen_benchmarks) + list(APPEND benchmark_targets eigen_benchmarks) message(STATUS "Eigen3: Found") else () message(STATUS "Eigen3: Missing") endif () -foreach (BLAS_TARGET IN LISTS BLAS_TARGETS) - set(TARGET ${BLAS_TARGET}_benchmarks) - add_executable(${TARGET} cblas_benchmarks.cpp) - target_compile_definitions(${TARGET} PRIVATE "BLAS_NAME=\"${BLAS_TARGET}\"") - target_link_libraries(${TARGET} PRIVATE ${BLAS_TARGET}::${BLAS_TARGET} Halide::Tools) - list(APPEND BENCHMARK_TARGETS ${TARGET}) +foreach (blas IN LISTS FOUND_BLASES) + set(blas_benchmarks "${blas}_benchmarks") + add_executable(${blas_benchmarks} cblas_benchmarks.cpp) + target_compile_definitions(${blas_benchmarks} PRIVATE "BLAS_NAME=\"${blas}\"") + target_link_libraries(${blas_benchmarks} PRIVATE BLAS::${blas} Halide::Tools) + list(APPEND benchmark_targets ${blas_benchmarks}) endforeach () # Large powers of two are a pathological case for the cache, so avoid # them for the benchmarks. -set(BLAS_LEVELS L1 L2 L3) -list(APPEND BENCHMARK_SIZES 64 128 256 512 1280 2560) -list(APPEND L1_BENCHMARKS scopy dcopy sscal dscal saxpy daxpy sdot ddot sasum dasum) -list(APPEND L2_BENCHMARKS sgemv_notrans dgemv_notrans sgemv_trans dgemv_trans sger dger) -list(APPEND L3_BENCHMARKS sgemm_notrans dgemm_notrans sgemm_transA dgemm_transA sgemm_transB dgemm_transB sgemm_transAB dgemm_transAB) - -foreach (TARGET IN LISTS BENCHMARK_TARGETS) - string(REPLACE "_benchmarks" "" BLA_VENDOR "${TARGET}") - foreach (LEVEL IN LISTS BLAS_LEVELS) - foreach (FUNC IN LISTS ${LEVEL}_BENCHMARKS) - foreach (SIZE IN LISTS BENCHMARK_SIZES) - set(TEST_NAME ${BLA_VENDOR}_${FUNC}_${SIZE}) - add_test(NAME ${TEST_NAME} - COMMAND ${TARGET} ${FUNC} ${SIZE}) - set_tests_properties("${TEST_NAME}" PROPERTIES - LABELS "linear_algebra;${BLA_VENDOR};${LEVEL};slow_tests" - PASS_REGULAR_EXPRESSION "${FUNC}[ \t]+${SIZE}" +set(blas_levels L1 L2 L3) +list(APPEND benchmark_sizes 64 128 256 512 1280 2560) +list(APPEND L1_functions scopy dcopy sscal dscal saxpy daxpy sdot ddot sasum dasum) +list(APPEND L2_functions sgemv_notrans dgemv_notrans sgemv_trans dgemv_trans sger dger) +list(APPEND L3_functions sgemm_notrans dgemm_notrans sgemm_transA dgemm_transA sgemm_transB dgemm_transB sgemm_transAB dgemm_transAB) + +foreach (benchmark IN LISTS benchmark_targets) + string(REPLACE "_benchmarks" "" vendor "${benchmark}") + foreach (level IN LISTS blas_levels) + foreach (func IN LISTS ${level}_functions) + foreach (size IN LISTS benchmark_sizes) + set(test_name ${vendor}_${func}_${size}) + + add_test(NAME ${test_name} + COMMAND ${benchmark} ${func} ${size}) + + set_tests_properties("${test_name}" PROPERTIES + LABELS "linear_algebra;${vendor};${level};slow_tests" + PASS_REGULAR_EXPRESSION "${func}[ \t]+${size}" SKIP_REGULAR_EXPRESSION "\\[SKIP\\]") endforeach () endforeach () diff --git a/apps/linear_algebra/tests/CMakeLists.txt b/apps/linear_algebra/tests/CMakeLists.txt index ee2707f54db1..2f80b30126cf 100644 --- a/apps/linear_algebra/tests/CMakeLists.txt +++ b/apps/linear_algebra/tests/CMakeLists.txt @@ -1,5 +1,5 @@ add_executable(test_halide_blas test_halide_blas.cpp) -target_link_libraries(test_halide_blas PRIVATE ${DEFAULT_BLAS} halide_blas) +target_link_libraries(test_halide_blas PRIVATE BLAS::BLAS halide_blas) add_test(NAME test_halide_blas COMMAND test_halide_blas) set_tests_properties(test_halide_blas PROPERTIES LABELS linear_algebra From a4b8f658b8ddb65e8e35143af2ae660bd7b86249 Mon Sep 17 00:00:00 2001 From: Alex Reinking Date: Mon, 8 Aug 2022 01:22:49 -0400 Subject: [PATCH 10/11] Drive-by: fix autotune_loop.sh install rule. --- packaging/CMakeLists.txt | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/packaging/CMakeLists.txt b/packaging/CMakeLists.txt index 0ff008bb73ac..56c0f770e57f 100644 --- a/packaging/CMakeLists.txt +++ b/packaging/CMakeLists.txt @@ -117,12 +117,8 @@ install(DIRECTORY ${Halide_SOURCE_DIR}/tools/ PATTERN "build_halide_h.cpp" EXCLUDE PATTERN "find_inverse.cpp" EXCLUDE) -install(FILES ${Halide_SOURCE_DIR}/src/autoschedulers/adams2019/autotune_loop.sh +install(PROGRAMS ${Halide_SOURCE_DIR}/src/autoschedulers/adams2019/autotune_loop.sh DESTINATION ${Halide_INSTALL_TOOLSDIR} - PERMISSIONS - OWNER_READ OWNER_WRITE OWNER_EXECUTE - GROUP_READ GROUP_EXECUTE - WORLD_READ WORLD_EXECUTE COMPONENT Halide_Development) ## From 200c5e25ab691a62e833c298adb55a0891b61d41 Mon Sep 17 00:00:00 2001 From: Alex Reinking Date: Mon, 8 Aug 2022 13:06:14 -0400 Subject: [PATCH 11/11] Fix CBLAS header in linear_algebra test_halide_blas --- apps/linear_algebra/tests/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/linear_algebra/tests/CMakeLists.txt b/apps/linear_algebra/tests/CMakeLists.txt index 2f80b30126cf..750a923c58e3 100644 --- a/apps/linear_algebra/tests/CMakeLists.txt +++ b/apps/linear_algebra/tests/CMakeLists.txt @@ -1,5 +1,7 @@ add_executable(test_halide_blas test_halide_blas.cpp) target_link_libraries(test_halide_blas PRIVATE BLAS::BLAS halide_blas) +target_include_directories(test_halide_blas PRIVATE "${linear_algebra_SOURCE_DIR}/include") + add_test(NAME test_halide_blas COMMAND test_halide_blas) set_tests_properties(test_halide_blas PROPERTIES LABELS linear_algebra