Buildsystem restructuring

- Allow linker file to be overriden
- Disable Trustzone build for other targets than Corstone-300
- Make toolchain TARGET_CPU variable cached

Change-Id: I98a15e1080e4bf49e029578888b1e4ce362bbab7
diff --git a/cmake/helpers.cmake b/cmake/helpers.cmake
index da954c0..3444e64 100644
--- a/cmake/helpers.cmake
+++ b/cmake/helpers.cmake
@@ -27,7 +27,8 @@
     cmake_parse_arguments(ARG "" "LINK_FILE;ENTRY" "" ${ARGN})
 
     # Store the link file in a property to be evaluated by the executable.
-    set_property(GLOBAL PROPERTY ETHOSU_TARGET_LINK_FILE ${CMAKE_CURRENT_SOURCE_DIR}/${ARG_LINK_FILE})
+    get_filename_component(LINK_FILE_PATH ${ARG_LINK_FILE} ABSOLUTE)
+    set_property(GLOBAL PROPERTY ETHOSU_TARGET_LINK_FILE ${LINK_FILE_PATH})
 
     if (ARG_ENTRY)
         target_link_options(${target} ${scope} --entry Reset_Handler)
@@ -42,17 +43,21 @@
 
     if (CMAKE_CXX_COMPILER_ID STREQUAL "ARMClang")
         set(LINK_FILE_EXT scatter)
-        set(LINK_FILE_IN ${LINK_FILE}.${LINK_FILE_EXT})
         set(LINK_FILE_OPTION "--scatter")
         # Note: the -mcpu flag is added to avoid warnings caused when using the default cpu/arch.
         set(COMPILER_PREPROCESSOR_OPTIONS -mcpu=${CMAKE_SYSTEM_PROCESSOR} --target=arm-arm-none-eabi -E -x c -P)
     elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
         set(LINK_FILE_EXT ld)
-        set(LINK_FILE_IN ${LINK_FILE}.${LINK_FILE_EXT})
         set(LINK_FILE_OPTION "-T")
         set(COMPILER_PREPROCESSOR_OPTIONS -E -x c -P)
     endif()
 
+    if (EXISTS ${LINK_FILE})
+        set(LINK_FILE_IN ${LINK_FILE})
+    else()
+        set(LINK_FILE_IN ${LINK_FILE}.${LINK_FILE_EXT})
+    endif()
+
     get_filename_component(LINK_FILE_OUT_BASE ${LINK_FILE} NAME)
     set(LINK_FILE_OUT ${CMAKE_CURRENT_BINARY_DIR}/${LINK_FILE_OUT_BASE}-${target}.${LINK_FILE_EXT})
 
@@ -140,10 +145,25 @@
 #############################################################################
 
 function(ethosu_add_binaries target)
+    set(SCRIPTS_DIR ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/../scripts)
+
     add_custom_command(TARGET ${target} POST_BUILD
         COMMAND ${SCRIPTS_DIR}/generate_binaries.py --output ./fw $<TARGET_FILE:${target}>
         BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/fw/*
         WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
         COMMENT "Generate binaries for ${target}")
+endfunction()
 
+#############################################################################
+# Ethos-U NPU configuration
+#############################################################################
+
+function(ethosu_get_architecture config)
+    string(TOLOWER ${config} config)
+    if(${config} MATCHES "^ethos-(u[0-9]+|uz)-([0-9]+$)")
+        set(ETHOSU_ARCH ${CMAKE_MATCH_1} PARENT_SCOPE)
+        set(ETHOSU_NUM_MACS ${CMAKE_MATCH_2} PARENT_SCOPE)
+    else()
+        message(FATAL_ERROR "Unknown NPU config ${config}")
+    endif()
 endfunction()