Subject: Re: More config changes, for ro source tree and disjoint build trees
To: None <ignatios@cs.uni-bonn.de>
From: Mike Long <mike.long@analog.com>
List: tech-kern
Date: 08/16/1996 19:33:57
>Date: Tue, 13 Aug 1996 21:50:30 +0200 (MET DST)
>From: Ignatios Souvatzis <ignatios@cs.uni-bonn.de>
>
>   Date: Tue, 13 Aug 96 10:54:57 EDT
>   From: Mike Long <mike.long@analog.com>

>   You could solve the LKM #ifdef problem and the supported-options
>   problem at the same time:
>
>   1) Options for which LKMs exist, and other "supported" options, are
>   declared in /sys/.../files* .  Part of the declaration is a variable
>   name, e.g. compat_freebsd for the COMPAT_FREEBSD option.
>
>   2) Config generates an options.c file in the kernel build directory
>   which defines a variable for each supported option.  The variable is
>   nonzero if the option is requested in the user's kernel config file:
>
>   int	compat_freebsd	= 1;
>
>   If the option is not requested, the flag is set to zero.  Unsupported
>   options (e.g. driver debug options) end up in IDENT as usual.
>   options.c is (obviously) compiled into the kernel.
>
>   3) Replace #ifdefs for supported options with flag checks:
>
>   #ifdef COMPAT_FREEBSD		if (compat_freebsd) {
>   ...			->	...
>   #endif				}
>
>I hope you are aware that options are used at the moment to define
>which of two console fonts are compiled into NetBSD/amiga kernel
>binaries.
>
>Basically:
>
>
>#ifdef KFONT_8X11
>
>u_int8_t kf8x11data[] = { ...};
>
>#endif
>
>in one place and
>
>#ifdef KFNOT_8x11
>
>#define fontdata kf8x11data
>
>#endif
>
>in another. Any better method for similar stuff which 
>which fits with your proposal?

I'm not all that familar with the Amiga port, but I'll give it a
shot.  After looking at Amiga sources and thinking a bit, I see a
problem.  The quick conversion would look something like:

u_int_t *fontdata;

/* in the kernel's main(): */
if (kfont_8x11)
	fontdata = &kf8x11data;

Unfortunately, the linker would dislike my use of &.  What you need is
some way of knowing which font tables have been built into the kernel;
the only way to do that is either #ifdefs, which leave us back where
we started; or a function to replace that & which looks up symbols in
the kernel symbol table.  DDB has such a function, but DDB is
optional.  I don't know how difficult it would be to genericize DDB's
symbol management routines so that the LKM system could use them.

Remember, I did leave you the option of leaving it in IDENT. :-)
-- 
Mike Long <mike.long@analog.com>     <URL:http://www.shore.net/~mikel>
VLSI Design Engineer         finger mikel@shore.net for PGP public key
Analog Devices, CPD Division          CCBF225E7D3F7ECB2C8F7ABB15D9BE7B
Norwood, MA 02062 USA       (eq (opinion 'ADI) (opinion 'mike)) -> nil