On Thu, 30 May 2019 at 12:16, Pascal Van Leeuwen <pvanleeuwen@xxxxxxxxxxxxxxxx> wrote: > > > >> Yes. Code and data with static linkage will just be optimized away by > > >> the compiler if the CONFIG_xx option is not enabled, so all you need > > >> to guard are the actual statements, function calls etc. > > >> > > > Ok, makes sense. Then I'll just config out the relevant function bodies > > > and assume the compiler will do the rest ... > > > > > > > No need to config out function bodies when they are static. > > > Well, I got a complaint from someone that my driver updates for adding PCIE > support wouldn't compile properly on a platform without a PCI(E) subsystem. > So I figure I do have to config out the references to PCI specific function > calls to fix that. > > Or are you just referring to bodies of static subfunctions that are no > longer being called? Would the compiler skip those entirely? > The idea is that, by doing something like static int bar; static void foo(void) { bar = 1; } if (IS_ENABLED(CONFIG_FOO)) foo(); the function foo() or the variable bar don't have to be decorated with #ifdefs or anything. The compiler will not complain that they are unused if CONFIG_FOO is not enabled, and the contents of foo() are always visible to the compiler, and so any programming errors will be caught regardless of whether CONFIG_FOO is set.