diff --git a/CMakeLists.txt b/CMakeLists.txt index 05fe458e68468a795a6244782fde8a7479f40af8..947b1442c66aeec478d27715994bfd7b9ae0c95d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -35,8 +35,9 @@ include(${BOARDCORE_PATH}/cmake/boardcore.cmake) # ### DEFAULT -# # Define the miosix library with kernel and architecture sources -# add_library(skyward-boardcore STATIC ${EXCLUDE_SRC} ${PROTECT_SRC} ${TO_DUPLICATE_SRC}) +# # Define the miosix library with kernel and architecture sources +# add_library(skyward-boardcore STATIC ${EXCLUDE_SRC} ${GRAY_AREA_SRC} ${TO_DUPLICATE_SRC} ${TO_HARDEN_SRC}) +# target_compile_options(skyward-boardcore PRIVATE -O3) # link_boardcore_submodules(skyward-boardcore PUBLIC) # link_boardcore_libraries(skyward-boardcore PUBLIC) @@ -44,11 +45,18 @@ include(${BOARDCORE_PATH}/cmake/boardcore.cmake) ### ASPIS # Create a library for the duplications -add_library(to_protect_lib STATIC EXCLUDE_FROM_ALL ${PROTECT_SRC}) -target_compile_options(to_protect_lib PRIVATE -S -emit-llvm -O3) -# add_options_boardcore_library(to_protect_lib PUBLIC ${BOARD_NAME}) -link_boardcore_submodules(to_protect_lib PUBLIC) -link_boardcore_libraries(to_protect_lib PUBLIC) +add_library(to_harden_lib STATIC EXCLUDE_FROM_ALL ${TO_HARDEN_SRC}) +target_compile_options(to_harden_lib PRIVATE -S -emit-llvm -O3) +# add_options_boardcore_library(to_harden_lib PUBLIC ${BOARD_NAME}) +link_boardcore_submodules(to_harden_lib PUBLIC) +link_boardcore_libraries(to_harden_lib PUBLIC) + +# Create a library for the board +add_library(to_duplicate_lib STATIC EXCLUDE_FROM_ALL ${TO_DUPLICATE_SRC}) +target_compile_options(to_duplicate_lib PRIVATE -S -emit-llvm -O3) +# add_options_boardcore_library(to_duplicate_lib PUBLIC ${BOARD_NAME}) +link_boardcore_submodules(to_duplicate_lib PUBLIC) +link_boardcore_libraries(to_duplicate_lib PUBLIC) # Create a library for the board add_library(external_lib STATIC EXCLUDE_FROM_ALL ${EXCLUDE_SRC}) @@ -58,15 +66,14 @@ link_boardcore_submodules(external_lib PUBLIC) link_boardcore_libraries(external_lib PUBLIC) # Create a library for the board -add_library(to_duplicate_lib STATIC EXCLUDE_FROM_ALL ${TO_DUPLICATE_SRC}) -target_compile_options(to_duplicate_lib PRIVATE -S -emit-llvm -O3) -# add_options_boardcore_library(to_duplicate_lib PUBLIC ${BOARD_NAME}) -link_boardcore_submodules(to_duplicate_lib PUBLIC) -link_boardcore_libraries(to_duplicate_lib PUBLIC) +add_library(gray_area_lib STATIC EXCLUDE_FROM_ALL ${GRAY_AREA_SRC}) +target_compile_options(gray_area_lib PRIVATE -S -emit-llvm -O3) +# add_options_boardcore_library(gray_area_lib PUBLIC ${BOARD_NAME}) +link_boardcore_submodules(gray_area_lib PUBLIC) +link_boardcore_libraries(gray_area_lib PUBLIC) get_property(CXXFLAGS_RET TARGET miosix PROPERTY TARGET_CXX_FLAGS) - -apply_aspis_passes(to_protect_lib external_lib to_duplicate_lib skyward-boardcore "${CXXFLAGS_RET}") +apply_aspis_passes(to_harden_lib to_duplicate_lib external_lib gray_area_lib skyward-boardcore "${CXXFLAGS_RET}") # add_options_boardcore_library(skyward-boardcore INTERFACE ${BOARD_NAME}) link_boardcore_submodules(skyward-boardcore INTERFACE) diff --git a/cmake/boardcore.cmake b/cmake/boardcore.cmake index 58e36bc5de74dc048a8ef81a73af297ee2b830e9..646a361fa02f6062aaf2be9536978a6fb7892837 100644 --- a/cmake/boardcore.cmake +++ b/cmake/boardcore.cmake @@ -124,7 +124,7 @@ set(EXCLUDE_SRC ${BOARDCORE_PATH}/src/shared/utils/Registry/Backend/FileBackend.cpp ) -set(PROTECT_SRC +set(GRAY_AREA_SRC ${BOARDCORE_PATH}/src/shared/aspis/aspis.cpp # Calibration @@ -161,6 +161,11 @@ set(TO_DUPLICATE_SRC ${BOARDCORE_PATH}/src/shared/events/EventBroker.cpp ) + +set(TO_HARDEN_SRC + ${BOARDCORE_PATH}/src/shared/aspis/dummy.cpp +) + function(link_boardcore_submodules TARGET TYPE) # Only one include directory for Boardcore! target_include_directories(${TARGET} ${TYPE} ${BOARDCORE_PATH}/src/shared) @@ -197,30 +202,38 @@ endfunction() set(ASPIS_PASSES_PATH /home/streben/Documenti/ASPIS/build/passes) # Given two libs, it creates a static library -function(apply_aspis_passes TO_PROTECT_LIB EXTERNAL_LIB TO_DUPLICATE_LIB OUTLIBRARY CXXFLAGS_RET) + +function(apply_aspis_passes TO_HARDEN_LIB TO_DUPLICATE_LIB EXTERNAL_LIB GRAY_AREA_LIB OUTLIBRARY CXXFLAGS_RET) # Getting the sources of the two libraries - get_property(TO_PROTECT_SRC TARGET ${TO_PROTECT_LIB} PROPERTY SOURCES) - get_property(TO_DUPLICATE_SRC TARGET ${TO_DUPLICATE_LIB} PROPERTY SOURCES) - get_property(EXTERNAL_SRC TARGET ${EXTERNAL_LIB} PROPERTY SOURCES) + get_property(TO_HARDEN_SRC_PROPERTY TARGET ${TO_HARDEN_LIB} PROPERTY SOURCES) + get_property(_PROPERTY TARGET ${TO_DUPLICATE_LIB} PROPERTY SOURCES) + get_property(EXTERNAL_SRC_PROPERTY TARGET ${EXTERNAL_LIB} PROPERTY SOURCES) + get_property(GRAY_AREA_SRC_PROPERTY TARGET ${GRAY_AREA_LIB} PROPERTY SOURCES) # Create list of compiled protected sources for each board - set(PROTECT_COMPILED_SOURCES TO_PROTECT_COMPILED) - list(TRANSFORM TO_PROTECT_SRC APPEND ".o" OUTPUT_VARIABLE PROTECT_COMPILED_SOURCES) - list(TRANSFORM PROTECT_COMPILED_SOURCES REPLACE ${CMAKE_SOURCE_DIR} "") - list(TRANSFORM PROTECT_COMPILED_SOURCES PREPEND ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${TO_PROTECT_LIB}.dir/) + set(TO_HARDEN_COMPILED_SOURCES TO_HARDEN_COMPILED) + list(TRANSFORM TO_HARDEN_SRC_PROPERTY APPEND ".o" OUTPUT_VARIABLE TO_HARDEN_COMPILED_SOURCES) + list(TRANSFORM TO_HARDEN_COMPILED_SOURCES REPLACE ${CMAKE_SOURCE_DIR} "") + list(TRANSFORM TO_HARDEN_COMPILED_SOURCES PREPEND ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${TO_HARDEN_LIB}.dir/) # Create list of compiled boardcore sources for each board set(TO_DUPLICATE_COMPILED_SOURCES EXTERNAL_COMPILED) - list(TRANSFORM TO_DUPLICATE_SRC APPEND ".o" OUTPUT_VARIABLE TO_DUPLICATE_COMPILED_SOURCES) + list(TRANSFORM _PROPERTY APPEND ".o" OUTPUT_VARIABLE TO_DUPLICATE_COMPILED_SOURCES) list(TRANSFORM TO_DUPLICATE_COMPILED_SOURCES REPLACE ${CMAKE_SOURCE_DIR} "") list(TRANSFORM TO_DUPLICATE_COMPILED_SOURCES PREPEND ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${TO_DUPLICATE_LIB}.dir/) # Create list of compiled boardcore sources for each board set(EXTERNAL_COMPILED_SOURCES EXTERNAL_COMPILED) - list(TRANSFORM EXTERNAL_SRC APPEND ".o" OUTPUT_VARIABLE EXTERNAL_COMPILED_SOURCES) + list(TRANSFORM EXTERNAL_SRC_PROPERTY APPEND ".o" OUTPUT_VARIABLE EXTERNAL_COMPILED_SOURCES) list(TRANSFORM EXTERNAL_COMPILED_SOURCES REPLACE ${CMAKE_SOURCE_DIR} "") list(TRANSFORM EXTERNAL_COMPILED_SOURCES PREPEND ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${EXTERNAL_LIB}.dir/) + # Create list of compiled gray area sources for each board + set(GRAY_COMPILED_SOURCES GRAY_AREA_COMPILED) + list(TRANSFORM GRAY_AREA_SRC_PROPERTY APPEND ".o" OUTPUT_VARIABLE GRAY_COMPILED_SOURCES) + list(TRANSFORM GRAY_COMPILED_SOURCES REPLACE ${CMAKE_SOURCE_DIR} "") + list(TRANSFORM GRAY_COMPILED_SOURCES PREPEND ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${GRAY_AREA_LIB}.dir/) + add_custom_target( ${OUTLIBRARY}-target BYPRODUCTS lib${OUTLIBRARY}.a @@ -229,7 +242,9 @@ function(apply_aspis_passes TO_PROTECT_LIB EXTERNAL_LIB TO_DUPLICATE_LIB OUTLIBR COMMAND ${CMAKE_OPT} -load-pass-plugin=${ASPIS_PASSES_PATH}/libAddAnnotation.so --passes="mark-to-exclude" externals.bc -o externals.bc COMMAND ${MIOSIX_PREFIX}-link ${TO_DUPLICATE_COMPILED_SOURCES} -o to_duplicate.bc COMMAND ${CMAKE_OPT} -load-pass-plugin=${ASPIS_PASSES_PATH}/libAddAnnotation.so --passes="mark-to-duplicate" to_duplicate.bc -o to_duplicate.bc - COMMAND ${MIOSIX_PREFIX}-link -v ${PROTECT_COMPILED_SOURCES} externals.bc to_duplicate.bc -o out.bc + COMMAND ${MIOSIX_PREFIX}-link ${TO_HARDEN_COMPILED_SOURCES} -o to_harden.bc + COMMAND ${CMAKE_OPT} -load-pass-plugin=${ASPIS_PASSES_PATH}/libAddAnnotation.so --passes="mark-to-harden" to_harden.bc -o to_harden.bc + COMMAND ${MIOSIX_PREFIX}-link -v ${GRAY_COMPILED_SOURCES} externals.bc to_duplicate.bc to_harden.bc -o out.bc # COMMAND ${CMAKE_OPT} -load-pass-plugin=${ASPIS_PASSES_PATH}/libEDDI.so --passes="func-ret-to-ref" out.bc -o ret_to_ref.bc # COMMAND ${CMAKE_OPT} -load-pass-plugin=${ASPIS_PASSES_PATH}/libSEDDI.so --passes="eddi-verify" ret_to_ref.bc -o out.bc -debug # COMMAND ${CMAKE_OPT} --passes="dce,simplifycfg" out.bc -o out.bc @@ -239,9 +254,10 @@ function(apply_aspis_passes TO_PROTECT_LIB EXTERNAL_LIB TO_DUPLICATE_LIB OUTLIBR COMMAND_EXPAND_LISTS COMMENT "Applying ASPIS passes and creating archive lib${OUTLIBRARY}.a" ) - add_dependencies(${OUTLIBRARY}-target ${TO_PROTECT_LIB}) + add_dependencies(${OUTLIBRARY}-target ${TO_HARDEN_LIB}) add_dependencies(${OUTLIBRARY}-target ${TO_DUPLICATE_LIB}) add_dependencies(${OUTLIBRARY}-target ${EXTERNAL_LIB}) + add_dependencies(${OUTLIBRARY}-target ${GRAY_AREA_LIB}) # Importing the just built library add_library(${OUTLIBRARY} STATIC IMPORTED) @@ -251,20 +267,21 @@ endfunction() # Given two libs, it creates an executable -function(apply_aspis_passes_exe TO_PROTECT_EXE EXTERNAL_EXE TO_DUPLICATE_LIB OUTEXECUTABLE CXXFLAGS_RET) +function(apply_aspis_passes_exe TO_HARDEN_LIB TO_DUPLICATE_LIB EXTERNAL_LIB GRAY_AREA_LIB OUTEXECUTABLE CXXFLAGS_RET) # Getting the sources of the two libraries - get_property(TO_PROTECT_SRC TARGET ${TO_PROTECT_EXE} PROPERTY SOURCES) + get_property(TO_HARDEN_SRC TARGET ${TO_HARDEN_LIB} PROPERTY SOURCES) get_property(TO_DUPLICATE_SRC TARGET ${TO_DUPLICATE_LIB} PROPERTY SOURCES) - get_property(EXTERNAL_SRC TARGET ${EXTERNAL_EXE} PROPERTY SOURCES) + get_property(EXTERNAL_SRC TARGET ${EXTERNAL_LIB} PROPERTY SOURCES) + get_property(GRAY_AREA_SRC TARGET ${GRAY_AREA_LIB} PROPERTY SOURCES) # Create list of compiled protected sources for each board - set(PROTECT_COMPILED_SOURCES TO_PROTECT_COMPILED) - list(TRANSFORM TO_PROTECT_SRC APPEND ".o" OUTPUT_VARIABLE PROTECT_COMPILED_SOURCES) - list(TRANSFORM PROTECT_COMPILED_SOURCES REPLACE ${CMAKE_SOURCE_DIR} "") - list(TRANSFORM PROTECT_COMPILED_SOURCES PREPEND ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${TO_PROTECT_EXE}.dir/) + set(TO_HARDEN_COMPILED_SOURCES TO_HARDEN_COMPILED) + list(TRANSFORM TO_HARDEN_SRC APPEND ".o" OUTPUT_VARIABLE TO_HARDEN_COMPILED_SOURCES) + list(TRANSFORM TO_HARDEN_COMPILED_SOURCES REPLACE ${CMAKE_SOURCE_DIR} "") + list(TRANSFORM TO_HARDEN_COMPILED_SOURCES PREPEND ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${TO_HARDEN_LIB}.dir/) # Create list of compiled boardcore sources for each board - set(TO_DUPLICATE_COMPILED_SOURCES EXTERNAL_COMPILED) + set(TO_DUPLICATE_COMPILED_SOURCES TO_DUPLICATE_COMPILED) list(TRANSFORM TO_DUPLICATE_SRC APPEND ".o" OUTPUT_VARIABLE TO_DUPLICATE_COMPILED_SOURCES) list(TRANSFORM TO_DUPLICATE_COMPILED_SOURCES REPLACE ${CMAKE_SOURCE_DIR} "") list(TRANSFORM TO_DUPLICATE_COMPILED_SOURCES PREPEND ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${TO_DUPLICATE_LIB}.dir/) @@ -273,7 +290,13 @@ function(apply_aspis_passes_exe TO_PROTECT_EXE EXTERNAL_EXE TO_DUPLICATE_LIB OUT set(EXTERNAL_COMPILED_SOURCES EXTERNAL_COMPILED) list(TRANSFORM EXTERNAL_SRC APPEND ".o" OUTPUT_VARIABLE EXTERNAL_COMPILED_SOURCES) list(TRANSFORM EXTERNAL_COMPILED_SOURCES REPLACE ${CMAKE_SOURCE_DIR} "") - list(TRANSFORM EXTERNAL_COMPILED_SOURCES PREPEND ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${EXTERNAL_EXE}.dir/) + list(TRANSFORM EXTERNAL_COMPILED_SOURCES PREPEND ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${EXTERNAL_LIB}.dir/) + + # Create list of compiled gray area sources for each board + set(GRAY_COMPILED_SOURCES GRAY_AREA_COMPILED) + list(TRANSFORM GRAY_AREA_SRC APPEND ".o" OUTPUT_VARIABLE GRAY_COMPILED_SOURCES) + list(TRANSFORM GRAY_COMPILED_SOURCES REPLACE ${CMAKE_SOURCE_DIR} "") + list(TRANSFORM GRAY_COMPILED_SOURCES PREPEND ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${GRAY_AREA_LIB}.dir/) add_custom_target( ${OUTEXECUTABLE}-target @@ -283,7 +306,9 @@ function(apply_aspis_passes_exe TO_PROTECT_EXE EXTERNAL_EXE TO_DUPLICATE_LIB OUT COMMAND ${CMAKE_OPT} -load-pass-plugin=${ASPIS_PASSES_PATH}/libAddAnnotation.so --passes="mark-to-exclude" externals.bc -o externals.bc COMMAND ${MIOSIX_PREFIX}-link ${TO_DUPLICATE_COMPILED_SOURCES} -o to_duplicate.bc COMMAND ${CMAKE_OPT} -load-pass-plugin=${ASPIS_PASSES_PATH}/libAddAnnotation.so --passes="mark-to-duplicate" to_duplicate.bc -o to_duplicate.bc - COMMAND ${MIOSIX_PREFIX}-link -v ${CMAKE_BINARY_DIR}/skyward_boardcore.bc ${PROTECT_COMPILED_SOURCES} externals.bc to_duplicate.bc -o out.bc + COMMAND ${MIOSIX_PREFIX}-link ${TO_HARDEN_COMPILED_SOURCES} -o to_harden.bc + COMMAND ${CMAKE_OPT} -load-pass-plugin=${ASPIS_PASSES_PATH}/libAddAnnotation.so --passes="mark-to-harden" to_harden.bc -o to_harden.bc + COMMAND ${MIOSIX_PREFIX}-link -v ${CMAKE_BINARY_DIR}/skyward_boardcore.bc ${GRAY_COMPILED_SOURCES} externals.bc to_duplicate.bc to_harden.bc -o out.bc COMMAND ${CMAKE_OPT} -load-pass-plugin=${ASPIS_PASSES_PATH}/libEDDI.so --passes="func-ret-to-ref" out.bc -o ret_to_ref.bc COMMAND ${CMAKE_OPT} -load-pass-plugin=${ASPIS_PASSES_PATH}/libSEDDI.so --passes="eddi-verify" ret_to_ref.bc -o out.bc -debug COMMAND ${CMAKE_OPT} --passes="dce,simplifycfg" out.bc -o out.bc @@ -293,12 +318,10 @@ function(apply_aspis_passes_exe TO_PROTECT_EXE EXTERNAL_EXE TO_DUPLICATE_LIB OUT COMMAND_EXPAND_LISTS COMMENT "Applying ASPIS passes and creating ${OUTEXECUTABLE}.elf" ) - add_dependencies(${OUTEXECUTABLE}-target ${TO_PROTECT_EXE}) + add_dependencies(${OUTEXECUTABLE}-target ${GRAY_AREA_LIB}) + add_dependencies(${OUTEXECUTABLE}-target ${TO_HARDEN_LIB}) add_dependencies(${OUTEXECUTABLE}-target ${TO_DUPLICATE_LIB}) - add_dependencies(${OUTEXECUTABLE}-target ${EXTERNAL_EXE}) - -# /usr/lib64/ccache/clang++ --target=arm-none-eabi --sysroot=/opt/arm-miosix-eabi/arm-miosix-eabi/lib -g -O0 -Wl,-Map,/home/streben/Documenti/POLIMI/TESI/obsw/src/entrypoints/Main/build/main-entry.map -Wl,-Map,/home/streben/Documenti/POLIMI/TESI/obsw/src/entrypoints/Main/build/skyward-boardcore.map -mcpu=cortex-m7 -mthumb -mfloat-abi=hard -mfpu=fpv5-d16 -Wl,--gc-sections -Wl,-T/home/streben/Documenti/POLIMI/TESI/obsw/skyward-boardcore/src/bsps/stm32f767zi_gemini_motor/stm32_2m+16m_xram.ld -nostdlib -o main-entry.elf -L/opt/arm-miosix-eabi/arm-miosix-eabi/lib/thumb/cm7/hardfp/fpv5 -L/opt/arm-miosix-eabi/lib/gcc/arm-miosix-eabi/9.2.0/thumb/cm7/hardfp/fpv5 libskyward-boardcore.a -Wl,--start-group libmiosix.a -lstdc++ -lc -lm -lgcc -latomic -Wl,--end-group - + add_dependencies(${OUTEXECUTABLE}-target ${EXTERNAL_LIB}) # Importing the just built library add_executable(${OUTEXECUTABLE} IMPORTED) diff --git a/src/shared/aspis/dummy.cpp b/src/shared/aspis/dummy.cpp new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391