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