From d2d5e5b1eca847f395cfac5e3438856217d1a131 Mon Sep 17 00:00:00 2001 From: paul nehlich Date: Wed, 22 May 2024 10:47:42 +0200 Subject: [PATCH] Added Findcommon.cmake and collect.cmake; common-config.cmake still missing --- CMakeLists.txt | 6 +- Findcommon.cmake | 219 +++++++++++++++++++++++++++ bsp_z7/CMakeLists.txt | 5 +- bsp_z7/ps7_cortexa9_0/CMakeLists.txt | 9 +- collect.cmake | 36 +++++ 5 files changed, 268 insertions(+), 7 deletions(-) create mode 100644 Findcommon.cmake create mode 100644 collect.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index bcffc80..9a7fa1f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,7 +8,8 @@ project(romeo-obsw C CXX ASM) # Pre-Sources preparation # ############################################################################## - +include(collect.cmake) +include(Findcommon.cmake) # Specify the C++ standard set(CMAKE_CXX_STANDARD 23) @@ -22,6 +23,7 @@ set(FreeRTOS_PATH FreeRTOS-Kernel/) set(MISSION_PATH mission/) set(FreeRTOS_CONFIG_PATH bsp_z7/freeRTOS) set(BSP_PATH bsp_z7) +set(CMAKE_MODULE_PATH Findcommon.cmake) set (LWIP_DIR contrib/lwip) @@ -110,4 +112,4 @@ if(CMAKE_VERBOSE) endif() # Compile options for all sources. -target_compile_options(${TARGET_NAME} PRIVATE ${WARNING_FLAGS}) \ No newline at end of file +target_compile_options(${TARGET_NAME} PRIVATE ${WARNING_FLAGS}) diff --git a/Findcommon.cmake b/Findcommon.cmake new file mode 100644 index 0000000..1ab889f --- /dev/null +++ b/Findcommon.cmake @@ -0,0 +1,219 @@ +# Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved. +# SPDX-License-Identifier: MIT + +option(NON_YOCTO "Non Yocto embeddedsw FLOW" OFF) +set(CMAKE_POLICY_DEFAULT_CMP0140 OLD) + +set (CMAKE_INSTALL_LIBDIR "lib") +function (collector_create name base) + set_property (GLOBAL PROPERTY "COLLECT_${name}_LIST") + set_property (GLOBAL PROPERTY "COLLECT_${name}_BASE" "${base}") +endfunction (collector_create) + +function (collector_list var name) + get_property (_list GLOBAL PROPERTY "COLLECT_${name}_LIST") + set (${var} "${_list}" PARENT_SCOPE) +endfunction (collector_list) + +function (collector_base var name) + get_property (_base GLOBAL PROPERTY "COLLECT_${name}_BASE") + set (${var} "${_base}" PARENT_SCOPE) +endfunction (collector_base) + +function (collect name) + collector_base (_base ${name}) + string(COMPARE NOTEQUAL "${_base}" "" _is_rel) + set (_list) + foreach (s IN LISTS ARGN) + if (_is_rel) + get_filename_component (s "${s}" ABSOLUTE) + file (RELATIVE_PATH s "${_base}" "${s}") + endif (_is_rel) + list (APPEND _list "${s}") + endforeach () + set_property (GLOBAL APPEND PROPERTY "COLLECT_${name}_LIST" "${_list}") +endfunction (collect) + +function(LIST_INDEX index match PROP) + foreach (prop ${PROP}) + if ("${prop}" STREQUAL "${match}") + set(index ${index} PARENT_SCOPE) + return() + endif() + MATH(EXPR index "${index}+1") + endforeach() +endfunction() + +function(get_headers headers) + foreach(header ${_headers}) + string(REPLACE "/" ";" PATH_LIST ${header}) + list(GET PATH_LIST -1 header) + list(APPEND clean_headers ${CMAKE_INCLUDE_PATH}/${header}) + set(clean_headers ${clean_headers} PARENT_SCOPE) + endforeach() + return(${clean_headers}) +endfunction() + +macro(subdirlist result curdir) + file(GLOB subdirs RELATIVE ${curdir} ${curdir}/*) + set(dirlist "") + foreach(subdir ${subdirs}) + if(IS_DIRECTORY ${curdir}/${subdir}) + list(APPEND dirlist ${subdir}) + endif() + endforeach() + set(${result} ${dirlist}) +endmacro() + +function (linker_gen path) + if (NOT EXISTS "${CMAKE_SOURCE_DIR}/lscript.ld") + if (NOT DEFINED STACK_SIZE) + if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "microblaze") + set(STACK_SIZE 0x400) + else() + set(STACK_SIZE 0x2000) + endif() + endif() + if (NOT DEFINED HEAP_SIZE) + if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "microblaze") + set(HEAP_SIZE 0x400) + else() + set(HEAP_SIZE 0x2000) + endif() + endif() + SET(MEM_NODE_INSTANCES "${TOTAL_MEM_CONTROLLERS}" CACHE STRING "Memory Controller") + SET_PROPERTY(CACHE MEM_NODE_INSTANCES PROPERTY STRINGS "${TOTAL_MEM_CONTROLLERS}") + set(CUSTOM_LINKER_FILE "None" CACHE STRING "Custom Linker Script") + list(LENGTH MEM_NODE_INSTANCES _len) + if (${_len} EQUAL 1) + set(DDR ${MEM_NODE_INSTANCES}) + endif() + if(("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "cortexa72") + OR ("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "cortexa78") + OR ("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "cortexa53") + OR ("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "cortexa53-32") + OR ("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "aarch64")) + configure_file(${path}/lscript_a53.ld.in ${CMAKE_SOURCE_DIR}/lscript.ld) + list(APPEND LINKER_FILE_PATH ${path}/lscript_a53.ld.in) + list(APPEND LINKER_FILE lscript_a53.ld.in) + endif() + + if(("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "microblaze") OR + ("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "microblazeel") OR + ("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "plm_microblaze") OR + ("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "pmu_microblaze")) + configure_file(${path}/lscript_mb.ld.in ${CMAKE_SOURCE_DIR}/lscript.ld) + list(APPEND LINKER_FILE_PATH ${path}/lscript_mb.ld.in) + list(APPEND LINKER_FILE lscript_mb.ld.in) + endif() + + if(("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "cortexr5")) + if("${CMAKE_MACHINE}" STREQUAL "Versal") + configure_file(${path}/lscript_versal_r5.ld.in ${CMAKE_SOURCE_DIR}/lscript.ld) + list(APPEND LINKER_FILE_PATH ${path}/lscript_versal_r5.ld.in) + list(APPEND LINKER_FILE lscript_versal_r5.ld.in) + else() + configure_file(${path}/lscript_r5.ld.in ${CMAKE_SOURCE_DIR}/lscript.ld) + list(APPEND LINKER_FILE_PATH ${path}/lscript_r5.ld.in) + list(APPEND LINKER_FILE lscript_r5.ld.in) + endif() + endif() + + if(("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "cortexr52")) + configure_file(${path}/lscript_versal_net_r5.ld.in ${CMAKE_SOURCE_DIR}/lscript.ld) + list(APPEND LINKER_FILE_PATH ${path}/lscript_versal_net_r5.ld.in) + list(APPEND LINKER_FILE lscript_versal_net_r5.ld.in) + endif() + + if(("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "cortexa9")) + configure_file(${path}/lscript_a9.ld.in ${CMAKE_SOURCE_DIR}/lscript.ld) + list(APPEND LINKER_FILE_PATH ${path}/lscript_a9.ld.in) + list(APPEND LINKER_FILE lscript_a9.ld.in) + endif() + + if (NOT "${CUSTOM_LINKER_FILE}" STREQUAL "None") + execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${CUSTOM_LINKER_FILE} ${CMAKE_SOURCE_DIR}/) + endif() + if (${NON_YOCTO}) + file (REMOVE_RECURSE ${path}) + endif() + endif() +endfunction(linker_gen) + +function(gen_exheader path drvname addr prefix) + string(TOUPPER ${drvname} DRVNAME) + set(ADDR_DEFINE "#define X${DRVNAME}_BASEADDRESS ${addr}U") + + if (NOT ${prefix}) + set(DRVNAME X${DRVNAME}) + configure_file(${path}/example.h.in ${CMAKE_SOURCE_DIR}/${prefix}${drvname}_example.h) + else() + configure_file(${path}/example.h.in ${CMAKE_SOURCE_DIR}/${drvname}_example.h) + endif() +endfunction(gen_exheader) + +function(gen_bspconfig) + execute_process(COMMAND lopper $ENV{SYSTEM_DTFILE} -- baremetal_bspconfig_xlnx ${ESW_MACHINE} ${CMAKE_SOURCE_DIR} + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/common + RESULT_VARIABLE output) + execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/common/MemConfig.cmake ${CMAKE_SOURCE_DIR}/MemConfig.cmake) +endfunction(gen_bspconfig) + +function(get_drvlist) + execute_process(COMMAND lopper $ENV{SYSTEM_DTFILE} -- baremetaldrvlist_xlnx ${ESW_MACHINE} ${CMAKE_SOURCE_DIR}/../../ + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + RESULT_VARIABLE output) +endfunction(get_drvlist) + +function(gen_drvconfig drvname) + if ("${drvname}" STREQUAL "uartps" OR + "${drvname}" STREQUAL "uartlite" OR + "${drvname}" STREQUAL "uartpsv") + execute_process(COMMAND lopper $ENV{SYSTEM_DTFILE} -- baremetalconfig_xlnx ${ESW_MACHINE} ${CMAKE_SOURCE_DIR}/${drvname}/src/ stdin + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/${drvname}/src/ + RESULT_VARIABLE output) + else() + execute_process(COMMAND lopper $ENV{SYSTEM_DTFILE} -- baremetalconfig_xlnx ${ESW_MACHINE} ${CMAKE_SOURCE_DIR}/${drvname}/src/ + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/${drvname}/src/ + RESULT_VARIABLE output) + endif() +endfunction(gen_drvconfig) + +function(gen_xparams) + execute_process(COMMAND lopper $ENV{SYSTEM_DTFILE} -- baremetal_xparameters_xlnx ${ESW_MACHINE} ${CMAKE_SOURCE_DIR}/../../ + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + RESULT_VARIABLE output) +endfunction(gen_xparams) + +function(gen_linker) + execute_process(COMMAND lopper $ENV{SYSTEM_DTFILE} -- baremetallinker_xlnx ${ESW_MACHINE} ${CMAKE_SOURCE_DIR}/ + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + RESULT_VARIABLE output) +endfunction(gen_linker) + +function(gen_libconfig) + execute_process(COMMAND lopper $ENV{SYSTEM_DTFILE} -- bmcmake_metadata_xlnx.py ${ESW_MACHINE} ${CMAKE_SOURCE_DIR}/ hwcmake_metadata ${CMAKE_SOURCE_DIR}/../../../../ + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + RESULT_VARIABLE output) +endfunction(gen_libconfig) + +macro(print_elf_size size_command app_name) + if(DEFINED ${size_command}) + add_custom_command( + TARGET ${app_name}.elf POST_BUILD + COMMAND ${${size_command}} --format=berkeley ${app_name}.elf + COMMAND ${${size_command}} --format=berkeley ${app_name}.elf > ${CMAKE_BINARY_DIR}/${app_name}.elf.size + VERBATIM) + endif() +endmacro() + +function(find_project_type src_ext PROJECT_TYPE) + set(cpp_extensions ".cpp;.cc;.CPP;.c++;.cxx") + foreach(extension ${cpp_extensions}) + if (${extension} IN_LIST src_ext) + set(PROJECT_TYPE "c++" PARENT_SCOPE) + return() + endif() + endforeach() + set(PROJECT_TYPE "c" PARENT_SCOPE) +endfunction() diff --git a/bsp_z7/CMakeLists.txt b/bsp_z7/CMakeLists.txt index 240bf63..0140f9f 100644 --- a/bsp_z7/CMakeLists.txt +++ b/bsp_z7/CMakeLists.txt @@ -1,2 +1,5 @@ add_subdirectory(freeRTOS) -add_subdirectory(ps7_cortexa9_0) \ No newline at end of file + + +add_subdirectory(ps7_cortexa9_0) + diff --git a/bsp_z7/ps7_cortexa9_0/CMakeLists.txt b/bsp_z7/ps7_cortexa9_0/CMakeLists.txt index d6f7f58..c438bf1 100644 --- a/bsp_z7/ps7_cortexa9_0/CMakeLists.txt +++ b/bsp_z7/ps7_cortexa9_0/CMakeLists.txt @@ -1,3 +1,8 @@ + + +add_subdirectory(libsrc/common/src) + + add_subdirectory(libsrc/gpiops) add_subdirectory(libsrc/scugic) add_subdirectory(libsrc/scutimer) @@ -5,10 +10,6 @@ add_subdirectory(libsrc/scuwdt) add_subdirectory(libsrc/standalone) - -add_subdirectory(libsrc/common/src) - -add_subdirectory(libsrc/board_common/rfclk/src) add_subdirectory(libsrc/uartps) add_subdirectory(libsrc/can/src) diff --git a/collect.cmake b/collect.cmake new file mode 100644 index 0000000..3a1c580 --- /dev/null +++ b/collect.cmake @@ -0,0 +1,36 @@ +function (collector_create name base) + set_property (GLOBAL PROPERTY "COLLECT_${name}_LIST") + set_property (GLOBAL PROPERTY "COLLECT_${name}_BASE" "${base}") +endfunction (collector_create) + +function (collector_list var name) + get_property (_list GLOBAL PROPERTY "COLLECT_${name}_LIST") + set (${var} "${_list}" PARENT_SCOPE) +endfunction (collector_list) + +function (collector_base var name) + get_property (_base GLOBAL PROPERTY "COLLECT_${name}_BASE") + set (${var} "${_base}" PARENT_SCOPE) +endfunction (collector_base) + +function (collect name) + collector_base (_base ${name}) + string(COMPARE NOTEQUAL "${_base}" "" _is_rel) + set (_list) + foreach (s IN LISTS ARGN) + if (_is_rel) + get_filename_component (s "${s}" ABSOLUTE) + file (RELATIVE_PATH s "${_base}" "${s}") + endif (_is_rel) + list (APPEND _list "${s}") + endforeach () + set_property (GLOBAL APPEND PROPERTY "COLLECT_${name}_LIST" "${_list}") +endfunction (collect) + +# Create global collectors +collector_create (PROJECT_INC_DIRS "") +collector_create (PROJECT_LIB_DIRS "") +collector_create (PROJECT_LIB_DEPS "") +collector_create (PROJECT_HDR_TESTS "") + +# vim: expandtab:ts=2:sw=2:smartindent