|
|
@@ -1,6 +1,9 @@
|
|
|
set(IMC_BENCH_NAME "vAes" CACHE STRING "")
|
|
|
set(IMC_BENCH_INFINITE_LOOP 0 CACHE BOOL "")
|
|
|
set(IMC_PRINT_RECOVERY_MESSAGE 0 CACHE BOOL "")
|
|
|
+set(IMC_ENABLE_STATIC_LOOP_PASS_COUNT 1 CACHE BOOL "")
|
|
|
+set(IMC_LOOP_PASS_COUNT 10 CACHE BOOL "")
|
|
|
+set(IMC_BENCH_REPEAT_COUNT 1 CACHE BOOL "")
|
|
|
|
|
|
set(AVAILABLE_BENCHES "vBasicMath" "vStringSearch" "vFFT" "vSha" "vCrc" "vMatMul" "vConv2d" "adc_demo" "vAes")
|
|
|
if(NOT IMC_BENCH_NAME IN_LIST AVAILABLE_BENCHES)
|
|
|
@@ -8,6 +11,7 @@ if(NOT IMC_BENCH_NAME IN_LIST AVAILABLE_BENCHES)
|
|
|
endif()
|
|
|
|
|
|
add_compile_definitions(imcBENCH_NAME=${IMC_BENCH_NAME})
|
|
|
+add_compile_definitions(imcBENCH_REPEAT_COUNT=${IMC_BENCH_REPEAT_COUNT})
|
|
|
if(IMC_BENCH_INFINITE_LOOP)
|
|
|
add_compile_definitions(imcBENCH_INFINITE_LOOP=1)
|
|
|
endif()
|
|
|
@@ -15,6 +19,10 @@ if(IMC_PRINT_RECOVERY_MESSAGE)
|
|
|
add_compile_definitions(imcPRINT_RECOVERY_MESSAGE=1)
|
|
|
endif()
|
|
|
|
|
|
+list(APPEND SRC_FILES
|
|
|
+ Core/Src/ImC/imc_extension.c
|
|
|
+)
|
|
|
+
|
|
|
if(IMC_BENCH_NAME MATCHES "vConv2d")
|
|
|
set(BENCHMARK_SRC_FILES
|
|
|
)
|
|
|
@@ -131,10 +139,8 @@ foreach(BENCH_SRC ${BENCHMARK_SRC_FILES})
|
|
|
list(APPEND SRC_FILES ${BENCH_SRC})
|
|
|
endforeach()
|
|
|
|
|
|
-function(split_loop imc_files)
|
|
|
- list(APPEND IMC_APP_FILES
|
|
|
- Core/Src/ImC/imc_extension.c
|
|
|
- )
|
|
|
+function(compile_imc_files)
|
|
|
+ message("compile_imc_files called")
|
|
|
get_target_property(SRC_INCLUDES imc_freeRTOS INCLUDE_DIRECTORIES)
|
|
|
foreach(dir ${SRC_INCLUDES})
|
|
|
list(APPEND INCLUDE_DIRS "-I${dir}")
|
|
|
@@ -142,23 +148,41 @@ function(split_loop imc_files)
|
|
|
string(REPLACE " " ";" C_FLAGS ${CMAKE_C_FLAGS})
|
|
|
|
|
|
set(BASIC_OPT_PASSES "mem2reg,indvars,instnamer,unify-loop-exits,lcssa,simplifycfg,loop-simplify")
|
|
|
- set(IMC_OPT_PASSES "imc-loop-opt")
|
|
|
- set(IMC_FLAGS ${IMC_BASE})
|
|
|
- set(LOOP_SPLIT_PLUGIN /home/ybkim/workspace/imc/loop_duplication/build/lib/libImcLoopOpt.so)
|
|
|
+ set(IMC_OPT_PASSES "")
|
|
|
+ set(PLUGINS "")
|
|
|
+
|
|
|
+ if(IMC_SPLIT_LOOP)
|
|
|
+ list(APPEND IMC_OPT_PASSES "imc-loop-opt")
|
|
|
+ list(APPEND PLUGINS /home/ybkim/workspace/imc/loop_duplication/build/lib/libImcLoopOpt.so)
|
|
|
+ add_compile_definitions(imcENABLE_STATIC_LOOP_PASS_COUNT=${IMC_ENABLE_STATIC_LOOP_PASS_COUNT})
|
|
|
+ add_compile_definitions(imcLOOP_PASS_COUNT=${IMC_LOOP_PASS_COUNT})
|
|
|
+ endif()
|
|
|
+
|
|
|
+ if(IMC_INSERT_COMPILER_CHECKPOINTS)
|
|
|
+ list(APPEND IMC_OPT_PASSES "imc-insert-checkpoints")
|
|
|
+ list(APPEND PLUGINS /home/ybkim/workspace/imc/loop_duplication/build/lib/libImcInsertCheckpoints.so)
|
|
|
+ endif()
|
|
|
+
|
|
|
+ list(JOIN IMC_OPT_PASSES "," IMC_OPT_PASSES)
|
|
|
+ set(PLUGIN_OPTIONS "")
|
|
|
+ foreach(PLUGIN ${PLUGINS})
|
|
|
+ list(APPEND PLUGIN_OPTIONS -load-pass-plugin=${PLUGIN})
|
|
|
+ endforeach()
|
|
|
|
|
|
- # set(TARGET_TRIPPLE "--target=armv7em-none-eabi --sysroot=${CMAKE_SYSROOT}")
|
|
|
+ set(ADDITIONAL_DEFS
|
|
|
+ "-D imcBENCH_REPEAT_COUNT=${IMC_BENCH_REPEAT_COUNT}"
|
|
|
+ )
|
|
|
|
|
|
foreach(APP_SRC ${IMC_APP_FILES})
|
|
|
add_custom_command(
|
|
|
OUTPUT ${PROJECT_BINARY_DIR}/${APP_SRC}.s
|
|
|
DEPENDS ${APP_SRC}
|
|
|
- # COMMAND ${CLANG_BIN} --target=armv8m-none-eabi --sysroot=${CMAKE_SYSROOT} -g ${C_FLAGS} -O0 -Xclang -disable-O0-optnone ${INCLUDE_DIRS} -D USE_HAL_DRIVER -D STM32L552xx -c -emit-llvm ${PROJECT_SOURCE_DIR}/${APP_SRC} -o ${PROJECT_BINARY_DIR}/${APP_SRC}.bc
|
|
|
- COMMAND ${CMAKE_C_COMPILER} -g ${C_FLAGS} -O0 -Xclang -disable-O0-optnone ${INCLUDE_DIRS} -D USE_HAL_DRIVER -D STM32L552xx -c -emit-llvm ${PROJECT_SOURCE_DIR}/${APP_SRC} -o ${PROJECT_BINARY_DIR}/${APP_SRC}.bc
|
|
|
- COMMAND ${OPT_BIN} -o ${PROJECT_BINARY_DIR}/${APP_SRC}_imc.bc -load-pass-plugin=${LOOP_SPLIT_PLUGIN} -passes=${BASIC_OPT_PASSES},${IMC_OPT_PASSES} ${PROJECT_BINARY_DIR}/${APP_SRC}.bc
|
|
|
+ COMMAND ${CMAKE_C_COMPILER} -g ${C_FLAGS} -O0 -Xclang -disable-O0-optnone ${INCLUDE_DIRS} -D USE_HAL_DRIVER -D STM32L552xx ${ADDITIONAL_DEFS} -c -emit-llvm ${PROJECT_SOURCE_DIR}/${APP_SRC} -o ${PROJECT_BINARY_DIR}/${APP_SRC}.bc
|
|
|
+ COMMAND ${OPT_BIN} -o ${PROJECT_BINARY_DIR}/${APP_SRC}_imc.bc ${PLUGIN_OPTIONS} -passes=${BASIC_OPT_PASSES},${IMC_OPT_PASSES} ${PROJECT_BINARY_DIR}/${APP_SRC}.bc
|
|
|
COMMAND ${OPT_BIN} ${OPT} -o ${PROJECT_BINARY_DIR}/${APP_SRC}.opt.bc ${PROJECT_BINARY_DIR}/${APP_SRC}_imc.bc
|
|
|
- COMMAND ${LLC_BIN} ${IMC_FLAGS} ${CPU} ${OPT} -o ${PROJECT_BINARY_DIR}/${APP_SRC}.s ${PROJECT_BINARY_DIR}/${APP_SRC}.opt.bc
|
|
|
+ COMMAND ${LLC_BIN} ${CPU} ${OPT} -o ${PROJECT_BINARY_DIR}/${APP_SRC}.s ${PROJECT_BINARY_DIR}/${APP_SRC}.opt.bc
|
|
|
)
|
|
|
list(APPEND APP_OPTS ${PROJECT_BINARY_DIR}/${APP_SRC}.s)
|
|
|
endforeach()
|
|
|
- add_library(imc_apps "${APP_OPTS}")
|
|
|
+ add_library(imc_apps OBJECT "${APP_OPTS}")
|
|
|
endfunction()
|