I think you might be misinterpreting the output from cargo build --timings.
Given a graph like this
The colour scheme is
yellow: build scripts
blue: non-parallelisable components
purple: parallelisable
Typically, the non-parallelisable part is parsing and typechecking (essentially everything required to generate a *.rmeta file) and the parallelisable part is code generation in LLVM because we don't actually need machine code until the final linking step.
However, because the compiler loads proc-macros with dlopen and runs them at compile time, everything about a proc-macro is "non-parallelisable". Generating machine code and linking everything into a *.so file is slow, so that's probably where most of your 0.5s is going.
"Non-parallelisable" is probably the wrong word here, but basically I mean the parts that block the compiler from starting to build downstream dependencies.