⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spewmakeinc.c

📁 基于Blas CLapck的.用过的人知道是干啥的
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "atlconf.h"void PrintUsage(char *name, int iarg, char *arg){   fprintf(stderr, "\nERROR around arg %d (%s).\n", iarg,           arg ? arg : "unknown");   fprintf(stderr, "USAGE: %s [flags] where flags are:\n", name);   fprintf(stderr, "   -v <verb> : verbosity level\n");   fprintf(stderr, "   -O <enum OSTYPE #>  : set OS type\n");   fprintf(stderr, "   -s <enum ASMDIA #>  : set assembly dialect\n");   fprintf(stderr, "   -A <enum MACHTYPE #> : set machine/architecture\n");   fprintf(stderr,   "   -V #    # = ((1<<vecISA1) | (1<<vecISA2) | ... | (1<<vecISAN))\n");   fprintf(stderr, "   -b <32/64> : set pointer bitwidth\n");   fprintf(stderr, "   -o <outfile>\n");   fprintf(stderr, "   -C [xc,ic,if,sk,dk,sm,dm,al,ac] <compiler>\n");   fprintf(stderr, "   -F [xc,ic,if,sk,dk,sm,dm,al,ac,gc] '<comp flags>'\n");   fprintf(stderr,    /* HERE */           "   -Fa [xc,ic,if,sk,dk,sm,dm,al,ac,gc] '<comp flags to append>'\n");   fprintf(stderr, "        al: append flags to all compilers\n");   fprintf(stderr, "        ac: append flags to all C compilers\n");   fprintf(stderr, "        gc: append flags to gcc compiler used in user-contributed index files.\n");   fprintf(stderr, "        acg: append to all C compilers & the index gcc\n");   fprintf(stderr, "        alg: append to all compilers & the index gcc\n");   fprintf(stderr,      "   -T <targ> : ssh target for cross-compilation (probably broken)\n");   fprintf(stderr, "   -D [c,f] -D<mac>=<rep> : cpp #define to add to [CDEFS,F2CDEFS]\n");   fprintf(stderr,   "      eg. -D c -DL2SIZE=8388604 -D f -DADD__ -D f -DStringSunStyle\n");   fprintf(stderr, "   -d [s,b]  : set source/build directory\n");   fprintf(stderr, "   -f <#> : size (in KB) to flush before timing\n");   fprintf(stderr,           "   -t <#> : set # of threads (-1: autodect; 0: no threading)\n");   fprintf(stderr, "   -m <mhz> : set clock rate\n");   fprintf(stderr, "   -S[i/s] <handle> <val>  : special int/string arg\n");   fprintf(stderr,           "      -Si bozol1 <0/1> : supress/enable bozo L1 defaults\n");   fprintf(stderr,           "      -Si archdef <1/0> : enable/supress arch default use\n");      fprintf(stderr,        "      -Si nof77 <0/1> : Have/don't have fortran compiler\n");   fprintf(stderr,        "      -Ss kern <path to comp> : use comp for all kernel compilers\n");   fprintf(stderr,        "      -Ss pmake <parallel make invocation (eg '$(MAKE) -j 4')>\n");   fprintf(stderr,"      -Ss f77lib <path to f77 lib needed by C compiler>\n");   fprintf(stderr,"      -Ss flapack <path to netlib lapack>: used to build full lapack lib\n");   fprintf(stderr, "      -Ss [s,d]maflags 'flags'\n");   fprintf(stderr,      "NOTE: enum #s can be found by : make xprint_enums ; ./xprint_enums\n");   exit(iarg);}void GetFlags(int nargs,                /* nargs as passed into main */              char **args,              /* args as passed into main */              int *verb,                /* verbosity setting */              enum OSTYPE *OS,          /* OS to assume */              enum ASMDIA *asmb,        /* assembly dialect to assume */              int *vec,                 /* Vector ISA extension bitfield */              enum MACHTYPE *mach,     /* machine/arch to assume */              int *mhz,                /* Clock rate in Mhz */              int *ptrbits             /* # of bits in ptr: 32/64 */,              int *nthreads,           /* # of threads */              char **comps,              char **gccflags,        /* append flags for user-contrib gcc */              char **outfile,              char **srcdir,          /* path to top of source directory */              char **bindir,          /* path to top of binary directory */              int *bozol1,            /* Use untuned L1 */              int *UseArchDef,        /* Use arch defaults */              int *NoF77,              char **f2cdefs,         /* F77-to-C interface defines */              char **ecdefs,          /* extra cpp defines to add to CDEFS */              char **pmake,           /* parallel make command */              char **flapack,         /* netlib F77 LAPACK  */              char **smaflags,       /* single prec muladd flags */              char **dmaflags,       /* double prec muladd flags */              char **f77lib,         /* netlib F77 LAPACK  */              int *flush,             /* size in KB to flush */              char **targ             /* mach to ssh to*/             ){   int i, k, k0, kn, DoInt;   char *sp, *sp0;   char *gcc3=NULL;   char *cdefs=NULL, *fdefs=NULL;   char ln[1024];   *verb = 0;   *srcdir = *bindir = NULL;    *bozol1 = 0;    *UseArchDef = 1;    *flapack = NULL;    *f77lib = NULL;    *smaflags = *dmaflags = NULL;    *mhz = 0;   *outfile = NULL;   *targ = NULL;   for (k=0; k < NCOMP*3; k++)      comps[k] = NULL;   *gccflags = NULL;   *flush = 0;   *nthreads = 0;   *ptrbits = 0;   *mhz = 0;   *mach = 0;   *vec = 0;   *asmb = 0;   *OS = 0;   *verb = 0;   *NoF77 = 0;   *nthreads = -1;   *pmake = NULL;   for (i=1; i < nargs; i++)   {      if (args[i][0] != '-')         PrintUsage(args[0], i, args[i]);      switch(args[i][1])      {      case 'f':         if (++i >= nargs)            PrintUsage(args[0], i, "out of arguments");         *flush = atoi(args[i]);         break;      case 't':         if (++i >= nargs)            PrintUsage(args[0], i, "out of arguments");         *nthreads = atoi(args[i]);         break;      case 'b':         if (++i >= nargs)            PrintUsage(args[0], i, "out of arguments");         *ptrbits = atoi(args[i]);         break;      case 'm':         if (++i >= nargs)            PrintUsage(args[0], i, "out of arguments");         *mhz = atoi(args[i]);         break;      case 'A':         if (++i >= nargs)            PrintUsage(args[0], i, "out of arguments");         *mach = atoi(args[i]);         break;      case 'V':         if (++i >= nargs)            PrintUsage(args[0], i, "out of arguments");         *vec = atoi(args[i]);         break;      case 's':         if (++i >= nargs)            PrintUsage(args[0], i, "out of arguments");         *asmb = atoi(args[i]);         break;      case 'O':         if (++i >= nargs)            PrintUsage(args[0], i, "out of arguments");         *OS = atoi(args[i]);         break;      case 'v':         if (++i >= nargs)            PrintUsage(args[0], i, "out of arguments");         *verb = atoi(args[i]);         break;      case 'T':         if (++i >= nargs)            PrintUsage(args[0], i, "out of arguments");         *targ = args[i];         break;      case 'S':         if (args[i][2] != 'i' && args[i][2] != 's')            PrintUsage(args[0], i, "-S needs i or s suffix!");         DoInt = args[i][2] == 'i';         if (++i >= nargs)            PrintUsage(args[0], i, "out of arguments");         sp0 = args[i];         if (++i >= nargs)            PrintUsage(args[0], i, "out of arguments");         if (DoInt)            k = atoi(args[i]);         else            sp = args[i];         if (!strcmp(sp0, "archdef"))            *UseArchDef = k;         else if (!strcmp(sp0, "bozol1"))            *bozol1 = k;         else if (!strcmp(sp0, "nof77"))            *NoF77 = k;         else if (!strcmp(sp0, "kern"))            gcc3 = sp;         else if (!strcmp(sp0, "pmake"))            *pmake = sp;        else if (!strcmp(sp0, "flapack"))           *flapack = sp;        else if (!strcmp(sp0, "f77lib"))           *f77lib = sp;        else if (!strcmp(sp0, "smaflags"))           *smaflags = sp;        else if (!strcmp(sp0, "dmaflags"))           *dmaflags = sp;         else            PrintUsage(args[0], i-1, sp0);         break;      case 'o':         if (++i >= nargs)            PrintUsage(args[0], i, "out of arguments");         *outfile = args[i];         break;      case 'D':         if (++i >= nargs)            PrintUsage(args[0], i, "out of arguments");         if (++i >= nargs)            PrintUsage(args[0], i, "out of arguments");         if (args[i-1][0] == 'f')            fdefs = NewAppendedString(fdefs, args[i]);         else            cdefs = NewAppendedString(cdefs, args[i]);         break;      case 'd':         if (++i >= nargs)            PrintUsage(args[0], i, "out of arguments");         if (++i >= nargs)            PrintUsage(args[0], i, "out of arguments");         sp = args[i-1];         if (*sp == 's')            *srcdir = args[i];         else if (*sp == 'b')            *bindir = args[i];         break;      case 'C':      case 'F':         if (++i >= nargs)            PrintUsage(args[0], i, "out of arguments");         sp = args[i];         k = -1;         if (*sp == 'i' && sp[1] == 'c') k = ICC_;         else if (*sp == 'i' && sp[1] == 'f') k = F77_;         else if (*sp == 's' && sp[1] == 'k') k = SKC_;         else if (*sp == 'd' && sp[1] == 'k') k = DKC_;         else if (*sp == 's' && sp[1] == 'm') k = SMC_;         else if (*sp == 'd' && sp[1] == 'm') k = DMC_;         else if (*sp == 'x' && sp[1] == 'c') k = XCC_;         if (*sp == 'a' && (sp[1] == 'l' || sp[1] == 'c'))         {  /* only appended flags can be applied to all compilers */            if (args[i-1][1] == 'F')            {               if (args[i-1][2] == 'a')               {                  k0 = NCOMP+NCOMP;                  kn = k0 + NCOMP;               }               else               {                  k0 = NCOMP;                  kn = NCOMP+NCOMP;               }            }            else            {               k0 = 0;               kn = NCOMP;            }            if (++i >= nargs)               PrintUsage(args[0], i, "out of arguments");            for (k=k0; k < kn; k++)               if (sp[1] == 'l' || k-2*NCOMP != F77_)                  comps[k] = args[i];            if (sp[2] == 'g' && args[i-2][1] == 'F')               *gccflags = args[i];         }         else if (*sp == 'g' && sp[1] == 'c')         {            if (++i >= nargs)               PrintUsage(args[0], i, "out of arguments");            *gccflags = args[i];         }         else         {            if (k < 0) PrintUsage(args[0], i, args[i]);            if (args[i-1][1] == 'F')            {               k += NCOMP;               if (args[i-1][2] == 'a')                  k += NCOMP;            }            if (++i >= nargs)               PrintUsage(args[0], i, "out of arguments");            comps[k] = args[i];         }         break;      default:         PrintUsage(args[0], i, args[i]);      }   }/* * allocate these strings ourselves so we can free them later if necessary */   for (i=0; i < 3*NCOMP; i++)   {      if (comps[i])      {         if (!strcmp(comps[i], "default"))            comps[i] = NULL;         else         {            sp = malloc(sizeof(char)*(strlen(comps[i])+1));            strcpy(sp, comps[i]);            comps[i] = sp;         }      }   }/* * If the special flag -Ss gcc3 is thrown, force gcc3's use for all kernel * compilers (standard gcc assumed to be gcc4) */   if (gcc3)   {      for (i=0; i < NCOMP; i++)      {         if (!comps[i] && (i == SMC_ || i == DMC_ || i == SKC_ || i == DKC_))            comps[i] = NewStringCopy(gcc3);      }   }   *f2cdefs = fdefs;   *ecdefs = cdefs;   if (*ptrbits != 32 && *ptrbits != 64)      *ptrbits = 0;}char *GetPtrbitsFlag(enum OSTYPE OS, enum MACHTYPE arch, int ptrbits,                     char *comp)/* * RETURNS: string forcing setting of ptrbits for gcc */{   char *sp = "";   int i, j, k;   if (MachIsIA64(arch))      return(sp);   if (MachIsMIPS(arch))      sp = (ptrbits == 64) ? "-mabi=64" : "-mabi=n32";   if (!CompIsGcc(comp))   {/* *    Add correct 64/32 bit flags for Sun workshop compilers */      if (MachIsUS(arch) && CompIsSunWorkshop(comp))      {         if (ptrbits == 64)            sp = (arch == SunUSI || arch == SunUSII) ?                 "-xarch=v9" : "-xarch=v9b";         else            sp = (arch == SunUSI || arch == SunUSII) ?                 "-xarch=v8plusa" : "-xarch=v8plusb";      }      else if (CompIsIBMXL(comp))  /* IBM xl compilers */         sp = (ptrbits == 64) ? "-q64" : "-q32";      return(sp);   }   GetGccVers(comp, &k, &j, &k, &k);   if ( !(j >= 3 && (OS != OSOSX || j > 3 || !CompIsAppleGcc(comp))) )      return(sp);   else if (OS == OSAIX)      sp = (ptrbits == 64) ? "-maix64" : "-maix32";   else if (ptrbits == 64)     sp = "-m64";   else if (ptrbits == 32)     sp = "-m32";   return(sp);}main(int nargs, char **args){   enum OSTYPE OS;   enum MACHTYPE mach;   int h, i, j, k, verb, asmb, nof77, mhz;   int vecexts, ISAX;   int ptrbits, l2size;   int delay=0;  /* change this to come from "special" ints in GetFlags */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -