diff --git a/cmake/aspis.cmake b/cmake/aspis.cmake deleted file mode 100644 index 63f30a5fe7429d3511a0317e35c21b62dc734bb9..0000000000000000000000000000000000000000 --- a/cmake/aspis.cmake +++ /dev/null @@ -1,31 +0,0 @@ -# include(${SBS_BASE}/libs/miosix-kernel/miosix/cmake/cmake-utils/cmake/LLVMIRUtil.cmake) - -# set(ASPIS_BASE_PATH ~/ASPIS) -# set(ASPIS_PASSES_PATH ${ASPIS_BASE_PATH}/build/passes) - - -# function(aspis_passes source_files external_files) -# -# llvmir_attach_bc_target(${source_files}_ir ${source_files}) -# llvmir_attach_link_target(${source_files}_link ${source_files}_ir) -# llvmir_attach_opt_pass_target(${source_files}_eddi ${source_files}_link -${ASPIS_PASSES_PATH}/libEDDI) -# -# llvmir_attach_bc_target(${external_files}_ir ${external_files}) -# llvmir_attach_link_target(${external_files}_link ${external_files}_ir) -# -# endfunction() -# function(aspis_passes TARGET) -# set_target_properties(${TARGET} PROPERTIES LINKER_LANGUAGE CXX) -# target_compile_options(${TARGET} PUBLIC "-O0") - -# if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "5.0.0" OR -# CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL "5.0.0") -# target_compile_options(${TARGET} PUBLIC -Xclang -disable-O0-optnone) -# endif() - -# llvmir_attach_bc_target(${TARGET}_ir ${TARGET}) -# llvmir_attach_link_target(${TARGET}_link ${TARGET}_ir) -# # llvmir_attach_opt_pass_target(${TARGET}_eddi ${TARGET}_link -${ASPIS_PASSES_PATH}/libEDDI) -# llvmir_attach_executable(${TARGET}_exe ${TARGET}_link) - -# endfunction() \ No newline at end of file diff --git a/cmake/boardcore.cmake b/cmake/boardcore.cmake index e0ee49b617aabc6b157eff7769f7f0dff8918796..3f489d2336708b6d8e89976855aa580703edb89e 100644 --- a/cmake/boardcore.cmake +++ b/cmake/boardcore.cmake @@ -26,7 +26,6 @@ cmake_path(GET CMAKE_CURRENT_LIST_DIR PARENT_PATH BOARDCORE_PATH) include(${BOARDCORE_PATH}/cmake/dependencies.cmake) include(${BOARDCORE_PATH}/cmake/boardcore-host.cmake) include(${BOARDCORE_PATH}/cmake/boards.cmake) -# include(${SBS_BASE}/libs/miosix-kernel/miosix/cmake/cmake-utils/cmake/LLVMIRUtil.cmake) set(ASPIS_BASE_PATH ~/ASPIS) set(ASPIS_PASSES_PATH ${ASPIS_BASE_PATH}/build/passes) @@ -144,21 +143,17 @@ set(DUPLICATE_SRC ${BOARDCORE_PATH}/src/tests/aspis/dummy.cpp ) -# # Set flag for miosix base path -# set(BASE_MIOSIX_TOOLCHAIN /home/ecorigliano/temp/arm-miosix-eabi) -# set(CMAKE_LINKER "${BASE_MIOSIX_TOOLCHAIN}/bin/arm-miosix-eabi-ld") # using patched miosix linker -# add_link_options("-fuse-ld=${CMAKE_LINKER}") - -function(add_options_boardcore_library LIB) +function(add_options_boardcore_library LIB TYPE) # Only one include directory for Boardcore! - target_include_directories(${LIB} PUBLIC ${BOARDCORE_PATH}/src/shared) + target_include_directories(${LIB} ${TYPE} ${BOARDCORE_PATH}/src/shared) # Define DEBUG when in Debug mode - target_compile_definitions(${LIB} PUBLIC $<$<CONFIG:Debug>:DEBUG>) - target_compile_options(${LIB} PUBLIC -gdwarf-4) + target_compile_definitions(${LIB} ${TYPE} $<$<CONFIG:Debug>:DEBUG>) + # Reference https://github.com/google/oss-fuzz/issues/11698 + target_compile_options(${LIB} ${TYPE} -gdwarf-4) # Link libraries - target_link_libraries(${LIB} PUBLIC + target_link_libraries(${LIB} ${TYPE} $<TARGET_OBJECTS:Miosix::Boot::${BOARD_NAME}> $<LINK_GROUP:RESCAN,Miosix::Kernel::${BOARD_NAME},stdc++,c,m,gcc,atomic> TSCPP::TSCPP @@ -170,9 +165,9 @@ function(add_options_boardcore_library LIB) # Link MxGui if supported by the target if(DEFINED MXGUI_BASE_BOARD_NAME) - target_link_libraries(${LIB} PUBLIC MxGui::${MXGUI_BASE_BOARD_NAME}) + target_link_libraries(${LIB} ${TYPE} MxGui::${MXGUI_BASE_BOARD_NAME}) elseif(TARGET MxGui::${BOARD_NAME}) - target_link_libraries(${LIB} PUBLIC MxGui::${BOARD_NAME}) + target_link_libraries(${LIB} ${TYPE} MxGui::${BOARD_NAME}) endif() endfunction() @@ -200,7 +195,7 @@ function(add_boardcore_library BOARD_OPTIONS_FILE) list(TRANSFORM DUPLICATE_COMPILED_SOURCES PREPEND ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${DUPLICATION_LIB}.dir) # Create list of compiled boardcore sources for each board - set(BOARDCORE_COMPILED_SOURCES ${BOARDCORE_COMP-${BOARD_NAME}}) + set(BOARDCORE_COMPILED_SOURCES BOARDCORE_COMP-${BOARD_NAME}) list(TRANSFORM BOARDCORE_SRC APPEND ".o" OUTPUT_VARIABLE BOARDCORE_COMPILED_SOURCES) list(TRANSFORM BOARDCORE_COMPILED_SOURCES REPLACE ${BOARDCORE_PATH} "") list(TRANSFORM BOARDCORE_COMPILED_SOURCES PREPEND ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${BOARDCORE_LIB}.dir) @@ -208,7 +203,6 @@ function(add_boardcore_library BOARD_OPTIONS_FILE) add_custom_command( OUTPUT duplicated-${BOARD_NAME}.ll.bak COMMAND llvm-link ${DUPLICATE_COMPILED_SOURCES} -o duplication-${BOARD_NAME}.ll - # COMMAND llvm-link -v CMakeFiles/duplication-stm32f767zi_compute_unit.dir/src/tests/aspis/ -o linked-${BOARD_NAME}.ll COMMAND opt --bugpoint-enable-legacy-pm -load ${ASPIS_PASSES_PATH}/libEDDI.so -func_ret_to_ref duplication-${BOARD_NAME}.ll -o funcToRef.ll COMMAND opt --bugpoint-enable-legacy-pm -load ${ASPIS_PASSES_PATH}/libEDDI.so -eddi_verify funcToRef.ll -o dataProtection.ll COMMAND opt --bugpoint-enable-legacy-pm -simplifycfg dataProtection.ll -o simplifycfg.ll @@ -217,51 +211,57 @@ function(add_boardcore_library BOARD_OPTIONS_FILE) COMMENT "Applying ASPIS passes: duplicated-${BOARD_NAME}.ll.bak" ) - add_options_boardcore_library(${BOARDCORE_LIB}) - add_options_boardcore_library(${DUPLICATION_LIB}) + add_options_boardcore_library(${BOARDCORE_LIB} PUBLIC) + add_options_boardcore_library(${DUPLICATION_LIB} PUBLIC) target_link_libraries(${BOARDCORE_LIB} PUBLIC ${DUPLICATION_LIB}) add_custom_command( OUTPUT out-${BOARD_NAME}.bc - # TARGET ${BOARDCORE_LIB} POST_BUILD COMMAND llvm-link ${BOARDCORE_COMPILED_SOURCES} duplicated-${BOARD_NAME}.ll.bak -o linked-${BOARD_NAME}.ll COMMAND opt --bugpoint-enable-legacy-pm -load ${ASPIS_PASSES_PATH}/libEDDI.so -duplicate_globals linked-${BOARD_NAME}.ll -o out-${BOARD_NAME}.bc.bak COMMAND rm *.ll COMMAND mv out-${BOARD_NAME}.bc.bak out-${BOARD_NAME}.bc - # COMMAND clang ${COMPILE_FLAGS} ${COMPILE_DEFINITIONS} ${INCLUDE_DIRECTORIES} -c -o compiled-${BOARD_NAME}.o out-${BOARD_NAME}.bc - # COMMAND llvm-ar r libboardcore-lib-${BOARD_NAME}.a compiled-${BOARD_NAME}.o - # COMMAND llc -filetype=obj -o compiled-${BOARD_NAME} out-${BOARD_NAME}.bc DEPENDS duplicated-${BOARD_NAME}.ll.bak $<TARGET_FILE:${BOARDCORE_LIB}> COMMENT "Applying ASPIS passes: out-${BOARD_NAME}.bc" ) + + set_property( + SOURCE ${CMAKE_CURRENT_BINARY_DIR}/out-${BOARD_NAME}.bc + PROPERTY EXTERNAL_OBJECT TRUE + ) add_custom_target( libboardcore-target-${BOARD_NAME} DEPENDS out-${BOARD_NAME}.bc ) - # IMPORTANT! $<TARGET_PROPERTY:${BOARDCORE_LIB},COMPILE_OPTIONS> - set(BOARDCORE_FINAL boardcore-lib-${BOARD_NAME}) - add_library(${BOARDCORE_FINAL} STATIC EXCLUDE_FROM_ALL ${CMAKE_CURRENT_BINARY_DIR}/out-${BOARD_NAME}.bc) - target_link_libraries(${BOARDCORE_FINAL} PUBLIC Miosix::Interface::${BOARD_NAME}) - add_options_boardcore_library(${BOARDCORE_FINAL}) add_dependencies(libboardcore-target-${BOARD_NAME} ${BOARDCORE_LIB}) - add_dependencies(${BOARDCORE_FINAL} libboardcore-target-${BOARD_NAME}) - add_dependencies(${BOARDCORE_FINAL} ${BOARDCORE_LIB}) - - ### Trying imported library - # add_library(${BOARDCORE_FINAL} STATIC IMPORTED) - # add_dependencies(${BOARDCORE_FINAL} libboardcore-target-${BOARD_NAME}) - # set_target_properties(${BOARDCORE_FINAL} PROPERTIES IMPORTED_LOCATION libboardcore-lib-${BOARD_NAME}.a) - # target_link_libraries(${BOARDCORE_FINAL} INTERFACE Miosix::Interface::${BOARD_NAME}) - - ### Trying using the utility - # llvmir_attach_library(${BOARDCORE_FINAL} out-${BOARD_NAME}.bc STATIC EXCLUDE_FROM_ALL) - - # add_library(${BOARDCORE_FINAL} STATIC EXCLUDE_FROM_ALL compiled-${BOARD_NAME}) - # add_dependencies(${BOARDCORE_FINAL} ${BOARDCORE_LIB}) - # target_link_libraries(${BOARDCORE_FINAL} PUBLIC ${BOARDCORE_LIB} ${CMAKE_CURRENT_BINARY_DIR}/out-${BOARD_NAME}.bc) - # set_target_properties(${BOARDCORE_FINAL} PROPERTIES LINKER_LANGUAGE CXX) + + # Compose all the building flags necessary to build the static library + set(COMPILATION_FLAGS + --target=arm-none-eabi + ${CXXFLAGS_BASE} # C++ Flags + ) + + # Command to crosscompiling the generated bitcode and creating the static library + add_custom_target( + libboardcore-lib-target-${BOARD_NAME} + COMMAND clang++ -c ${COMPILATION_FLAGS} -o compiled-${BOARD_NAME}.o out-${BOARD_NAME}.bc + COMMAND llvm-ar ru libboardcore-lib-${BOARD_NAME}.a compiled-${BOARD_NAME}.o + DEPENDS libboardcore-target-${BOARD_NAME} + COMMAND_EXPAND_LISTS + COMMENT "Creating archive: libboardcore-lib-${BOARD_NAME}.a" + ) + add_dependencies(libboardcore-lib-target-${BOARD_NAME} libboardcore-target-${BOARD_NAME}) + + # Importing the just built library + set(BOARDCORE_FINAL boardcore-lib-${BOARD_NAME}) + add_library(${BOARDCORE_FINAL} STATIC IMPORTED) + add_dependencies(${BOARDCORE_FINAL} libboardcore-lib-target-${BOARD_NAME}) + set_target_properties(${BOARDCORE_FINAL} PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/libboardcore-lib-${BOARD_NAME}.a) + target_link_libraries(${BOARDCORE_FINAL} INTERFACE Miosix::Interface::${BOARD_NAME}) + + add_options_boardcore_library(${BOARDCORE_FINAL} INTERFACE) # Create a nice alias for the library add_library(Skyward::Boardcore::${BOARD_NAME} ALIAS ${BOARDCORE_FINAL}) diff --git a/libs/miosix-kernel b/libs/miosix-kernel index 9182ba50b49edccf12ac7f041b0c4eef6790cce0..c38939b1a5538973b27cd8903aef1525fa8c1bc5 160000 --- a/libs/miosix-kernel +++ b/libs/miosix-kernel @@ -1 +1 @@ -Subproject commit 9182ba50b49edccf12ac7f041b0c4eef6790cce0 +Subproject commit c38939b1a5538973b27cd8903aef1525fa8c1bc5