|
|
@@ -7,6 +7,8 @@ set(CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY")
|
|
|
# user configurations: use -D option to change these on command line
|
|
|
set(IMC_INSERT_COMPILER_CHECKPOINTS 1 CACHE BOOL "" FORCE)
|
|
|
set(IMC_ENABLE_EXTENSION 1 CACHE BOOL "" FORCE)
|
|
|
+set(IMC_USE_CHECKPOINT_PASS_COUNTER 1 CACHE BOOL "" FORCE)
|
|
|
+set(IMC_USE_CHECKPOINT_VOLTAGE_CHECK 0 CACHE BOOL "" FORCE)
|
|
|
|
|
|
# set(CMAKE_C_COMPILER arm-none-eabi-gcc) #tested with: clang, arm-none-eabi-gcc
|
|
|
set(CMAKE_C_COMPILER /home/ybkim/workspace/imc/llvm/llvm-17/build/bin/clang)
|
|
|
@@ -111,9 +113,26 @@ else()
|
|
|
add_compile_definitions(imcUSE_IMC_EXTENSION=0)
|
|
|
set(IMC_APP_FILES
|
|
|
Core/Src/benchmarks/conv2d/conv2d.c
|
|
|
+ Core/Src/benchmarks/adc_demo/adc_demo.c
|
|
|
)
|
|
|
endif()
|
|
|
|
|
|
+if(IMC_USE_CHECKPOINT_PASS_COUNTER)
|
|
|
+ if(IMC_USE_CHECKPOINT_VOLTAGE_CHECK)
|
|
|
+ message(FATAL_ERROR "IMC_USE_CHECKPOINT_PASS_COUNTER and IMC_USE_CHECKPOINT_VOLTAGE_CHECK cannot be turned on simultaneously")
|
|
|
+ endif()
|
|
|
+ add_compile_definitions(imcUSE_CHECKPOINT_PASS_COUNTER=1)
|
|
|
+ add_compile_definitions(imcUSE_CHECKPOINT_VOLTAGE_CHECK=0)
|
|
|
+endif()
|
|
|
+
|
|
|
+if(IMC_USE_CHECKPOINT_VOLTAGE_CHECK)
|
|
|
+ if(IMC_USE_CHECKPOINT_PASS_COUNTER)
|
|
|
+ message(FATAL_ERROR "IMC_USE_CHECKPOINT_PASS_COUNTER and IMC_USE_CHECKPOINT_VOLTAGE_CHECK cannot be turned on simultaneously")
|
|
|
+ endif()
|
|
|
+ add_compile_definitions(imcUSE_CHECKPOINT_PASS_COUNTER=0)
|
|
|
+ add_compile_definitions(imcUSE_CHECKPOINT_VOLTAGE_CHECK=1)
|
|
|
+endif()
|
|
|
+
|
|
|
# compile flags
|
|
|
|
|
|
add_compile_definitions(USE_HAL_DRIVER STM32L552xx)
|
|
|
@@ -151,40 +170,46 @@ set(CMAKE_EXE_LINKER_FLAGS "${LD_ADDITIONAL_FILES} -T ${LINKER_SCRIPT}")
|
|
|
project(imc_freeRTOS C ASM)
|
|
|
add_executable(imc_freeRTOS ${SRC_FILES})
|
|
|
|
|
|
-if(IMC_INSERT_COMPILER_CHECKPOINTS)
|
|
|
- if(NOT CMAKE_C_COMPILER MATCHES "clang")
|
|
|
- message(FATAL_ERROR "compiler must be clang 17 to enable compiler checkpoint insertion")
|
|
|
+if(IMC_APP_FILES)
|
|
|
+ if(IMC_INSERT_COMPILER_CHECKPOINTS)
|
|
|
+ if(NOT CMAKE_C_COMPILER MATCHES "clang")
|
|
|
+ message(FATAL_ERROR "compiler must be clang 17 to enable compiler checkpoint insertion")
|
|
|
+ endif()
|
|
|
+ add_compile_definitions(imcUSE_IMC_KERNEL=1)
|
|
|
+ get_target_property(SRC_INCLUDES imc_freeRTOS INCLUDE_DIRECTORIES)
|
|
|
+ foreach(dir ${SRC_INCLUDES})
|
|
|
+ list(APPEND INCLUDE_DIRS "-I${dir}")
|
|
|
+ endforeach()
|
|
|
+ string(REPLACE " " ";" C_FLAGS ${CMAKE_C_FLAGS})
|
|
|
+
|
|
|
+ set(BASIC_OPT_PASSES "loop-simplify,loop-rotate,mem2reg,instcombine,instsimplify,dce,simplifycfg")
|
|
|
+ set(IMC_OPT_PASSES "imc-insert-checkpoints")
|
|
|
+ set(IMC_FLAGS ${IMC_BASE})
|
|
|
+ set(TARGET_TRIPPLE "--target=armv7em-none-eabi --sysroot=${CMAKE_SYSROOT}")
|
|
|
+
|
|
|
+ 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=${LLVM_OPT_PLUGIN} -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
|
|
|
+ )
|
|
|
+ list(APPEND APP_OPTS ${PROJECT_BINARY_DIR}/${APP_SRC}.s)
|
|
|
+ endforeach()
|
|
|
+ add_library(imc_apps "${APP_OPTS}")
|
|
|
+ else()
|
|
|
+ add_library(imc_apps "${IMC_APP_FILES}")
|
|
|
endif()
|
|
|
- add_compile_definitions(imcUSE_IMC_KERNEL=1)
|
|
|
- get_target_property(SRC_INCLUDES imc_freeRTOS INCLUDE_DIRECTORIES)
|
|
|
- foreach(dir ${SRC_INCLUDES})
|
|
|
- list(APPEND INCLUDE_DIRS "-I${dir}")
|
|
|
- endforeach()
|
|
|
- string(REPLACE " " ";" C_FLAGS ${CMAKE_C_FLAGS})
|
|
|
-
|
|
|
- set(BASIC_OPT_PASSES "loop-simplify,loop-rotate,mem2reg,instcombine,instsimplify,dce,simplifycfg")
|
|
|
- set(IMC_OPT_PASSES "imc-insert-checkpoints")
|
|
|
- set(IMC_FLAGS ${IMC_BASE})
|
|
|
- set(TARGET_TRIPPLE "--target=armv7em-none-eabi --sysroot=${CMAKE_SYSROOT}")
|
|
|
-
|
|
|
- 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=${LLVM_OPT_PLUGIN} -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
|
|
|
- )
|
|
|
- list(APPEND APP_OPTS ${PROJECT_BINARY_DIR}/${APP_SRC}.s)
|
|
|
- endforeach()
|
|
|
- add_library(imc_apps "${APP_OPTS}")
|
|
|
-else()
|
|
|
- add_library(imc_apps "${IMC_APP_FILES}")
|
|
|
endif()
|
|
|
|
|
|
-target_link_libraries(imc_freeRTOS PRIVATE imc_apps c m nosys gcc)
|
|
|
+if(IMC_APP_FILES)
|
|
|
+ target_link_libraries(imc_freeRTOS PRIVATE imc_apps c m nosys gcc)
|
|
|
+else()
|
|
|
+ target_link_libraries(imc_freeRTOS PRIVATE c m nosys gcc)
|
|
|
+endif()
|
|
|
|
|
|
target_compile_options(imc_freeRTOS PRIVATE "-g")
|
|
|
set_target_properties(imc_freeRTOS PROPERTIES LINK_DEPENDS ${LINKER_SCRIPT})
|