1function(set_library LIBRARY_TYPE LANGUAGE) 2set(EXTRADEFINES " -fstack-usage ") 3 4if(${LIBRARY_TYPE} STREQUAL "REDLIB") 5 set(SPECS "-specs=redlib.specs" PARENT_SCOPE) 6 set(EXTRADEFINES "${EXTRADEFINES} -D__REDLIB__") 7 set(TARGET_LINK_SYSTEM_LIBRARIES "-lcr_c -lcr_eabihelpers -lgcc" PARENT_SCOPE) 8elseif(${LIBRARY_TYPE} STREQUAL "NEWLIB") 9 set(EXTRADEFINES "${EXTRADEFINES} -D__NEWLIB__") 10 if(${LANGUAGE} STREQUAL "CPP") 11 set(TARGET_LINK_SYSTEM_LIBRARIES "-lstdc++ crti.o crtn.o crtbegin.o crtend.o" PARENT_SCOPE) 12 else() 13 set(TARGET_LINK_SYSTEM_LIBRARIES "-lgcc -lc -lm" PARENT_SCOPE) 14 endif() 15elseif(${LIBRARY_TYPE} STREQUAL "NEWLIB_NANO") 16 set(SPECS "--specs=nano.specs" PARENT_SCOPE) 17 set(EXTRADEFINES "${EXTRADEFINES} -D__NEWLIB__") 18 if(${LANGUAGE} STREQUAL "CPP") 19 set(TARGET_LINK_SYSTEM_LIBRARIES "-lstdc++_nano crti.o crtn.o crtbegin.o crtend.o" PARENT_SCOPE) 20 else() 21 set(TARGET_LINK_SYSTEM_LIBRARIES "-lgcc -lc_nano -lm" PARENT_SCOPE) 22 endif() 23endif() 24 25set(CMAKE_ASM_FLAGS " ${CMAKE_ASM_FLAGS} ${EXTRADEFINES}" PARENT_SCOPE) 26set(CMAKE_C_FLAGS " ${CMAKE_C_FLAGS} ${EXTRADEFINES}" PARENT_SCOPE) 27set(CMAKE_CXX_FLAGS " ${CMAKE_CXX_FLAGS} ${EXTRADEFINES}" PARENT_SCOPE) 28endfunction() 29 30function(set_floating_point FPU_TYPE FPU_ABI) 31if(${FPU_TYPE} MATCHES "FPV4-SP-D16") 32 set(FPU "-mfpu=fpv4-sp-d16") 33elseif(${FPU_TYPE} MATCHES "FPV5-D16") 34 set(FPU "-mfpu=fpv5-d16") 35elseif(${FPU_TYPE} MATCHES "FPV5-SP-D16") 36 set(FPU "-mfpu=fpv5-sp-d16") 37endif() 38if(${FPU_ABI} MATCHES "HARD") 39 set(FPU "${FPU} -mfloat-abi=hard" PARENT_SCOPE) 40elseif(${FPU_ABI} MATCHES "SOFT") 41 set(FPU "${FPU} -mfloat-abi=softfp" PARENT_SCOPE) 42else() 43 set(FPU "${FPU}" PARENT_SCOPE) 44endif() 45endfunction() 46 47function(set_debug_console DEBUG_CONSOLE LIBRARY_TYPE) 48if(${DEBUG_CONSOLE} MATCHES "SEMIHOST") 49 set(DEBUG_CONSOLE_CONFIG "-DSDK_DEBUGCONSOLE=0 -DSDK_USE_SYSCALL_STUB=0" PARENT_SCOPE) 50else() 51 set(DEBUG_CONSOLE_CONFIG "-DSDK_DEBUGCONSOLE=1" PARENT_SCOPE) 52endif() 53 54if(${LIBRARY_TYPE} STREQUAL "NEWLIB" OR ${LIBRARY_TYPE} STREQUAL "NEWLIB_NANO") 55 if(${DEBUG_CONSOLE} STREQUAL "SEMIHOST") 56 set(TARGET_LINK_SYSTEM_LIBRARIES "${TARGET_LINK_SYSTEM_LIBRARIES} -lcr_newlib_semihost" PARENT_SCOPE) 57 elseif(${DEBUG_CONSOLE} STREQUAL "UART" OR ${DEBUG_CONSOLE} STREQUAL "NOHOST") 58 set(TARGET_LINK_SYSTEM_LIBRARIES "${TARGET_LINK_SYSTEM_LIBRARIES} -lcr_newlib_nohost" PARENT_SCOPE) 59 elseif(${DEBUG_CONSOLE} STREQUAL "NONE") 60 set(TARGET_LINK_SYSTEM_LIBRARIES "${TARGET_LINK_SYSTEM_LIBRARIES} -lcr_newlib_none" PARENT_SCOPE) 61 endif() 62elseif(${LIBRARY_TYPE} STREQUAL "REDLIB") 63 if(${DEBUG_CONSOLE} STREQUAL "SEMIHOST") 64 set(TARGET_LINK_SYSTEM_LIBRARIES "${TARGET_LINK_SYSTEM_LIBRARIES} -lcr_semihost" PARENT_SCOPE) 65 elseif(${DEBUG_CONSOLE} STREQUAL "SEMIHOST_NF") 66 set(TARGET_LINK_SYSTEM_LIBRARIES "${TARGET_LINK_SYSTEM_LIBRARIES} -lcr_semihost_nf" PARENT_SCOPE) 67 elseif(${DEBUG_CONSOLE} STREQUAL "SEMIHOST_MB") 68 set(TARGET_LINK_SYSTEM_LIBRARIES "${TARGET_LINK_SYSTEM_LIBRARIES} -lcr_semihost_mb" PARENT_SCOPE) 69 elseif(${DEBUG_CONSOLE} STREQUAL "SEMIHOST_MB_NF") 70 set(TARGET_LINK_SYSTEM_LIBRARIES "${TARGET_LINK_SYSTEM_LIBRARIES} -lcr_semihost_mb_nf" PARENT_SCOPE) 71 elseif(${DEBUG_CONSOLE} STREQUAL "UART" OR ${DEBUG_CONSOLE} STREQUAL "NOHOST_NF" OR ${DEBUG_CONSOLE} STREQUAL "NOHOST") 72 set(TARGET_LINK_SYSTEM_LIBRARIES "${TARGET_LINK_SYSTEM_LIBRARIES} -lcr_nohost_nf" PARENT_SCOPE) 73 endif() 74endif() 75endfunction() 76 77function(include_if_use module) 78 set(MATCHED false) 79 if(${CONFIG_USE_${module}}) 80 set(MATCHED true) 81 endif() 82 # In case that module file name has device/board/kit suffix 83 if(NOT MATCHED) 84 string(REGEX REPLACE ".${CONFIG_DEVICE}$" "" replVar ${module}) 85 if(${CONFIG_USE_${replVar}}) 86 set(MATCHED true) 87 endif() 88 endif() 89 if(NOT MATCHED) 90 string(REGEX REPLACE ".${CONFIG_BOARD}$" "" replVar ${module}) 91 if(${CONFIG_USE_${replVar}}) 92 set(MATCHED true) 93 endif() 94 endif() 95 if(NOT MATCHED) 96 string(REGEX REPLACE ".${CONFIG_KIT}$" "" replVar ${module}) 97 if(${CONFIG_USE_${replVar}}) 98 set(MATCHED true) 99 endif() 100 endif() 101 102 if(MATCHED) 103 include(${module} OPTIONAL RESULT_VARIABLE loaded_file) 104 if(EXISTS ${loaded_file}) 105 return() 106 else() 107 message(SEND_ERROR "${module}.cmake does not exist.") 108 endif() 109 endif() 110endfunction() 111 112function(add_config_file CONFIG_FILE INCLUDE_PATH MODULE_NAME) 113 get_target_property(PROJECT_SOURCES ${MCUX_SDK_PROJECT_NAME} SOURCES) 114 get_filename_component(BASE_NAME ${CONFIG_FILE} NAME) 115 116 foreach(PROJ_FILE ${PROJECT_SOURCES}) 117 string(FIND "${PROJ_FILE}" "${BASE_NAME}" CONFIG_FILE_INDEX) 118 if(${CONFIG_FILE_INDEX} GREATER -1) 119 get_source_file_property(CONFIG_FILE_PROPERTY "${PROJ_FILE}" COMPONENT_CONFIG_FILE) 120 if(${CONFIG_FILE_PROPERTY} MATCHES "(^${MODULE_NAME}$)|(^${MODULE_NAME} )|( ${MODULE_NAME} )|( ${MODULE_NAME}$)") 121 message("Skip ${CONFIG_FILE} in ${MODULE_NAME} because user-defined file ${PROJ_FILE} has been added into project.") 122 return() 123 endif() 124 endif() 125 endforeach() 126 127 message("Use ${CONFIG_FILE} in ${MODULE_NAME}.") 128 target_sources(${MCUX_SDK_PROJECT_NAME} PRIVATE ${CONFIG_FILE}) 129 if(NOT ${INCLUDE_PATH} STREQUAL "") 130 target_include_directories(${MCUX_SDK_PROJECT_NAME} PUBLIC ${INCLUDE_PATH}) 131 endif() 132endfunction() 133