From 0edd46baeeeced110d60947f6a2b23c5a08449ee Mon Sep 17 00:00:00 2001 From: Jakub Sujak Date: Fri, 14 Mar 2025 11:07:16 +0000 Subject: [PATCH 1/3] Add CMake installation and find_package() support Signed-off-by: Jakub Sujak --- CMakeLists.txt | 55 +++++++++++++++++++++++++++++++++++++++-- cmake/FetchGBench.cmake | 5 +++- cmake/FetchGTest.cmake | 4 ++- 3 files changed, 60 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 45c95c39..4047f8a5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,6 +26,8 @@ set(CMAKE_CXX_EXTENSIONS OFF) list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake") +include(GNUInstallDirs) + option(KLEIDIAI_BUILD_TESTS "Build unit tests." ON) option(KLEIDIAI_BUILD_BENCHMARK "Build the benchmark tool." OFF) option(KLEIDIAI_ENABLE_CLANG_TIDY "Build with Clang-Tidy checks." OFF) @@ -208,6 +210,8 @@ set(KLEIDIAI_FILES_SME2 ) add_library(kleidiai) +add_library(${PROJECT_NAME}::kleidiai ALIAS kleidiai) + target_sources(kleidiai PRIVATE ${KLEIDIAI_FILES_SCALAR}) # Selectively enable architecture features. @@ -248,8 +252,9 @@ else() set_source_files_properties(${KLEIDIAI_FILES_ASM} PROPERTIES LANGUAGE ASM_MARMASM) endif() -target_include_directories(kleidiai - PUBLIC $ +target_include_directories(kleidiai PUBLIC + $ + $ ) target_compile_options(kleidiai @@ -372,3 +377,49 @@ if(KLEIDIAI_BUILD_BENCHMARK) benchmark::benchmark ) endif() + +install(TARGETS kleidiai + EXPORT ${PROJECT_NAME}Targets + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" +) + +install(EXPORT ${PROJECT_NAME}Targets + DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" + NAMESPACE ${PROJECT_NAME}:: +) + +install(DIRECTORY kai + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" + FILES_MATCHING + PATTERN *.h +) + +include(CMakePackageConfigHelpers) + +write_basic_package_version_file( + ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake + VERSION ${PROJECT_VERSION} + COMPATIBILITY SameMajorVersion +) + +set(ConfigContents + "@PACKAGE_INIT@\n" + "include(\"\${CMAKE_CURRENT_LIST_DIR}/${PROJECT_NAME}Targets.cmake\")\n" +) + +file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake.in" + "${ConfigContents}" +) + +configure_package_config_file("${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake.in" + "${PROJECT_NAME}Config.cmake" + INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" +) + +install(FILES + "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" + DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" +) diff --git a/cmake/FetchGBench.cmake b/cmake/FetchGBench.cmake index 2de00d46..9c22a4f3 100644 --- a/cmake/FetchGBench.cmake +++ b/cmake/FetchGBench.cmake @@ -1,5 +1,5 @@ # -# SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its affiliates +# SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its affiliates # # SPDX-License-Identifier: Apache-2.0 # @@ -15,4 +15,7 @@ fetchcontent_declare(googlebench URL_HASH SHA256=84c49c4c07074f36fbf8b4f182ed7d75191a6fa72756ab4a17848455499f4286 ) +set(BENCHMARK_ENABLE_INSTALL OFF CACHE BOOL "" FORCE) +set(BENCHMARK_INSTALL_DOCS OFF CACHE BOOL "" FORCE) + fetchcontent_makeavailable(googlebench) diff --git a/cmake/FetchGTest.cmake b/cmake/FetchGTest.cmake index 6089594b..91ba52f3 100644 --- a/cmake/FetchGTest.cmake +++ b/cmake/FetchGTest.cmake @@ -1,5 +1,5 @@ # -# SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its affiliates +# SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its affiliates # # SPDX-License-Identifier: Apache-2.0 # @@ -16,5 +16,7 @@ fetchcontent_declare(googletest ) set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) +set(BUILD_GMOCK OFF CACHE BOOL "" FORCE) +set(INSTALL_GTEST OFF CACHE BOOL "" FORCE) fetchcontent_makeavailable(googletest) -- GitLab From ceccf650441e33751abc338ab30175f5e422fcb0 Mon Sep 17 00:00:00 2001 From: Jakub Sujak Date: Fri, 14 Mar 2025 11:19:48 +0000 Subject: [PATCH 2/3] Fix string being misinterpreted as list Signed-off-by: Jakub Sujak --- CMakeLists.txt | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4047f8a5..3d4dbdb4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -399,14 +399,13 @@ install(DIRECTORY kai include(CMakePackageConfigHelpers) write_basic_package_version_file( - ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake + "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" VERSION ${PROJECT_VERSION} COMPATIBILITY SameMajorVersion ) -set(ConfigContents - "@PACKAGE_INIT@\n" - "include(\"\${CMAKE_CURRENT_LIST_DIR}/${PROJECT_NAME}Targets.cmake\")\n" +set(ConfigContents "@PACKAGE_INIT@\n +include(\"\${CMAKE_CURRENT_LIST_DIR}/${PROJECT_NAME}Targets.cmake\")\n" ) file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake.in" -- GitLab From d54f1280134e7abf8a5261e03ced2886b2c2ee47 Mon Sep 17 00:00:00 2001 From: Jakub Sujak Date: Fri, 14 Mar 2025 14:57:19 +0000 Subject: [PATCH 3/3] Update CHANGELOG Signed-off-by: Jakub Sujak --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b297a7c5..add343fc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,8 @@ KleidiAI follows the [Semantic Versioning](https://semver.org/) specification fo ## Upcoming Release +- Add CMake installation and `find_package()` support. + ## v1.5.0 - Extend benchmark tool to support all matrix multiplication micro-kernels. -- GitLab