diff --git a/benchmark_sources/MLPerfTiny/CMake/add_test.cmake b/benchmark_sources/MLPerfTiny/CMake/add_test.cmake index 945be90..6e13608 100644 --- a/benchmark_sources/MLPerfTiny/CMake/add_test.cmake +++ b/benchmark_sources/MLPerfTiny/CMake/add_test.cmake @@ -273,12 +273,25 @@ macro(add_benchmark_etiss TEST SOURCE_DIR) target_link_libraries(${TEST_NAME} PRIVATE tflm etiss_crt0 sim_etiss) - target_link_options(${TEST_NAME} PRIVATE - "-L${ETISS_CRT_LIB}" - "--specs=${ETISS_CRT_TOP}/etiss-semihost.specs" - "-T${ETISS_CRT_TOP}/etiss.ld" - "-nostartfiles" - ) + if(CMAKE_CXX_COMPILER_ID MATCHES "(C|c?)lang") + target_link_options(${TEST_NAME} PRIVATE + "-nostdlib" + "-lc" + "-lsemihost" + "-lgcc" + "-lstdc++" + "-L${ETISS_CRT_LIB}" + "-T${ETISS_CRT_TOP}/etiss.ld" + ) + else() + target_link_options(${TEST_NAME} PRIVATE + "-L${ETISS_CRT_LIB}" + "--specs=${ETISS_CRT_TOP}/etiss-semihost.specs" + "-T${ETISS_CRT_TOP}/etiss.ld" + "-nostartfiles" + ) + endif() + # put objdump in elf target add_custom_command(TARGET ${TEST_NAME} @@ -288,9 +301,10 @@ macro(add_benchmark_etiss TEST SOURCE_DIR) add_test(NAME ${TEST_NAME} COMMAND - ${TOOLCHAIN_TOP}/etiss_base/etiss_rvv/build/installed/bin/bare_etiss_processor + ${TOOLCHAIN_TOP}/etiss_base/etiss_rvv/build/installed/bin/bare_etiss_processor -i${FRAMEWORK_TOP}/etiss/etiss.ini --vp.elf_file=${BINARY_DIR}/${TEST_NAME}.elf + --arch.cpu=RV32IMACFDV_zvl${VREG_W}b WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) endmacro() diff --git a/benchmark_sources/MLPerfTiny/tflm/CMake/add_muriscv_nn_test.cmake b/benchmark_sources/MLPerfTiny/tflm/CMake/add_muriscv_nn_test.cmake index 5b15fd4..e3ca9aa 100644 --- a/benchmark_sources/MLPerfTiny/tflm/CMake/add_muriscv_nn_test.cmake +++ b/benchmark_sources/MLPerfTiny/tflm/CMake/add_muriscv_nn_test.cmake @@ -22,6 +22,16 @@ macro(add_muriscv_nn_test TEST) get_target_property(_target_flags unity COMPILE_OPTIONS) list(REMOVE_ITEM _target_flags "-Werror") set_target_properties(unity PROPERTIES COMPILE_OPTIONS "-Wno-error {_target_flags} -Wno-error") + if(CMAKE_CXX_COMPILER_ID MATCHES "(C|c?)lang") + target_link_options(unity PRIVATE + "-nostdlib" + "-lc" + "-lsemihost" + "-lgcc" + "-lstdc++" + "-T${ETISS_CRT_TOP}/etiss.ld" + ) + endif() add_executable(${TEST_NAME}) @@ -30,10 +40,6 @@ macro(add_muriscv_nn_test TEST) string(REPLACE "int main" "int muriscv_nn_main" FILE_CONTENT "${FILE_CONTENT}") file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/TestCases/${TEST}/${TEST}.c "${FILE_CONTENT}") - # copy include files - file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/muriscv-nn/Tests/TestData DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) - file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/muriscv-nn/Tests/Utils DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) - target_sources(${TEST_NAME} PUBLIC ${FRAMEWORK_TOP}/main.cpp ${CMAKE_CURRENT_BINARY_DIR}/TestCases/${TEST}/${TEST}.c @@ -55,13 +61,24 @@ macro(add_muriscv_nn_test TEST) add_dependencies(${TEST_NAME} etiss_crt0) target_link_libraries(${TEST_NAME} PRIVATE tflm etiss_crt0 sim_etiss) - - target_link_options(${TEST_NAME} PRIVATE - "-L${ETISS_CRT_LIB}" - "--specs=${ETISS_CRT_TOP}/etiss-semihost.specs" - "-T${ETISS_CRT_TOP}/etiss.ld" - "-nostartfiles" - ) + if(CMAKE_CXX_COMPILER_ID MATCHES "(C|c?)lang") + target_link_options(${TEST_NAME} PRIVATE + "-nostdlib" + "-lc" + "-lsemihost" + "-lgcc" + "-lstdc++" + "-L${ETISS_CRT_LIB}" + "-T${ETISS_CRT_TOP}/etiss.ld" + ) + else() + target_link_options(${TEST_NAME} PRIVATE + "-L${ETISS_CRT_LIB}" + "--specs=${ETISS_CRT_TOP}/etiss-semihost.specs" + "-T${ETISS_CRT_TOP}/etiss.ld" + "-nostartfiles" + ) + endif() # put objdump in elf target add_custom_command(TARGET ${TEST_NAME} @@ -75,5 +92,11 @@ macro(add_muriscv_nn_test TEST) ${TOOLCHAIN_TOP}/etiss_base/etiss_rvv/build/installed/bin/bare_etiss_processor -i${FRAMEWORK_TOP}/etiss/etiss.ini --vp.elf_file=${BINARY_DIR}/tflm/${TEST_NAME}.elf + --arch.cpu=RV32IMACFDV_zvl${VREG_W}b WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) +endmacro() + +macro(prepare_muriscv_nn_tests) + file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/muriscv-nn/Tests/TestData DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) + file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/muriscv-nn/Tests/Utils DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) endmacro() \ No newline at end of file diff --git a/benchmark_sources/MLPerfTiny/tflm/CMakeLists.txt b/benchmark_sources/MLPerfTiny/tflm/CMakeLists.txt index 8b841d7..9caa871 100644 --- a/benchmark_sources/MLPerfTiny/tflm/CMakeLists.txt +++ b/benchmark_sources/MLPerfTiny/tflm/CMakeLists.txt @@ -570,12 +570,24 @@ if(MURISCV_NN) ) add_subdirectory(muriscv-nn/Source muriscv-nn) + + # Pass vector extension flags to muriscv-nn target + if (DEFINED USE_VEXT AND USE_VEXT) + target_compile_definitions(muriscvnn PRIVATE USE_VEXT) + if (DEFINED USE_IME AND USE_IME) + target_compile_definitions(muriscvnn PRIVATE USE_IME) + endif() + elseif(DEFINED USE_PEXT AND USE_PEXT) + target_compile_definitions(muriscvnn PRIVATE USE_PEXT) + endif() if (DEFINED MURISCV_NN_TEST AND NOT MURISCV_NN_TEST STREQUAL "OFF") # add muriscv-nn testcases only if etiss is used as the backend simulator if (${ETISS_SIM}) include(${CMAKE_CURRENT_SOURCE_DIR}/CMake/add_muriscv_nn_test.cmake) + prepare_muriscv_nn_tests() add_muriscv_nn_test(test_muriscv_nn_fully_connected_s8) + add_muriscv_nn_test(test_muriscv_nn_fully_connected_s16) else() message(WARNING "muriscv-nn testcases are not added because ETISS is not used as the backend simulator") endif() diff --git a/benchmark_sources/framework/etiss/etiss.ini b/benchmark_sources/framework/etiss/etiss.ini index 27fa32a..12b415f 100644 --- a/benchmark_sources/framework/etiss/etiss.ini +++ b/benchmark_sources/framework/etiss/etiss.ini @@ -30,7 +30,7 @@ simple_mem_system.memseg_length_01=0x01000000 [StringConfigurations] jit.type=TCCJIT -arch.cpu=RV32IMACFDV_zvl128b +#specified in cmd line arguments arch.cpu=RV32IMACFDV_zvl512b [Plugin Logger] plugin.logger.logaddr=0x10000000 diff --git a/benchmark_sources/generic_cpp/CMake/add_test.cmake b/benchmark_sources/generic_cpp/CMake/add_test.cmake index 6d82ce3..af26a19 100644 --- a/benchmark_sources/generic_cpp/CMake/add_test.cmake +++ b/benchmark_sources/generic_cpp/CMake/add_test.cmake @@ -152,13 +152,24 @@ macro(add_benchmark_etiss TEST TEST_NUM) add_dependencies(${TEST_NAME} etiss_crt0) target_link_libraries(${TEST_NAME} PRIVATE etiss_crt0 sim_etiss) - - target_link_options(${TEST_NAME} PRIVATE - "-L${ETISS_CRT_LIB}" - "--specs=${ETISS_CRT_TOP}/etiss-semihost.specs" - "-T${ETISS_CRT_TOP}/etiss.ld" - "-nostartfiles" - ) + if(CMAKE_CXX_COMPILER_ID MATCHES "(C|c?)lang") + target_link_options(${TEST_NAME} PRIVATE + "-nostdlib" + "-lc" + "-lsemihost" + "-lgcc" + "-lstdc++" + "-L${ETISS_CRT_LIB}" + "-T${ETISS_CRT_TOP}/etiss.ld" + ) + else() + target_link_options(${TEST_NAME} PRIVATE + "-L${ETISS_CRT_LIB}" + "--specs=${ETISS_CRT_TOP}/etiss-semihost.specs" + "-T${ETISS_CRT_TOP}/etiss.ld" + "-nostartfiles" + ) + endif() # put objdump in elf target add_custom_command(TARGET ${TEST_NAME} @@ -171,5 +182,6 @@ macro(add_benchmark_etiss TEST TEST_NUM) ${TOOLCHAIN_TOP}/etiss_base/etiss_rvv/build/installed/bin/bare_etiss_processor -i${FRAMEWORK_TOP}/etiss/etiss.ini --vp.elf_file=${TEST_BUILD_DIR}/${TEST_NAME}.elf + --arch.cpu=RV32IMACFDV_zvl${VREG_W}b WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) endmacro() diff --git a/toolchain/llvm/llvm_toolchain.cmake b/toolchain/llvm/llvm_toolchain.cmake index 44597ed..ed3f40c 100644 --- a/toolchain/llvm/llvm_toolchain.cmake +++ b/toolchain/llvm/llvm_toolchain.cmake @@ -18,4 +18,4 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --gcc-toolchain=${RISCV_GCC_PREFIX} --sy set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} --target=riscv32 -march=${RISCV_ARCH_COMP_STRING}_zicsr -mabi=${RISCV_ABI} -mcmodel=${RISCV_CMODEL}") set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} --gcc-toolchain=${RISCV_GCC_PREFIX} --sysroot=${RISCV_GCC_PREFIX}/${RISCV_GCC_BASENAME}") -set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -march=${RISCV_ARCH_COMP_STRING}_zicsr -mabi=${RISCV_ABI} -fuse-ld=ld -mcmodel=${RISCV_CMODEL} --gcc-toolchain=${RISCV_GCC_PREFIX}") +set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -march=${RISCV_ARCH_COMP_STRING}_zicsr -mabi=${RISCV_ABI} -fuse-ld=lld -mcmodel=${RISCV_CMODEL} --gcc-toolchain=${RISCV_GCC_PREFIX}")