FuseSoC doesn't use any HDL parsers. The list of files to be used is the list of files given by the core and its dependencies. They are simply "sorted" by the topological order.
The HDL parsers in HDLMake are not really parser but are based on regexp. So they are incomplete and may produce wrong result. This is not fixable. Even if a full parser (with dependency analysis) was used, they may still have problems while dealing with encrypted cores.
FuseSoC uses a YAML format (declarative) while HDLMake uses a python file (with all the power and dangers from python)
FuseSoC will always use the same set of files for an imported core. So you cannot abstract your tool (use one core with different implementations according to the target). There is support for conditions for tool and
top_level; check issue 268. HDLMake has the full power and
dangers of Python.
Use of make
Both HDLMake and FuseSoC generate a Makefile, which is annoying for Windows users. There is work in progress
in HDLMake to generate a shell/command script.
Both HDLMake and FuseSoC support many tools (simulators or synthesis). But FuseSoC uses an external module (EDAlize) to handle tools.
Dealing with sources
FuseSoC gathers the sources from all dependencies and work with a copy of the sources. This is not very efficient and can be confusing as the file pointed by error messages is a copy. But this allows to package easily the set of sources. However there is the --no-export switch to avoid copying files.
FuseSoC deals with core versions, while HDLMake has no notion of versions.