Enhance config to handle MACHINEs with multiple architectures:

- Passing -m to config will now print the MACHINE and MACHINE_ARCH
  given in the passed kernel configuration file and then exit.
- If an option is defined in options.MACHINE with the same name as the
  architecture of the kernel being configured, that option will be
  considered set. This allows conditional compilation based on CPU
  architecture.

Config version is now 600010.

Reviewed by:	imp
This commit is contained in:
Nathan Whitehorn 2010-07-13 04:08:08 +00:00
parent 1b0f43beb1
commit 9b047d4a9a
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=209969
4 changed files with 38 additions and 10 deletions

View File

@ -78,6 +78,9 @@ Note that
does not append
.Ar SYSTEM_NAME
to the directory given.
.It Fl m
Print the MACHINE and MACHINE_ARCH values for this
kernel and exit.
.It Fl g
Configure a system for debugging.
.It Fl x Ar kernel

View File

@ -49,5 +49,5 @@
*
* $FreeBSD$
*/
#define CONFIGVERS 600009
#define CONFIGVERS 600010
#define MAJOR_VERS(x) ((x) / 100000)

View File

@ -110,13 +110,18 @@ main(int argc, char **argv)
char *p;
char xxx[MAXPATHLEN];
char *kernfile;
int printmachine;
printmachine = 0;
kernfile = NULL;
while ((ch = getopt(argc, argv, "Cd:gpVx:")) != -1)
while ((ch = getopt(argc, argv, "Cd:gmpVx:")) != -1)
switch (ch) {
case 'C':
filebased = 1;
break;
case 'm':
printmachine = 1;
break;
case 'd':
if (*destdir == '\0')
strlcpy(destdir, optarg, sizeof(destdir));
@ -171,13 +176,6 @@ main(int argc, char **argv)
strlcat(destdir, PREFIX, sizeof(destdir));
}
p = path((char *)NULL);
if (stat(p, &buf)) {
if (mkdir(p, 0777))
err(2, "%s", p);
} else if (!S_ISDIR(buf.st_mode))
errx(EXIT_FAILURE, "%s isn't a directory", p);
SLIST_INIT(&cputype);
SLIST_INIT(&mkopt);
SLIST_INIT(&opt);
@ -207,6 +205,19 @@ main(int argc, char **argv)
}
checkversion();
if (printmachine) {
printf("%s\t%s\n",machinename,machinearch);
exit(0);
}
/* Make compile directory */
p = path((char *)NULL);
if (stat(p, &buf)) {
if (mkdir(p, 0777))
err(2, "%s", p);
} else if (!S_ISDIR(buf.st_mode))
errx(EXIT_FAILURE, "%s isn't a directory", p);
/*
* make symbolic links in compilation directory
* for "sys" (to make genassym.c work along with #include <sys/xxx>)
@ -280,7 +291,7 @@ static void
usage(void)
{
fprintf(stderr, "usage: config [-CgpV] [-d destdir] sysname\n");
fprintf(stderr, "usage: config [-CgmpV] [-d destdir] sysname\n");
fprintf(stderr, " config -x kernel\n");
exit(EX_USAGE);
}

View File

@ -94,6 +94,20 @@ options(void)
SLIST_INSERT_HEAD(&opt, op, op_next);
read_options();
/* Fake the value of MACHINE_ARCH as an option if necessary */
SLIST_FOREACH(ol, &otab, o_next) {
if (strcasecmp(ol->o_name, machinearch) != 0)
continue;
op = (struct opt *)calloc(1, sizeof(*op));
if (op == NULL)
err(EXIT_FAILURE, "calloc");
op->op_name = ns(ol->o_name);
SLIST_INSERT_HEAD(&opt, op, op_next);
break;
}
SLIST_FOREACH(op, &opt, op_next) {
SLIST_FOREACH(ol, &otab, o_next) {
if (eq(op->op_name, ol->o_name) &&