summaryrefslogtreecommitdiff
path: root/setup/srcconf_vxworks.inc
diff options
context:
space:
mode:
Diffstat (limited to 'setup/srcconf_vxworks.inc')
-rw-r--r--setup/srcconf_vxworks.inc245
1 files changed, 245 insertions, 0 deletions
diff --git a/setup/srcconf_vxworks.inc b/setup/srcconf_vxworks.inc
new file mode 100644
index 0000000..d3a660d
--- /dev/null
+++ b/setup/srcconf_vxworks.inc
@@ -0,0 +1,245 @@
+static void
+generate_vxworks_driver (char *name, conf_t * conf, char *cfg_name, char *cfg_header,
+ char *dirname, char *topdir);
+
+static void
+vxworks_setup(conf_t *conf, char *arch)
+{
+#ifndef linux
+ char tmp[256];
+#endif
+
+ printf ("\n*** Setting up cross compiling for VxWorks %s target ***\n\n", arch);
+
+ hostcc="cc";
+
+#ifdef linux
+ targetcc="ccpentium";
+#else
+ sprintf(tmp, "cc%s", arch);
+ targetcc=strdup(tmp);
+#endif
+ strcpy(conf->OSflags, "");
+ strcpy(conf->platform, "vxworks");
+ strcpy(conf->ccomp, targetcc);
+ strcpy(this_os, "kernel/OS/VxWorks");
+ strcpy(conf->system, "VxWorks");
+ strcpy(conf->arch, arch);
+ sprintf(conf->cplusplus, "c++%s", arch);
+
+ shlib_cflags = "-shared -fPIC";
+ shlib_ldflags = "-shared -fPIC";
+
+ strcpy (conf->endianess, "LITTLE"); // TODO
+
+ driver_gen = generate_vxworks_driver;
+}
+
+static void
+vxworks_genheader(FILE *f, char *path)
+{
+#ifdef linux
+ fprintf (f, "\n");
+ fprintf (f, "WIND_BASE=/WindRiver/vxworks-6.6\n");
+ fprintf (f, "LD=ldpentium\n");
+ fprintf (f, "AR=arpentium\n");
+ fprintf (f, "CFLAGS+=-mpentium -nostdinc -O2 -fvolatile -nostdlib -fno-builtin -fno-defer-pop -Wall -I$(WIND_BASE)/target/config/all -I-I/WindRiver/vxworks-6.6/target/h/wrn/coreip -I/WindRiver/vxworks-6.6/target/h/wrn/coreip\n");
+ //fprintf (f, "CFLAGS+=-nostdinc -O2 -nostdlib -fno-builtin -fno-defer-pop -Wall -I$(WIND_BASE)/target/config/all\n");
+ fprintf (f, "CFLAGS+=-I$(WIND_BASE)/target/h -I$(WIND_BASE)/target/src/config -I$(WIND_BASE)/target/src/drv -I/WindRiver/diab/5.6.0.0/include -DCPU=PENTIUM\n");
+ fprintf (f, "PATH+=:/WindRiver/gnu/4.1.2-vxworks-6.6/x86-linux2/bin\n");
+ fprintf (f, "\n");
+#else
+ fprintf (f, "\n");
+ fprintf (f, "WIND_BASE=/usr/tornado-2.0\n");
+ fprintf (f, "CPU=PENTIUM\n");
+ fprintf (f, "TOOL=gnu\n");
+ fprintf (f, "WIND_HOST_TYPE=sun4-solaris2\n");
+ fprintf (f, "\n");
+ fprintf (f, "include $(WIND_BASE)/target/h/make/defs.bsp\n");
+ fprintf (f, "include $(WIND_BASE)/target/h/make/make.$(CPU)$(TOOL)\n");
+ fprintf (f, "include $(WIND_BASE)/target/h/make/defs.$(WIND_HOST_TYPE)\n");
+ fprintf (f, "\n");
+ fprintf (f, "exe: all\n");
+ fprintf (f, "\n");
+#endif
+}
+
+static void
+generate_vxworks_driver (char *name, conf_t * conf, char *cfg_name, char *cfg_header,
+ char *dirname, char *topdir)
+{
+ /* VxWorks version */
+
+ FILE *f, *src;
+ char tmp[256], line[256], *p, *s;
+ int n = 0;
+ char *options[MAXOPTS];
+ char *option_desc[MAXOPTS];
+ char desc[65536];
+ int nopts = 0;
+
+ sprintf (tmp, "%s/%s", dirname, cfg_name);
+ if ((src = fopen (tmp, "w")) == NULL)
+ {
+ perror (tmp);
+ exit (-1);
+ }
+
+ fprintf (src, "/*\n");
+ fprintf (src, " * Automatically generated file - do not edit.\n");
+ fprintf (src, " */\n");
+
+ fprintf (src, "#include \"%s\"\n\n", cfg_header);
+
+/*
+ * Handle driver specific configuration options
+ */
+ *desc = 0;
+ sprintf (tmp, "%s/.params", dirname);
+ if ((f = fopen (tmp, "r")) != NULL)
+ {
+ while (fgets (line, sizeof (line) - 1, f) != NULL)
+ {
+ p = line + strlen (line) - 1;
+ if (*p == '\n')
+ *p = 0;
+
+ fprintf (src, "%s\n", line);
+ if (strncmp (line, "int ", 4) == 0)
+ {
+ char *s = line + 4, *p = s;
+
+ while (*p && *p != '=' && *p != ';')
+ p++;
+ *p = 0;
+ if (nopts >= MAXOPTS)
+ {
+ fprintf (stderr, "Too many options for driver '%s' (%d)\n",
+ name, nopts);
+ exit (-1);
+ }
+
+ if (nopts != 0 && *desc != 0)
+ option_desc[nopts - 1] = strdup (desc);
+ option_desc[nopts] = 0;
+ options[nopts++] = strdup (s);
+ *desc = 0;
+ }
+ else
+ {
+ char *s = line, *p;
+ char tmp[4096];
+ while (*s == ' ' || *s == '/' || *s == '*')
+ s++;
+
+ p = tmp;
+
+ while (*s)
+ {
+ if (*s == '"')
+ *p++ = '\\';
+
+ *p++ = *s++;;
+ }
+ *p = 0;
+
+ p = desc + strlen (desc);
+ sprintf (p, "\n\"%s\\n\"", tmp);
+ }
+ }
+
+ fclose (f);
+ }
+
+ if (nopts > 0 && *desc != 0)
+ option_desc[nopts - 1] = strdup (desc);
+
+ if ((f = fopen ("devices.list", "r")) == NULL)
+ {
+ perror ("devices.list");
+ exit (-1);
+ }
+
+ if (strcmp (conf->bus, "PCI") == 0)
+ {
+ fprintf (src, "static unsigned int id_table[] = {\n");
+
+ while (fgets (line, sizeof (line) - 1, f) != NULL)
+ {
+ int vendor, product;
+ p = line + strlen (line) - 1;
+ if (*p == '\n')
+ *p = 0;
+
+ p = line;
+ while (*p && *p != '\t')
+ p++;
+ if (*p == '\t')
+ *p++ = 0;
+
+ if (strcmp (line, name) != 0)
+ continue;
+
+ n++;
+
+ s = p;
+ while (*p && *p != '\t')
+ p++;
+ if (*p == '\t')
+ *p++ = 0;
+
+ if (strncmp (s, "pci", 3) == 0)
+ {
+ if (sscanf (s + 3, "%x,%x", &vendor, &product) != 2)
+ {
+ fprintf (stderr, "Bad PCI id %s\n", s);
+ }
+
+ fprintf (src,
+ "\t0x%04x%04x,\n",
+ vendor, product);
+ }
+
+ }
+
+ fclose (f);
+
+ fprintf (src, "\t0\n");
+ fprintf (src, "};\n");
+ fprintf (src, "\n");
+ }
+
+ if (strcmp (conf->bus, "USB") == 0)
+ {
+ fprintf (stderr, "Error: No support available for USB yet\n");
+ exit (EXIT_FAILURE);
+ }
+ fprintf (src, "#include \"module.inc\"\n");
+ fclose(src);
+
+ sprintf (tmp, "%s/%s", dirname, cfg_header);
+ if ((src = fopen (tmp, "w")) == NULL)
+ {
+ perror (tmp);
+ exit (-1);
+ }
+
+ fprintf (src, "/*\n");
+ fprintf (src, " * Automatically generated file - do not edit.\n");
+ fprintf (src, " */\n");
+
+ fprintf (src, "#include <oss_config.h>\n");
+ fprintf (src, "\n");
+
+ fprintf (src, "#define DRIVER_NAME\t%s\n", name);
+ fprintf (src, "#define DRIVER_NICK\t\"%s\"\n", name);
+ fprintf (src, "#define DRIVER_ATTACH\t%s_attach\n", name);
+ fprintf (src, "#define DRIVER_DETACH\t%s_detach\n", name);
+ fprintf (src, "#define DRIVER_TYPE\tDRV_%s\n", conf->bus);
+ fprintf (src, "\n");
+
+ fprintf (src, "extern int DRIVER_ATTACH(oss_device_t *ossdev);\n");
+ fprintf (src, "extern int DRIVER_DETACH(oss_device_t *ossdev);\n");
+
+ fclose (src);
+}