All K8 builds now broken

ron minnich rminnich at lanl.gov
Mon Mar 22 22:16:01 CET 2004


This all started while trying to build EPIA and finding it was now 
failing.

The problem began with the cpufixup.h code. This code did things like 
this:

#if defined(k8)
#define cpufixup() k8_cpufixup()
#elif defined(k7)

etc. 

First, this is about the only code that doesn't test a value, but instead 
tests a variable being defined. Second, in the Makefile.settings we found:
-Dk8=

OK, so k8 is defined, but has no value. the "#if define(k8)" code succeeds
as k8 is defined, and #defines cpufixup to k8_cpufixup. The Epia, which is
not a K8, fails to build as it does not have k8_cpufixup symbol defined,
which makes sense as it is not a K8.

So we changed the cpufixup.h to this:
#if (k8 == 1)
etc. 

which is much more in the way linuxbios has used defines for the last 3 
years or so (Eric, you being the person who pushed us in that direction)
:-)

So we were testing for k8 == 1, and the Makefile.settings had set k8 to 
nothing. 

Unfortunately, in gcc, if you define a variable but don't set its value, 
the preprocessor sets it to 1. So Epia builds still failed as 
#if (k8 == 1)

still succeeded.. 

So more looking. Turns out that in src/config/Options.lb, the variable k8 
is defined as
- default none
- export always

which means that even if k8 is never set, it is always exported. In other 
words, a config variable with value 'none' is exported to 
Makefile.settings, which is just plain wrong. The value should be defined 
before it is exported. 

Greg knows the full set of changes, but basically it is no longer allowed 
to export a variable whose value is 'none'. You have to set it if it gets 
exported. 

This will fix the Epia build. It may not break any other builds; Greg 
explained to me that he has things worked out and I am being too 
pessimistic. 

We'll see tomorow for our builds and we'll let you know.

ron




More information about the coreboot mailing list