| # Copyright lowRISC contributors. |
| # Licensed under the Apache License, Version 2.0, see LICENSE for details. |
| # SPDX-License-Identifier: Apache-2.0 |
| |
| .DEFAULT_GOAL := all |
| |
| LOCK_SW_BUILD ?= flock --timeout 3600 ${sw_build_dir} --command |
| |
| all: build run |
| |
| ############################### |
| ## sim build and run targets ## |
| ############################### |
| build: compile_result |
| |
| prep_tool_srcs: |
| @echo "[make]: prep_tool_srcs" |
| mkdir -p ${tool_srcs_dir} |
| cp -Ru ${tool_srcs} ${tool_srcs_dir}/. |
| |
| pre_compile: |
| @echo "[make]: pre_compile" |
| mkdir -p ${build_dir} |
| |
| gen_sv_flist: pre_compile prep_tool_srcs |
| @echo "[make]: gen_sv_flist" |
| cd ${build_dir} && ${sv_flist_gen_cmd} ${sv_flist_gen_opts} |
| |
| compile: gen_sv_flist |
| @echo "[make]: compile" |
| cd ${sv_flist_gen_dir} && ${build_cmd} ${build_opts} |
| |
| post_compile: compile |
| @echo "[make]: post_compile" |
| |
| compile_result: post_compile |
| @echo "[make]: compile_result" |
| |
| run: run_result |
| |
| pre_run: |
| @echo "[make]: pre_run" |
| mkdir -p ${run_dir} |
| ifneq (${sw_test},) |
| mkdir -p ${sw_build_dir} |
| endif |
| |
| sw_build: pre_run |
| @echo "[make]: sw_build" |
| ifneq (${sw_test},) |
| # Initialize meson build system. |
| ${LOCK_SW_BUILD} "cd ${proj_root} && \ |
| BUILD_ROOT=${sw_build_dir} ${proj_root}/meson_init.sh" |
| # Compile boot rom code and generate the image. |
| ${LOCK_SW_BUILD} "ninja -C ${sw_build_dir}/build-out \ |
| sw/device/boot_rom/boot_rom_export_${sw_build_device}" |
| # Extract the boot rom logs. |
| ${proj_root}/util/device_sw_utils/extract_sw_logs.py \ |
| -e "${sw_build_dir}/build-out/sw/device/boot_rom/boot_rom_${sw_build_device}.elf" \ |
| -f .logs.fields -r .rodata .chip_info \ |
| -n "rom" -o "${run_dir}" |
| # Copy over the boot rom image to the run_dir. |
| cp ${sw_build_dir}/build-out/sw/device/boot_rom/boot_rom_${sw_build_device}.32.vmem \ |
| ${run_dir}/rom.32.vmem |
| |
| ifeq (${sw_test_is_prebuilt},1) |
| # Copy over the sw test image and related sources to the run_dir. |
| cp ${proj_root}/${sw_test}.64.vmem ${run_dir}/sw.64.vmem |
| # Optionally, assume that ${sw_test}_logs.txt exists and copy over to the run_dir. |
| # Ignore copy error if it actually doesn't exist. Likewise for ${sw_test}_rodata.txt. |
| -cp ${proj_root}/${sw_test}_logs.txt ${run_dir}/sw_logs.txt |
| -cp ${proj_root}/${sw_test}_rodata.txt ${run_dir}/sw_rodata.txt |
| |
| else |
| # Compile the sw test code and generate the image. |
| ${LOCK_SW_BUILD} "ninja -C ${sw_build_dir}/build-out \ |
| ${sw_test}_export_${sw_build_device}" |
| # Extract the sw test logs. |
| ${proj_root}/util/device_sw_utils/extract_sw_logs.py \ |
| -e "${sw_build_dir}/build-out/${sw_test}_${sw_build_device}.elf" \ |
| -f .logs.fields -r .rodata \ |
| -n "sw" -o "${run_dir}" |
| # Copy over the sw test image to the run_dir. |
| cp ${sw_build_dir}/build-out/${sw_test}_${sw_build_device}.64.vmem \ |
| ${run_dir}/sw.64.vmem |
| endif |
| |
| endif |
| |
| |
| simulate: sw_build |
| @echo "[make]: simulate" |
| cd ${run_dir} && ${run_cmd} ${run_opts} |
| |
| post_run: simulate |
| @echo "[make]: post_run" |
| |
| run_result: post_run |
| @echo "[make]: run_result" |
| |
| ####################### |
| ## Load waves target ## |
| ####################### |
| debug_waves: |
| ${debug_waves_cmd} ${debug_waves_opts} |
| |
| ############################ |
| ## coverage rated targets ## |
| ############################ |
| # Merge coverage if there are multiple builds. |
| cov_merge: |
| @echo "[make]: cov_merge" |
| ${cov_merge_cmd} ${cov_merge_opts} |
| |
| # Open coverage tool to review and create report or exclusion file. |
| cov_analyze: prep_tool_srcs |
| @echo "[make]: cov_analyze" |
| ${cov_analyze_cmd} ${cov_analyze_opts} |
| |
| # Generate coverage reports. |
| cov_report: |
| @echo "[make]: cov_report" |
| ${cov_report_cmd} ${cov_report_opts} |
| |
| .PHONY: build \ |
| run \ |
| reg \ |
| pre_compile \ |
| compile \ |
| post_compile \ |
| compile_result \ |
| pre_run \ |
| simulate \ |
| post_run \ |
| run_result |