diff options
Diffstat (limited to 'utils/cmake/buildtools')
-rw-r--r-- | utils/cmake/buildtools/codal.cmake | 85 | ||||
-rw-r--r-- | utils/cmake/buildtools/yotta.cmake | 23 |
2 files changed, 108 insertions, 0 deletions
diff --git a/utils/cmake/buildtools/codal.cmake b/utils/cmake/buildtools/codal.cmake new file mode 100644 index 0000000..ea8b23c --- /dev/null +++ b/utils/cmake/buildtools/codal.cmake @@ -0,0 +1,85 @@ +add_executable( + ${device.device} + ${SOURCE_FILES} +) + +if("${INCLUDE_DIRS}" STRGREATER "") + target_include_directories(${device.device} PUBLIC "${INCLUDE_DIRS}") +endif() + +set_target_properties(${device.device} PROPERTIES SUFFIX "" ENABLE_EXPORTS ON) + +# link the executable with supporting libraries. +target_link_libraries( + ${device.device} + ${CODAL_DEPS} +) + +# import toolchain bin generation command +if(${device.generate_bin}) + include(${TOOLCHAIN_FOLDER}/bin-generator.cmake) +endif() + +# import toolchain hex generation command +if(${device.generate_hex}) + include(${TOOLCHAIN_FOLDER}/hex-generator.cmake) +endif() + +# post process command hook, depends on the hex file generated by the build system. +if("${device.post_process.command}" STRGREATER "" OR "${device.post_process}" STRGREATER "") + + if("${device.post_process}" STRGREATER "") + set(POST_PROCESS_COMMAND ${device.post_process}) + else() + set(POST_PROCESS_COMMAND ${device.post_process.command}) + endif() + + set(POST_PROCESS_DEPENDS "${device.post_process.depends}") + + # replace specific strings in the command, this gives users flexibility, they don't have to manually specify the location of files + string(REPLACE "<OUTPUT_HEX_LOCATION>" ${PROJECT_SOURCE_DIR}/${CODAL_APP_OUTPUT_DIR}/${device.device}.hex CODAL_POSTPROCESS_COMMAND ${POST_PROCESS_COMMAND}) + string(REPLACE "<OUTPUT_HEX_DESTINATION>" ${PROJECT_SOURCE_DIR}/${CODAL_APP_OUTPUT_DIR} CODAL_POSTPROCESS_COMMAND ${CODAL_POSTPROCESS_COMMAND}) + string(REPLACE "<OUTPUT_HEX_NAME>" ${device.device} CODAL_POSTPROCESS_COMMAND ${CODAL_POSTPROCESS_COMMAND}) + + string(REPLACE "<OUTPUT_BIN_LOCATION>" ${PROJECT_SOURCE_DIR}/${CODAL_APP_OUTPUT_DIR}/${device.device}.bin CODAL_POSTPROCESS_COMMAND ${CODAL_POSTPROCESS_COMMAND}) + string(REPLACE "<OUTPUT_BIN_DESTINATION>" ${PROJECT_SOURCE_DIR}/${CODAL_APP_OUTPUT_DIR} CODAL_POSTPROCESS_COMMAND ${CODAL_POSTPROCESS_COMMAND}) + string(REPLACE "<OUTPUT_BIN_NAME>" ${device.device}.bin CODAL_POSTPROCESS_COMMAND ${CODAL_POSTPROCESS_COMMAND}) + + string(REPLACE "<OUTPUT_ELF_LOCATION>" ${PROJECT_SOURCE_DIR}/build/${device.device} CODAL_POSTPROCESS_COMMAND ${CODAL_POSTPROCESS_COMMAND}) + string(REPLACE "<OUTPUT_ELF_DESTINATION>" ${PROJECT_SOURCE_DIR}/${CODAL_APP_OUTPUT_DIR} CODAL_POSTPROCESS_COMMAND ${CODAL_POSTPROCESS_COMMAND}) + string(REPLACE "<OUTPUT_ELF_NAME>" ${device.device} CODAL_POSTPROCESS_COMMAND ${CODAL_POSTPROCESS_COMMAND}) + + string(REPLACE "<CODAL_APP_OUTPUT_DIR>" ${PROJECT_SOURCE_DIR}/${CODAL_APP_OUTPUT_DIR} CODAL_POSTPROCESS_COMMAND ${CODAL_POSTPROCESS_COMMAND}) + + #convert to a command + separate_arguments(FINAL_COMMAND UNIX_COMMAND ${CODAL_POSTPROCESS_COMMAND}) + + # execute + if(POST_PROCESS_DEPENDS STREQUAL "ELF") + add_custom_command( + TARGET ${device.device} + COMMAND ${FINAL_COMMAND} + DEPENDS ${device.device} + WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" + COMMENT "Executing post process command" + ) + elseif(POST_PROCESS_DEPENDS STREQUAL "HEX") + add_custom_command( + TARGET ${device.device}_hex + COMMAND ${FINAL_COMMAND} + DEPENDS ${device.device} + WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" + COMMENT "Executing post process command" + ) + else() + #by default post process should depend on hex + add_custom_command( + TARGET ${device.device}_bin + COMMAND ${FINAL_COMMAND} + DEPENDS ${device.device} + WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" + COMMENT "Executing post process command" + ) + endif() + +endif()
\ No newline at end of file diff --git a/utils/cmake/buildtools/yotta.cmake b/utils/cmake/buildtools/yotta.cmake new file mode 100644 index 0000000..8002006 --- /dev/null +++ b/utils/cmake/buildtools/yotta.cmake @@ -0,0 +1,23 @@ +if("${INCLUDE_DIRS}" STRGREATER "") + target_include_directories(codal PUBLIC "${INCLUDE_DIRS}") +endif() + +add_library(codal "${SOURCE_FILES}") +set_target_properties(codal PROPERTIES SUFFIX "" ENABLE_EXPORTS ON) + +target_compile_definitions(codal PUBLIC "${device.definitions}") +target_include_directories(codal PUBLIC ${PLATFORM_INCLUDES_PATH}) +target_compile_options(codal PUBLIC -include ${EXTRA_INCLUDES_PATH}) + +set(STRIPPED "") +string(STRIP "${CMAKE_LINKER_FLAGS}" STRIPPED) +# link the executable with supporting libraries. +target_link_libraries(codal "${CODAL_DEPS};${STRIPPED}") + +# +# Supress the addition of implicit linker flags (such as -rdynamic) +# +set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "") +set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "") +set(CMAKE_EXE_EXPORTS_C_FLAG "") +set(CMAKE_EXE_EXPORTS_CXX_FLAG "")
\ No newline at end of file |