diff --git a/CMakeLists.txt b/CMakeLists.txt index a017d1962c51b7074048e54b4f3c37bd5abf6b59..0a0667b1fd06403bc2e071b9f66616c02ae3fb06 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,9 +20,24 @@ set(CMAKE_CXX_EXTENSIONS OFF) list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake") -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) +option(KLEIDIAI_BUILD_BENCHMARK "Build the benchmark tool." OFF) +option(KLEIDIAI_BUILD_STATIC "Build static binaries." OFF) +option(KLEIDIAI_BUILD_TESTS "Build unit tests." ON) +option(KLEIDIAI_ENABLE_CLANG_TIDY "Build with Clang-Tidy checks." OFF) + +if(CMAKE_GENERATOR STREQUAL "Unix Makefiles" OR CMAKE_GENERATOR STREQUAL "Ninja") + set(KLEIDIAI_COMPILATION_DB_DEFAULT ON) +else() + set(KLEIDIAI_COMPILATION_DB_DEFAULT OFF) +endif() + +if(CMAKE_EXPORT_COMPILE_COMMANDS STREQUAL "") + set(CMAKE_EXPORT_COMPILE_COMMANDS ${KLEIDIAI_COMPILATION_DB_DEFAULT}) +endif() + +if(KLEIDIAI_BUILD_STATIC) + set(KLEIDIAI_LINKAGE -static) +endif() if(KLEIDIAI_ENABLE_CLANG_TIDY) set(CMAKE_C_CLANG_TIDY "clang-tidy") @@ -250,6 +265,9 @@ if(KLEIDIAI_BUILD_TESTS) PUBLIC kleidiai ) + target_link_options(kleidiai_test_framework + PRIVATE ${KLEIDIAI_LINKAGE}) + add_executable(kleidiai_test test/tests/matmul_test.cpp test/tests/matmul_clamp_f32_f32_f32p_test.cpp @@ -267,6 +285,8 @@ if(KLEIDIAI_BUILD_TESTS) PRIVATE GTest::gtest_main ) + target_link_options(kleidiai_test + PRIVATE ${KLEIDIAI_LINKAGE}) # Cross-compiling is a common use case which creates a conflict if DISCOVERY_MODE is set to POST_BUILD (by default) # since the host platform does not match the target. Setting the mode to PRE_TEST avoids this conflict. This feature @@ -299,7 +319,11 @@ if(KLEIDIAI_BUILD_BENCHMARK) target_link_libraries( kleidiai_benchmark kleidiai - benchmark::benchmark) + benchmark::benchmark + ) + + target_link_options(kleidiai_benchmark + PRIVATE ${KLEIDIAI_LINKAGE}) set(KLEIDIAI_BENCHMARK_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) target_include_directories(kleidiai_benchmark