--- src/usr.sbin/config/main.c 2006/10/22 16:09:08 1.17 +++ src/usr.sbin/config/main.c 2006/10/23 18:01:13 1.18 @@ -160,6 +160,11 @@ main(int argc, char *argv[]) printf("Specify machine type, e.g. ``machine i386''\n"); exit(1); } + if (strcmp(machinename, "vkernel") == 0 && cpuarchname == NULL) { + printf("Specify cpu_arch for virtual kernel, e.g. " + "``cpu_arch i386''\n"); + exit(1); + } newbus_ioconf(); /* @@ -174,7 +179,7 @@ main(int argc, char *argv[]) symlink(linkdest, path("machine")); /* - * "arch" points into + * "arch" points into / */ if (*srcdir == '\0') snprintf(linkdest, sizeof(linkdest), "../../arch/%s", @@ -185,6 +190,28 @@ main(int argc, char *argv[]) symlink(linkdest, path("arch")); /* + * "cpu" points to //include, only if cpu_arch + * directive was specified. Used by virtual kernels. + */ + if (cpuarchname != NULL) { + if (*srcdir == '\0') + snprintf(linkdest, sizeof(linkdest), + "../../arch/%s/include", cpuarchname); + else + snprintf(linkdest, sizeof(linkdest), + "%s/arch/%s/include", srcdir, cpuarchname); + symlink(linkdest, path("cpu")); + + if (*srcdir == '\0') + snprintf(linkdest, sizeof(linkdest), "../../arch/%s", + cpuarchname); + else + snprintf(linkdest, sizeof(linkdest), "%s/arch/%s", + srcdir, cpuarchname); + symlink(linkdest, path("cpu_arch")); + } + + /* * XXX check directory structure for architecture subdirectories and * create the symlinks automatically XXX */