aboutsummaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
authorKristofer Jonsson <kristofer.jonsson@arm.com>2021-01-21 17:39:03 +0100
committerPer Åstrand <per.astrand@arm.com>2021-02-02 17:26:36 +0100
commitf62c3d756917295146d415fcba7b5208c13874f7 (patch)
treea8948a458d2db6bf2daa78b1e7dc411f2cff51d4 /cmake
parent6663630bb3feea222fd38278a962297c08d0b320 (diff)
downloadethos-u-core-platform-f62c3d756917295146d415fcba7b5208c13874f7.tar.gz
Build system refactoring
The source tree is configured for a specific target as defined in the targets directory. The common target components are defined in targets/common. Targets for real platform should include this directory to get the default target libraries setup. Change-Id: I7fced4bfacec97432cbbd4125bd5b4cdd21122e3
Diffstat (limited to 'cmake')
-rw-r--r--cmake/helpers.cmake93
1 files changed, 84 insertions, 9 deletions
diff --git a/cmake/helpers.cmake b/cmake/helpers.cmake
index e3b604a..686488b 100644
--- a/cmake/helpers.cmake
+++ b/cmake/helpers.cmake
@@ -16,26 +16,48 @@
# limitations under the License.
#
-function(ethosu_link_options target scope)
- cmake_parse_arguments(ARG "" "LINK_FILE" "" ${ARGN})
+# Add .elf to all executables
+set(CMAKE_EXECUTABLE_SUFFIX ".elf")
+
+#############################################################################
+# Link options
+#############################################################################
+
+function(ethosu_target_link_options target scope)
+ 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})
+
+ if (ARG_ENTRY)
+ target_link_options(${target} ${scope} --entry Reset_Handler)
+ endif()
+endfunction()
+
+function(ethosu_eval_link_options target)
+ # Get the link file from the cache
+ get_property(LINK_FILE GLOBAL PROPERTY ETHOSU_TARGET_LINK_FILE)
+
+ set(prop "$<TARGET_PROPERTY:${target},COMPILE_DEFINITIONS>")
if (CMAKE_CXX_COMPILER_ID STREQUAL "ARMClang")
- set(LINK_FILE_OUT ${CMAKE_CURRENT_SOURCE_DIR}/${ARG_LINK_FILE}.scatter)
+ set(LINK_FILE_OUT ${LINK_FILE}.scatter)
set(LINK_FILE_OPTION "--scatter")
+ target_link_options(${target} PUBLIC
+ --predefine=\"-D$<JOIN:${prop},\" ;--predefine=\"-D>\")
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
- set(LINK_FILE ${ARG_LINK_FILE}.ld)
- set(LINK_FILE_IN ${CMAKE_CURRENT_SOURCE_DIR}/${LINK_FILE})
- set(LINK_FILE_OUT ${CMAKE_CURRENT_BINARY_DIR}/${LINK_FILE})
+ set(LINK_FILE_IN ${LINK_FILE}.ld)
+ get_filename_component(LINK_FILE_OUT_BASE ${LINK_FILE} NAME)
+ set(LINK_FILE_OUT ${CMAKE_CURRENT_BINARY_DIR}/${LINK_FILE_OUT_BASE}-${target}.ld)
set(LINK_FILE_OPTION "-T")
- set(prop "$<TARGET_PROPERTY:${target},COMPILE_DEFINITIONS>")
add_custom_command(
OUTPUT ${LINK_FILE_OUT}
DEPENDS ${LINK_FILE_IN}
BYPRODUCTS ${LINK_FILE_OUT}
COMMAND ${CMAKE_C_COMPILER} -E -x c -P -o ${LINK_FILE_OUT} ${LINK_FILE_IN}
- COMMAND_EXPAND_LISTS "$<$<BOOL:${prop}>:-D$<JOIN:${prop},;-D>>"
+ COMMAND_EXPAND_LISTS "-D$<JOIN:${prop},;-D>"
COMMENT "Preprocessing and generating linker script"
VERBATIM)
add_custom_target(${target}-linker-script
@@ -44,6 +66,59 @@ function(ethosu_link_options target scope)
add_dependencies(${target} ${target}-linker-script)
endif()
- target_link_options(${target} ${scope} ${LINK_FILE_OPTION} ${LINK_FILE_OUT})
+ target_link_options(${target} PUBLIC ${LINK_FILE_OPTION} ${LINK_FILE_OUT})
set_target_properties(${target} PROPERTIES LINK_DEPENDS ${LINK_FILE_OUT})
endfunction()
+
+#############################################################################
+# Executable
+#############################################################################
+
+function(ethosu_add_executable target)
+ cmake_parse_arguments(ARGS "" "TARGET_LIBRARY" "SOURCES;LIBRARIES" ${ARGN})
+ add_executable(${target})
+
+ target_sources(${target} PRIVATE
+ ${ARGS_SOURCES})
+
+ if(NOT ARGS_TARGET_LIBRARY)
+ set(ARGS_TARGET_LIBRARY ethosu_target_init)
+ endif()
+
+ target_link_libraries(${target} PRIVATE
+ ${ARGS_TARGET_LIBRARY} ethosu_core ${ARGS_LIBRARIES})
+
+ ethosu_eval_link_options(${target})
+endfunction()
+
+#############################################################################
+# Test
+#############################################################################
+
+function(ethosu_add_test target)
+ if(NOT BUILD_TESTING)
+ return()
+ endif()
+
+ cmake_parse_arguments(ARGS "" "NAME" "COMMAND" ${ARGN})
+
+ if (NOT ARGS_COMMAND)
+ set(ARGS_COMMAND ${ETHOSU_COMMAND_DEFAULT})
+ endif()
+
+ if (NOT ARGS_NAME)
+ set(ARGS_NAME ${target})
+ endif()
+
+ add_test(NAME ${ARGS_NAME}
+ COMMAND ${ARGS_COMMAND} $<TARGET_FILE:${target}>)
+endfunction()
+
+#############################################################################
+# Executable and test
+#############################################################################
+
+function(ethosu_add_executable_test target)
+ ethosu_add_executable(${target} ${ARGN})
+ ethosu_add_test(${target} ${ARGN})
+endfunction()