cmake_minimum_required(VERSION 3.24) # Set the project name and version project(spirx VERSION 1.0) # Use debug or release libs if(CMAKE_BUILD_TYPE STREQUAL "Release") set(BUILD_PROFILE "release") else() set(BUILD_PROFILE "debug") endif() if(NOT DEFINED BOARD) set(BOARD "j721e_evm") endif() # Set the target processor if(NOT DEFINED TARGET_PROCESSOR) set(TARGET_PROCESSOR "r5f") # Modify this according to your target processor (R5F or A72, etc.) elseif(NOT "${TARGET_PROCESSOR}" STREQUAL "r5f") message(FATAL_ERROR "TARGET_PROCESSOR=${TARGET_PROCESSOR} is not supported for this project.") endif() # Set the target core # mcu1_0 mcu1_1 are no longer supported set(SUPPORTED_CORES mcu2_0 mcu2_1) if(NOT DEFINED TARGET_CORE) set(TARGET_CORE "mcu2_1") elseif(NOT "${TARGET_CORE}" IN_LIST SUPPORTED_CORES) message(FATAL_ERROR "TARGET_CORE=${TARGET_CORE} not in supported core list.") endif() # Append to additional build options if("${TARGET_CORE}" STREQUAL "mcu2_0") set(ADDITIONAL_BUILD_OPTS "${ADDITIONAL_BUILD_OPTS} -DBUILD_MCU2_0 -DBUILD_MCU") elseif("${TARGET_CORE}" STREQUAL "mcu2_1") set(ADDITIONAL_BUILD_OPTS "${ADDITIONAL_BUILD_OPTS} -DBUILD_MCU2_1 -DBUILD_MCU") endif() # Specify the C compiler and flags set(CMAKE_C_COMPILER "$ENV{TI_TOOLCHAIN_PATH}/bin/tiarmclang") set(CMAKE_CXX_COMPILER "$ENV{TI_TOOLCHAIN_PATH}/bin/tiarmclang") set(CMAKE_LINKER "$ENV{TI_TOOLCHAIN_PATH}/bin/tiarmclang") set(LIBC_AR "$ENV{TI_TOOLCHAIN_PATH}/lib/libc.a") # Specify the C flags (e.g., optimization, architecture) set(CMAKE_C_FLAGS "-g -DMAKEFILE_BUILD -fno-strict-aliasing -EL -mfloat-abi=hard -mfpu=vfpv3-d16 -mcpu=cortex-r5 -mthumb -march=thumbv7r -DFREERTOS -DSOC_J721E -Dj721e_evm=j721e_evm ${ADDITIONAL_BUILD_OPTS}") set(CMAKE_CXX_FLAGS "-DMAKEFILE_BUILD -fno-strict-aliasing -EL -mfloat-abi=hard -mfpu=vfpv3-d16 -mcpu=cortex-r5 -mthumb -march=thumbv7r -DFREERTOS -DSOC_J721E -Dj721e_evm=j721e_evm ${ADDITIONAL_BUILD_OPTS}") # Set PDK_SOURCE_DIR if(NOT DEFINED PDK_SOURCE_DIR) set(PDK_SOURCE_DIR "$ENV{TI_SDK_PATH}/pdk_jacinto_10_01_00_25") endif() set(SPI_LIB "${CMAKE_SOURCE_DIR}/lib/${BUILD_PROFILE}/wx.spi.aer5f") # Add the include directories for Processor SDK and PDK include_directories( ${PDK_SOURCE_DIR}/packages ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/board/src/ ${CMAKE_SOURCE_DIR}/board/src/j721e_evm/include ${CMAKE_CURRENT_SOURCE_DIR}/src/ ${PDK_SOURCE_DIR}/packages/ti/csl/ ${PDK_SOURCE_DIR}/packages/ti/csl/arch/r5/ ${PDK_SOURCE_DIR}/packages/ti/csl/arch/r5/src/startup/ ${PDK_SOURCE_DIR}/packages/ti/kernel/freertos/config/j721e/r5f/ ) if("${TARGET_CORE}" STREQUAL "mcu2_0" OR "${TARGET_CORE}" STREQUAL "mcu2_1") set(ADDITIONAL_LIBS "${PDK_SOURCE_DIR}/packages/ti/build/j721e/linker_r5_freertos.lds" ) else() message(FATAL_ERROR "Core not yet supported.") endif() # Add the source files set(SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/main.c ) # Add the source to the executable add_executable(${PROJECT_NAME} ${SOURCES}) set(GROUPED_LIBS "${PDK_SOURCE_DIR}/packages/ti/csl/lib/j721e/${TARGET_PROCESSOR}/${BUILD_PROFILE}/ti.csl.aer5f" "${PDK_SOURCE_DIR}/packages/ti/drv/uart/lib/j721e/${TARGET_PROCESSOR}/${BUILD_PROFILE}/ti.drv.uart.aer5f" "${PDK_SOURCE_DIR}/packages/ti/drv/i2c/lib/j721e/${TARGET_PROCESSOR}/${BUILD_PROFILE}/ti.drv.i2c.aer5f" "${PDK_SOURCE_DIR}/packages/ti/drv/udma/lib/j721e/${TARGET_CORE}/${BUILD_PROFILE}/udma.aer5f" "${PDK_SOURCE_DIR}/packages/ti/drv/gpio/lib/j721e/${TARGET_PROCESSOR}/${BUILD_PROFILE}/ti.drv.gpio.aer5f" "${PDK_SOURCE_DIR}/packages/ti/drv/pmic/lib/j721e_evm/${TARGET_PROCESSOR}/${BUILD_PROFILE}/pmic.aer5f" "${PDK_SOURCE_DIR}/packages/ti/drv/pm/lib/j721e/${TARGET_PROCESSOR}/${BUILD_PROFILE}/pm_lib.aer5f" "${PDK_SOURCE_DIR}/packages/ti/board/lib/j721e_evm/${TARGET_PROCESSOR}/${BUILD_PROFILE}/ti.board.aer5f" # "${CMAKE_SOURCE_DIR}/../../lib/${BUILD_PROFILE}/j721e_board.aer5f" "${PDK_SOURCE_DIR}/packages/ti/drv/sciclient/lib/j721e/${TARGET_CORE}/${BUILD_PROFILE}/sciclient.aer5f" "${PDK_SOURCE_DIR}/packages/ti/osal/lib/freertos/j721e/${TARGET_PROCESSOR}/${BUILD_PROFILE}/ti.osal.aer5f" "${PDK_SOURCE_DIR}/packages/ti/kernel/lib/j721e/${TARGET_CORE}/${BUILD_PROFILE}/ti.kernel.freertos.aer5f" "${PDK_SOURCE_DIR}/packages/ti/csl/lib/j721e/${TARGET_PROCESSOR}/${BUILD_PROFILE}/ti.csl.init.aer5f" "${PDK_SOURCE_DIR}/packages/ti/drv/spi/lib/j721e/r5f/${BUILD_PROFILE}/ti.drv.spi.aer5f" # "${CMAKE_SOURCE_DIR}/../../lib/${BUILD_PROFILE}/wx.spi.aer5f" "${LIBC_AR}" ) # Link the necessary libraries (adjust paths to your SDK) target_link_libraries(${PROJECT_NAME} "${ADDITIONAL_LIBS}" $ ) # Define the required linker flags (for linking in startup files, etc.) target_link_options(${PROJECT_NAME} PRIVATE -Werror -Wl,-q -Wl,-u,_c_int00 -Wl,--display_error_number -Wl,--use_memcpy=fast -Wl,--use_memset=fast -Wl,--diag_suppress=10063-D -Wl,--diag_suppress=10068-D -Wl,--diag_suppress=10083-D -Wl,-c -mcpu=cortex-r5 -march=armv7-r -Wl,--diag_suppress=10230-D -Wl,-x -Wl,--zero_init=on ) # Set the output directory set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin) # Set the post-build commands (e.g., copy binaries to specific folder) add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${EXECUTABLE_OUTPUT_PATH}/${PROJECT_NAME} ${CMAKE_SOURCE_DIR}/bin/${BUILD_PROFILE}/${PROJECT_NAME}_${TARGET_PROCESSOR}_${TARGET_CORE}.xer5f )