diff --git a/applications/sdp/gpio/CMakeLists.txt b/applications/sdp/gpio/CMakeLists.txt index 859f6b705548..c2d2f9fa9e80 100644 --- a/applications/sdp/gpio/CMakeLists.txt +++ b/applications/sdp/gpio/CMakeLists.txt @@ -9,15 +9,10 @@ cmake_minimum_required(VERSION 3.20.0) find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE}) project(sdp_gpio) -sdp_assembly_generate("${CMAKE_SOURCE_DIR}/src/hrt/hrt.c") -sdp_assembly_check("${CMAKE_SOURCE_DIR}/src/hrt/hrt.c") -sdp_assembly_prepare_install("${CMAKE_SOURCE_DIR}/src/hrt/hrt.c") +sdp_assembly_install(app "${CMAKE_SOURCE_DIR}/src/hrt/hrt.c") target_sources(app PRIVATE src/main.c) -target_sources(app PRIVATE src/hrt/hrt.s) target_sources_ifdef(CONFIG_SDP_GPIO_BACKEND_ICMSG app PRIVATE src/backend/backend_icmsg.c) target_sources_ifdef(CONFIG_SDP_GPIO_BACKEND_ICBMSG app PRIVATE src/backend/backend_icmsg.c) target_sources_ifdef(CONFIG_SDP_GPIO_BACKEND_MBOX app PRIVATE src/backend/backend_mbox.c) - -add_dependencies(app asm_check) diff --git a/applications/sdp/gpio/src/hrt/hrt.s b/applications/sdp/gpio/src/hrt/hrt-nrf54l15.s similarity index 100% rename from applications/sdp/gpio/src/hrt/hrt.s rename to applications/sdp/gpio/src/hrt/hrt-nrf54l15.s diff --git a/applications/sdp/mspi/CMakeLists.txt b/applications/sdp/mspi/CMakeLists.txt index 338d1d7ad562..f1429d00525e 100644 --- a/applications/sdp/mspi/CMakeLists.txt +++ b/applications/sdp/mspi/CMakeLists.txt @@ -9,11 +9,6 @@ cmake_minimum_required(VERSION 3.20.0) find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE}) project(sdp_mspi) -sdp_assembly_generate("${CMAKE_SOURCE_DIR}/src/hrt/hrt.c") -sdp_assembly_check("${CMAKE_SOURCE_DIR}/src/hrt/hrt.c") -sdp_assembly_prepare_install("${CMAKE_SOURCE_DIR}/src/hrt/hrt.c") +sdp_assembly_install(app "${CMAKE_SOURCE_DIR}/src/hrt/hrt.c") target_sources(app PRIVATE src/main.c) -target_sources(app PRIVATE src/hrt/hrt.s) - -add_dependencies(app asm_check) diff --git a/applications/sdp/mspi/src/hrt/hrt.s b/applications/sdp/mspi/src/hrt/hrt-nrf54l15.s similarity index 100% rename from applications/sdp/mspi/src/hrt/hrt.s rename to applications/sdp/mspi/src/hrt/hrt-nrf54l15.s diff --git a/cmake/sdp.cmake b/cmake/sdp.cmake index 619a18fb4b3d..d9d5c7619424 100644 --- a/cmake/sdp.cmake +++ b/cmake/sdp.cmake @@ -4,7 +4,35 @@ # SPDX-License-Identifier: LicenseRef-Nordic-5-Clause # -function(sdp_assembly_generate hrt_srcs) +# This function takes as an argument target to be built and path to .c source file(s) +# whose .s output must be verified against .s file tracked in repository. It then: +# - adds a pre-build dependency that generates .s files in build directory +# - adds a dependency on specified target to call sdp_asm_check.cmake with appropriate arguments +# - adds a custom target that calls sdp_asm_install.cmake with appropriate arguments +# - adds .s files from build directory to target sources +# +# Arguments: +# target - target to which the dependencies are to be applied +# hrt_srcs - path to the .c source file(s) to verify +function(sdp_assembly_install target hrt_srcs) + sdp_assembly_generate(${CONFIG_SOC} "${hrt_srcs}") + sdp_assembly_check(${CONFIG_SOC} "${hrt_srcs}") + sdp_assembly_prepare_install(${CONFIG_SOC} "${hrt_srcs}") + sdp_assembly_target_sources(${CONFIG_SOC} ${target} "${hrt_srcs}") + + add_dependencies(${target} asm_check) +endfunction() + +function(sdp_assembly_target_sources soc target hrt_srcs) + foreach(hrt_src ${hrt_srcs}) + get_filename_component(hrt_dir ${hrt_src} DIRECTORY) # directory + get_filename_component(hrt_src_file ${hrt_src} NAME_WE) # filename without extension + set(hrt_s_file "${hrt_dir}/${hrt_src_file}-${soc}.s") + target_sources(${target} PRIVATE ${hrt_s_file}) + endforeach() +endfunction() + +function(sdp_assembly_generate soc hrt_srcs) set(hrt_msg "Generating ASM files for Hard Real Time files.") set(hrt_opts -g0 -fno-ident -fno-verbose-asm) @@ -38,9 +66,9 @@ function(sdp_assembly_generate hrt_srcs) get_filename_component(src_filename ${hrt_src} NAME_WE) # filename without extension add_custom_command(TARGET asm_gen PRE_BUILD - BYPRODUCTS ${src_filename}-temp.s - COMMAND ${CMAKE_C_COMPILER} ${compiler_options} ${hrt_opts} -S ${hrt_src} -o ${src_filename}-temp.s - COMMAND ${PYTHON_EXECUTABLE} ${ZEPHYR_NRF_MODULE_DIR}/scripts/sdp/remove_comments.py ${src_filename}-temp.s + BYPRODUCTS ${src_filename}-${soc}-temp.s + COMMAND ${CMAKE_C_COMPILER} ${compiler_options} ${hrt_opts} -S ${hrt_src} -o ${src_filename}-${soc}-temp.s + COMMAND ${PYTHON_EXECUTABLE} ${ZEPHYR_NRF_MODULE_DIR}/scripts/sdp/remove_comments.py ${src_filename}-${soc}-temp.s COMMAND_EXPAND_LISTS COMMENT "Generating ASM file for ${hrt_src}" ) @@ -50,7 +78,7 @@ function(sdp_assembly_generate hrt_srcs) endfunction() -function(sdp_assembly_check hrt_srcs) +function(sdp_assembly_check soc hrt_srcs) set(asm_check_msg "Checking if ASM files for Hard Real Time have changed.") if(TARGET asm_check) @@ -62,7 +90,7 @@ function(sdp_assembly_check hrt_srcs) string(REPLACE ";" "$" hrt_srcs_semi "${hrt_srcs}") add_custom_target(asm_check - COMMAND ${CMAKE_COMMAND} -D hrt_srcs="${hrt_srcs_semi}" -P ${ZEPHYR_NRF_MODULE_DIR}/cmake/sdp_asm_check.cmake + COMMAND ${CMAKE_COMMAND} -D hrt_srcs="${hrt_srcs_semi}" -D soc="${soc}" -P ${ZEPHYR_NRF_MODULE_DIR}/cmake/sdp_asm_check.cmake COMMENT ${asm_check_msg} ) @@ -70,7 +98,7 @@ function(sdp_assembly_check hrt_srcs) endfunction() -function(sdp_assembly_prepare_install hrt_srcs) +function(sdp_assembly_prepare_install soc hrt_srcs) set(asm_install_msg "Updating ASM files for Hard Real Time.") if(TARGET asm_install) @@ -82,7 +110,7 @@ function(sdp_assembly_prepare_install hrt_srcs) string(REPLACE ";" "$" hrt_srcs_semi "${hrt_srcs}") add_custom_target(asm_install - COMMAND ${CMAKE_COMMAND} -D hrt_srcs="${hrt_srcs_semi}" -P ${ZEPHYR_NRF_MODULE_DIR}/cmake/sdp_asm_install.cmake + COMMAND ${CMAKE_COMMAND} -D hrt_srcs="${hrt_srcs_semi}" -D soc="${soc}" -P ${ZEPHYR_NRF_MODULE_DIR}/cmake/sdp_asm_install.cmake COMMENT ${asm_install_msg} ) diff --git a/cmake/sdp_asm_check.cmake b/cmake/sdp_asm_check.cmake index 8af14542546a..257f13e926b0 100644 --- a/cmake/sdp_asm_check.cmake +++ b/cmake/sdp_asm_check.cmake @@ -4,24 +4,32 @@ # SPDX-License-Identifier: LicenseRef-Nordic-5-Clause # +# Function checking if .s file generated during build is identical to one tracked in repository +# +# Arguments: +# hrt_srcs - path to the .c file(s) to verify +# soc - name of the SoC the code is being built for function(asm_check) + if(NOT DEFINED soc) + message(FATAL_ERROR "asm_check missing soc argument.") + endif() foreach(hrt_src ${hrt_srcs}) get_filename_component(asm_filename ${hrt_src} NAME_WE) # filename without extension get_filename_component(src_dir ${hrt_src} DIRECTORY) execute_process(COMMAND ${CMAKE_COMMAND} -E compare_files --ignore-eol - ${src_dir}/${asm_filename}.s ${asm_filename}-temp.s + ${src_dir}/${asm_filename}-${soc}.s ${asm_filename}-${soc}-temp.s RESULT_VARIABLE compare_result) if( compare_result EQUAL 0) - message("File ${asm_filename}.s has not changed.") + message("File ${asm_filename}-${soc}.s has not changed.") elseif( compare_result EQUAL 1) - message(WARNING "${asm_filename}.s ASM file content has changed.\ + message(WARNING "${asm_filename}-${soc}.s ASM file content has changed.\ If you want to include the new ASM in build, \ please run `ninja asm_install` in FLPR build directory and build again") else() - message("Something went wrong when comparing ${asm_filename}.s and ${asm_filename}-temp.s") + message("Something went wrong when comparing ${asm_filename}-${soc}.s and ${asm_filename}-${soc}-temp.s") endif() endforeach() diff --git a/cmake/sdp_asm_install.cmake b/cmake/sdp_asm_install.cmake index 42d823db4dab..c791a0217043 100644 --- a/cmake/sdp_asm_install.cmake +++ b/cmake/sdp_asm_install.cmake @@ -4,18 +4,26 @@ # SPDX-License-Identifier: LicenseRef-Nordic-5-Clause # +# Function that replaces .s file tracked in repository with updated version from build +# +# Arguments: +# hrt_srcs - path to the .c file(s) to verify +# soc - name of the SoC the code is being built for function(asm_install) + if(NOT DEFINED soc) + message(FATAL_ERROR "asm_install missing soc argument.") + endif() foreach(hrt_src ${hrt_srcs}) get_filename_component(asm_filename ${hrt_src} NAME_WE) # filename without extension get_filename_component(src_dir ${hrt_src} DIRECTORY) - file(RENAME ${asm_filename}-temp.s ${src_dir}/${asm_filename}.s RESULT rename_result) + file(RENAME ${asm_filename}-${soc}-temp.s ${src_dir}/${asm_filename}-${soc}.s RESULT rename_result) if (rename_result EQUAL 0) - message("Updated ${asm_filename}.s ASM file.") + message("Updated ${asm_filename}-${soc}.s ASM file.") else() - message(WARNING "${asm_filename}.s cannot be updated, new ASM does not exist. Please run ninja asm_gen to create one.") + message(WARNING "${asm_filename}-${soc}.s cannot be updated, new ASM does not exist. Please run ninja asm_gen to create one.") endif() endforeach() diff --git a/tests/drivers/sdp_asm/CMakeLists.txt b/tests/drivers/sdp_asm/CMakeLists.txt index 87aff6868bbc..3fac0ca9594c 100644 --- a/tests/drivers/sdp_asm/CMakeLists.txt +++ b/tests/drivers/sdp_asm/CMakeLists.txt @@ -7,15 +7,14 @@ cmake_minimum_required(VERSION 3.20.0) find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE}) -project(hello_world) +project(sdp_asm) -sdp_assembly_generate("${CMAKE_CURRENT_SOURCE_DIR}/src/add_1.c;${CMAKE_CURRENT_SOURCE_DIR}/src/add_10.c;${CMAKE_CURRENT_SOURCE_DIR}/src/add_100.c") -sdp_assembly_check("${CMAKE_CURRENT_SOURCE_DIR}/src/add_1.c;${CMAKE_CURRENT_SOURCE_DIR}/src/add_10.c;${CMAKE_CURRENT_SOURCE_DIR}/src/add_100.c") -sdp_assembly_prepare_install("${CMAKE_CURRENT_SOURCE_DIR}/src/add_1.c;${CMAKE_CURRENT_SOURCE_DIR}/src/add_10.c;${CMAKE_CURRENT_SOURCE_DIR}/src/add_100.c") +set(sdp_files + ${CMAKE_CURRENT_SOURCE_DIR}/src/add_1.c + ${CMAKE_CURRENT_SOURCE_DIR}/src/add_10.c + ${CMAKE_CURRENT_SOURCE_DIR}/src/add_100.c +) -target_sources(app PRIVATE src/main.c) -target_sources(app PRIVATE src/add_1.s) -target_sources(app PRIVATE src/add_10.s) -target_sources(app PRIVATE src/add_100.s) +sdp_assembly_install(app "${sdp_files}") -add_dependencies(app asm_check) +target_sources(app PRIVATE src/main.c) diff --git a/tests/drivers/sdp_asm/pytest/test_sdp_asm.py b/tests/drivers/sdp_asm/pytest/test_sdp_asm.py index 030d838dba96..8756e408152a 100644 --- a/tests/drivers/sdp_asm/pytest/test_sdp_asm.py +++ b/tests/drivers/sdp_asm/pytest/test_sdp_asm.py @@ -48,9 +48,9 @@ def test_sdp_asm(dut: DeviceAdapter): logger.info("# Confirm that build log contains warnings") with open(f"{build_log_file}", errors="ignore") as log_file: log_file_content = log_file.read() - assert "add_1.s ASM file content has changed" in log_file_content - assert "File add_10.s has not changed" in log_file_content - assert "add_100.s ASM file content has changed" in log_file_content + assert "add_1-nrf54l15.s ASM file content has changed" in log_file_content + assert "File add_10-nrf54l15.s has not changed" in log_file_content + assert "add_100-nrf54l15.s ASM file content has changed" in log_file_content for _ in range(2): logger.info("# Install newly compiled .S files") diff --git a/tests/drivers/sdp_asm/src/add_1.s b/tests/drivers/sdp_asm/src/add_1-nrf54l15.s similarity index 100% rename from tests/drivers/sdp_asm/src/add_1.s rename to tests/drivers/sdp_asm/src/add_1-nrf54l15.s diff --git a/tests/drivers/sdp_asm/src/add_10.s b/tests/drivers/sdp_asm/src/add_10-nrf54l15.s similarity index 100% rename from tests/drivers/sdp_asm/src/add_10.s rename to tests/drivers/sdp_asm/src/add_10-nrf54l15.s diff --git a/tests/drivers/sdp_asm/src/add_100.s b/tests/drivers/sdp_asm/src/add_100-nrf54l15.s similarity index 100% rename from tests/drivers/sdp_asm/src/add_100.s rename to tests/drivers/sdp_asm/src/add_100-nrf54l15.s