From 2a14f12d0a09d0664ac9b18514ee6b30a67dd3a1 Mon Sep 17 00:00:00 2001
From: Damiano Amatruda <damiano.amatruda@skywarder.eu>
Date: Sat, 11 Dec 2021 22:10:23 +0100
Subject: [PATCH] [CMake] Allow to compile Catch2 tests for host

- CMake function 'sbs_target' now links to 'boardcore-host' when not
  cross-compiling
- CMake function 'sbs_catch_test' is added to register Catch2 test cases
  in CTest only when not cross-compiling
---
 CMakeLists.txt  |  3 ++-
 cmake/sbs.cmake | 26 ++++++++++++++++++--------
 2 files changed, 20 insertions(+), 9 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 47756e137..5e223ae26 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -20,6 +20,7 @@
 # THE SOFTWARE.
 
 cmake_minimum_required(VERSION 3.16)
+enable_testing()
 include(cmake/sbs.cmake)
 
 #-----------------------------------------------------------------------------#
@@ -103,7 +104,7 @@ add_executable(catch-tests-entry
 )
 target_compile_definitions(catch-tests-entry PUBLIC USE_MOCK_PERIPHERALS)
 sbs_target(catch-tests-entry stm32f429zi_stm32f4discovery)
-#catch_discover_tests(catch-tests-entry)
+sbs_catch_test(catch-tests-entry)
 
 #-----------------------------------------------------------------------------#
 #                               Tests - Drivers                               #
diff --git a/cmake/sbs.cmake b/cmake/sbs.cmake
index b5d330c18..17f5f3ef5 100644
--- a/cmake/sbs.cmake
+++ b/cmake/sbs.cmake
@@ -46,12 +46,22 @@ function(sbs_target TARGET OPT_BOARD)
         message(FATAL_ERROR "No board selected")
     endif()
     target_include_directories(${TARGET} PRIVATE src/shared)
-    target_link_libraries(${TARGET} PRIVATE SkywardBoardcore::Boardcore-${OPT_BOARD})
-    add_custom_command(
-        TARGET ${TARGET} POST_BUILD
-        COMMAND ${CMAKE_OBJCOPY} -O ihex ${TARGET} ${TARGET}.hex
-        COMMAND ${CMAKE_OBJCOPY} -O binary ${TARGET} ${TARGET}.bin
-        BYPRODUCTS ${TARGET}.hex ${TARGET}.bin
-        VERBATIM
-    )
+    if(CMAKE_CROSSCOMPILING)
+        target_link_libraries(${TARGET} PRIVATE SkywardBoardcore::Boardcore-${OPT_BOARD})
+        add_custom_command(
+            TARGET ${TARGET} POST_BUILD
+            COMMAND ${CMAKE_OBJCOPY} -O ihex ${TARGET} ${TARGET}.hex
+            COMMAND ${CMAKE_OBJCOPY} -O binary ${TARGET} ${TARGET}.bin
+            BYPRODUCTS ${TARGET}.hex ${TARGET}.bin
+            VERBATIM
+        )
+    else()
+        target_link_libraries(${TARGET} PRIVATE SkywardBoardcore::Boardcore-host)
+    endif()
+endfunction()
+
+function(sbs_catch_test TARGET)
+    if(NOT CMAKE_CROSSCOMPILING)
+        catch_discover_tests(${TARGET})
+    endif()
 endfunction()
-- 
GitLab