Added Findcommon.cmake and collect.cmake; common-config.cmake still missing

This commit is contained in:
paul nehlich 2024-05-22 10:47:42 +02:00
parent 563e6f64c9
commit d2d5e5b1ec
5 changed files with 268 additions and 7 deletions

View File

@ -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})
target_compile_options(${TARGET_NAME} PRIVATE ${WARNING_FLAGS})

219
Findcommon.cmake Normal file
View File

@ -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()

View File

@ -1,2 +1,5 @@
add_subdirectory(freeRTOS)
add_subdirectory(ps7_cortexa9_0)
add_subdirectory(ps7_cortexa9_0)

View File

@ -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)

36
collect.cmake Normal file
View File

@ -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