MLECO-1871: Adding external use-case directories support

* Cmake updates
* Markdownlint on docs
* Removing windows command leftovers

Signed-off-by: Isabella Gottardi <isabella.gottardi@arm.com>
Change-Id: I4a12b4e798559e8f4e8a3307038df7829137184a
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e2f109c..5317bfa 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -104,6 +104,8 @@
 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
 set(SRC_PATH ${CMAKE_CURRENT_SOURCE_DIR}/source)
+set(TEST_SRCS  ${CMAKE_CURRENT_SOURCE_DIR}/tests)
+list(APPEND USE_CASES_TESTS_SEARCH_DIR_LIST ${TEST_SRCS}/use_case)
 
 if (CPU_PROFILE_ENABLED)
     set(PROFILING_OPT "${PROFILING_OPT} -DCPU_PROFILE_ENABLED")
@@ -234,13 +236,17 @@
 list(FILTER SRC_APPLICATION EXCLUDE REGEX ".*main\\.c.*$")
 
 list(JOIN USE_CASE_BUILD "" USE_CASE_BUILD_STR)
+list(APPEND USE_CASES_SEARCH_DIR_LIST ${SRC_PATH}/use_case)
+message(STATUS "Use-cases source paths: ${USE_CASES_SEARCH_DIR_LIST}.")
 if (${USE_CASE_BUILD_STR} STREQUAL all)
-    SUBDIRLIST(USE_CASES ${SRC_PATH}/use_case/)
+    foreach(USE_CASES_SEARCH_DIR ${USE_CASES_SEARCH_DIR_LIST})
+        SUBDIRLIST(USE_CASES_SUBDIRS ${USE_CASES_SEARCH_DIR})
+        list(APPEND USE_CASES ${USE_CASES_SUBDIRS})
+    endforeach()
 else()
     set(USE_CASES ${USE_CASE_BUILD})
 endif()
 
-set(TEST_SRCS  ${CMAKE_CURRENT_SOURCE_DIR}/tests)
 if (NOT ${CMAKE_CROSSCOMPILING})
 
     #Test TPIP
@@ -263,10 +269,17 @@
 message(STATUS "Building use-cases: ${USE_CASES}.")
 foreach(use_case ${USE_CASES})
 
-    if (EXISTS ${SRC_PATH}/use_case/${use_case})
-        message(STATUS "Found sources for use-case ${use_case}")
-    else ()
-        message(FATAL_ERROR "Faild to find sources for ${use_case} in ${SRC_PATH}/use_case/${use_case}!")
+    set(SRC_USE_CASE "")
+    foreach(USE_CASES_SEARCH_DIR ${USE_CASES_SEARCH_DIR_LIST})
+        if (EXISTS ${USE_CASES_SEARCH_DIR}/${use_case})
+            message(STATUS "Found sources for use-case ${use_case}")
+            set(SRC_USE_CASE ${USE_CASES_SEARCH_DIR})
+            break()
+        endif ()
+    endforeach()
+
+    if (${SRC_USE_CASE} STREQUAL "")
+        message(FATAL_ERROR "Failed to find sources for ${use_case}!")
     endif ()
     # Executable application:
     set(TARGET_NAME "ethos-u-${use_case}")
@@ -280,20 +293,20 @@
     file(MAKE_DIRECTORY ${SRC_GEN_DIR} ${INC_GEN_DIR})
 
     file(GLOB_RECURSE UC_SRC
-        "${SRC_PATH}/use_case/${use_case}/src/*.cpp"
-        "${SRC_PATH}/use_case/${use_case}/src/*.cc"
-        "${SRC_PATH}/use_case/${use_case}/src/*.c"
-        "${SRC_PATH}/use_case/${use_case}/src/**/*.cpp"
-        "${SRC_PATH}/use_case/${use_case}/src/**/*.cc"
-        "${SRC_PATH}/use_case/${use_case}/src/**/*.c"
+        "${SRC_USE_CASE}/${use_case}/src/*.cpp"
+        "${SRC_USE_CASE}/${use_case}/src/*.cc"
+        "${SRC_USE_CASE}/${use_case}/src/*.c"
+        "${SRC_USE_CASE}/${use_case}/src/**/*.cpp"
+        "${SRC_USE_CASE}/${use_case}/src/**/*.cc"
+        "${SRC_USE_CASE}/${use_case}/src/**/*.c"
         )
 
     set(UC_INCLUDE
-        ${SRC_PATH}/use_case/${use_case}/include
+        ${SRC_USE_CASE}/${use_case}/include
         )
 
     file(GLOB UC_CMAKE_FILE
-        "${SRC_PATH}/use_case/${use_case}/*.cmake"
+        "${SRC_USE_CASE}/${use_case}/*.cmake"
         )
 
     include(${UC_CMAKE_FILE})
@@ -377,8 +390,20 @@
             --output_file_path  ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/images-${use_case}.txt
             COMMENT "Generating FPGA mappings file")
     elseif (${TARGET_PLATFORM} STREQUAL native)
+
+        # If native build tests
+        set(TEST_SRC_USE_CASE "")
+        foreach(USE_CASES_TESTS_SEARCH_DIR ${USE_CASES_TESTS_SEARCH_DIR_LIST})
+
+            if (EXISTS ${USE_CASES_TESTS_SEARCH_DIR}/${use_case})
+                message(STATUS "Found tests for use-case ${use_case} at ${USE_CASES_TESTS_SEARCH_DIR}/${use_case}.")
+                set(TEST_SRC_USE_CASE ${USE_CASES_TESTS_SEARCH_DIR})
+                break()
+            endif ()
+        endforeach()
+
         # Add tests only if they exists for the usecase
-        if (EXISTS ${TEST_SRCS}/use_case/${use_case})
+        if (NOT ${TEST_SRC_USE_CASE} STREQUAL "")
 
             set(TEST_RESOURCES_INCLUDE
                 "${TEST_SRCS}/utils/"
@@ -391,12 +416,12 @@
                 "${TEST_SRCS}/common/*.cc"
                 "${TEST_SRCS}/utils/*.cc"
                 "${TEST_SRCS}/utils/*.cpp"
-                "${TEST_SRCS}/use_case/${use_case}/*.cpp"
-                "${TEST_SRCS}/use_case/${use_case}/*.cc"
-                "${TEST_SRCS}/use_case/${use_case}/*.c"
-                "${TEST_SRCS}/use_case/${use_case}/**/*.cpp"
-                "${TEST_SRCS}/use_case/${use_case}/**/*.cc"
-                "${TEST_SRCS}/use_case/${use_case}/**/*.c"
+                "${TEST_SRC_USE_CASE}/${use_case}/*.cpp"
+                "${TEST_SRC_USE_CASE}/${use_case}/*.cc"
+                "${TEST_SRC_USE_CASE}/${use_case}/*.c"
+                "${TEST_SRC_USE_CASE}/${use_case}/**/*.cpp"
+                "${TEST_SRC_USE_CASE}/${use_case}/**/*.cc"
+                "${TEST_SRC_USE_CASE}/${use_case}/**/*.c"
                 )
 
             if (DEFINED ${use_case}_TEST_IFM AND DEFINED ${use_case}_TEST_OFM)
@@ -428,6 +453,7 @@
                 "${TEST_TARGET_NAME}"
                 "catch2-headers"
             )
+
         endif ()
     endif ()
 endforeach()