diff --git a/LbDevTools/data/cmake/BinaryTagUtils.cmake b/LbDevTools/data/cmake/BinaryTagUtils.cmake
index e7fcad764118e191226671d5dc3f97d5bb17e7b4..76d2dd343fe1741286250339c68f570c64d0723b 100644
--- a/LbDevTools/data/cmake/BinaryTagUtils.cmake
+++ b/LbDevTools/data/cmake/BinaryTagUtils.cmake
@@ -65,13 +65,16 @@
 set(BTU_KNOWN_x86_ARCHS
   x86_64
   core2
+  x86_64_v2
   nehalem
   westmere
   sandybridge
   ivybridge
+  x86_64_v3
   haswell
   broadwell
   skylake
+  x86_64_v4
   skylake_avx512
   canonlake
 
@@ -172,12 +175,12 @@ function(check_compiler)
     parse_binary_tag()
   endif()
 
-  if(BINARY_TAG_COMP_NAME STREQUAL "gcc" AND NOT CMAKE_COMPILER_IS_GNUCXX)
+  if(BINARY_TAG_COMP_NAME STREQUAL "gcc" AND NOT CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
     message(WARNING "BINARY_TAG states compiler is gcc, but ${CMAKE_CXX_COMPILER} is not GNU")
-  elseif(BINARY_TAG_COMP_NAME STREQUAL "clang" AND NOT CMAKE_CXX_COMPILER MATCHES "clang")
-    message(WARNING "BINARY_TAG states compiler is clang, but ${CMAKE_CXX_COMPILER} is not")
-  elseif(BINARY_TAG_COMP_NAME STREQUAL "icc" AND NOT CMAKE_CXX_COMPILER MATCHES "icpc")
-    message(WARNING "BINARY_TAG states compiler is Intel, but ${CMAKE_CXX_COMPILER} is not")
+  elseif(BINARY_TAG_COMP_NAME STREQUAL "clang" AND NOT CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
+    message(WARNING "BINARY_TAG states compiler is clang, but ${CMAKE_CXX_COMPILER} is not Clang")
+  elseif(BINARY_TAG_COMP_NAME STREQUAL "icc" AND NOT CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
+    message(WARNING "BINARY_TAG states compiler is Intel, but ${CMAKE_CXX_COMPILER} is not Intel")
   endif()
 
   if(BINARY_TAG_COMP_VERSION)
diff --git a/LbDevTools/data/cmake/GaudiBuildFlags.cmake b/LbDevTools/data/cmake/GaudiBuildFlags.cmake
index 21ca4e665c1e626a865f40ca13477e9fac5a7844..bc32833405fccf9e2887cf363c369afb3627e500 100644
--- a/LbDevTools/data/cmake/GaudiBuildFlags.cmake
+++ b/LbDevTools/data/cmake/GaudiBuildFlags.cmake
@@ -253,6 +253,23 @@ if(NOT GAUDI_FLAGS_SET EQUAL GAUDI_FLAGS_OPTIONS)
   else()
     # special architecture flags
     string(REPLACE "_" "-" _gcc_arch_name ${BINARY_TAG_ARCH})
+    # (microarchitecture levels workaround for gcc < 11.0, clang < 12.0 and any other compiler)
+    if(_gcc_arch_name MATCHES "^x86-64-v[2-4]"
+            AND ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS "11.0")
+                OR (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS "12.0")
+                OR NOT (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang")))
+      # v2
+      list(APPEND GAUDI_ARCH popcnt sse3 sse4.1 sse4.2 ssse3 cx16 sahf)
+      if(_gcc_arch_name MATCHES "x86-64-v[3-4]")
+        # v3
+        list(APPEND GAUDI_ARCH avx avx2 bmi bmi2 f16c fma lzcnt movbe xsave)
+      endif()
+      if(_gcc_arch_name MATCHES "x86-64-v4")
+        # v4
+        list(APPEND GAUDI_ARCH avx512f avx512bw avx512cd avx512dq avx512vl)
+      endif()
+      set(_gcc_arch_name "x86-64")
+    endif()
     set(arch_opts "-march=${_gcc_arch_name}")
     foreach(_arch_opt ${GAUDI_ARCH})
       if(_arch_opt STREQUAL "native")