On Tue, Sep 25, 2018 at 04:38:01PM +0200, Uwe Kleine-König wrote: > > By *default*, if no -gcc-base-dir is used, sparse use the same dir > > as the one used by the GCC used to compile sparse itself. It's only > > this default that is hardcoded. > > I wasn't sure if this is expected to work. I had in mind, that the > version of gcc is used somewhere but couldn't find proof for that. Several other flags have their default value corresponding to the GCC used to compile sparse: for example the architecture (x86, x86-64) or the endianness. The one you're thinking about is probably the macros for the GCC version: __GNUC__, __GNUC_MINOR__ & __GNUC_PATCHLEVEL__. As far as I know, everything that should matter can be set explicitly either by defining the macro via -D...=... or an explicit flag like -m{32,64}, -m{little,big}-endian, -funsigned-char, ... When using sparse for userspace code, it may be best to use the cgcc wrapper since it take care to set (some of) these values. I'm saying 'may' because personnaly, I have no experience of using sparse via cgcc (as an user, I've only used sparse for OS or bare-metal code) but I know others use it like so (for example for git). > > In case the default can't be used, like here, I think the best is > > to add in your Makefile something like: > > GCC_BASE_DIR=$(shell $(CC) -print-file-name=) > > SPARSE_FLAGS= -gcc-base-dir $(GCC_BASE_DIR) > > ... > > sparse $(SPARSE_FLAGS) ... > > IMHO it is sensible to let sparse depend on (or at least recommend) gcc. > And then the default value should be right. > > > This doesn't need to be done at each invocation of sparse (but will be done > > at each top-level make invocation). > > I'd say you'd need := for this effect instead of =. Yes, indeed. > Best regards and thanks for your valuable input, > Uwe You're very welcome, -- Luc