📄 config.c
字号:
i += sprintf(ln+i, " -Ss smaflags '%s'", smaflags); if (dmaflags) i += sprintf(ln+i, " -Ss dmaflags '%s'", dmaflags); if (f77libs) i += sprintf(ln+i, " -Ss f77lib '%s'", f77libs); if (gccflags) i += sprintf(ln+i, " -Fa gc '%s'", gccflags); if (verb > 1) fprintf(stderr, "cmnd='%s'\n", ln); assert(!system(ln));}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, " -Si nocygwin <0/1> : Do/don't depend on GPL cygwin library\n"); fprintf(stderr, " (Windows compiler/cygwin install only)\n"); fprintf(stderr, " -Si cputhrchk <0/1> : Ignore/heed CPU throttle probe\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, int *NoCygwin, int *ThrChk, 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; *NoCygwin = 0; *NoF77 = 0; *ThrChk = 1; *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, "nocygwin")) *NoCygwin = k; else if (!strcmp(sp0, "cputhrchk")) *ThrChk = 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;}main(int nargs, char **args){ enum OSTYPE OS; enum MACHTYPE mach; int i, verb, asmb, f2cname, f2cint, f2cstr, ncpu, nof77, nocygwin; int thrchk, mhz; int j, k, h, vecexts; int ptrbits, l2size, bozol1, archdef; char *targ, *f2cdefs, *cdefs, *srcdir, *bindir, *outfile, *sp; char targarg[256]; char *comps[3*NCOMP], *gccflags; char *pmake, *flapack, *smaflags, *dmaflags, *f77libs; GetFlags(nargs, args, &verb, &OS, (enum ASMDIA*) &asmb, &vecexts, &mach, &mhz, &ptrbits, &ncpu, comps, &gccflags, &outfile, &srcdir, &bindir, &bozol1, &archdef, &nof77, &nocygwin, &thrchk, &f2cdefs, &cdefs, &pmake, &flapack, &smaflags, &dmaflags, &f77libs, &l2size, &targ); if (targ) sprintf(targarg, "-T %s", targ); else targarg[0] = '\0'; if (OS == OSOther) OS = ProbeOS(verb, targarg); if (asmb == ASM_None) asmb = ProbeAsm(verb, targarg, OS); else if (asmb < 0) asmb = 0; if (!vecexts) vecexts = ProbeVecs(verb, targarg, OS, asmb); else if (vecexts < 0) vecexts = 0; if (mach == MACHOther) mach = ProbeArch(verb, targarg, OS, asmb); if (!mhz) mhz = ProbeMhz(verb, targarg, OS, asmb); if (ncpu < 0) ncpu = ProbeNcpu(verb, targarg, OS, asmb); if (!pmake && ncpu > 1) pmake = ProbePmake(verb, OS, ncpu); if (ptrbits == 0) { if (asmb == gas_x86_64) ptrbits = 64; else ptrbits = ProbePtrbits(verb, targarg, OS, asmb); } if (ProbeCPUThrottle(verb, targarg, OS, asmb)) { fprintf(stderr, "It appears you have cpu throttling enabled, which makes timings\n"); fprintf(stderr, "unreliable and an ATLAS install nonsensical. Aborting.\n"); fprintf(stderr, "See ATLAS/INSTALL.txt for further information\n"); if (thrchk) exit(1); else fprintf(stderr, "Ignoring CPU throttling by user override!\n\n"); }/* * Override 32/64 bit assembler if asked */ if (asmb == gas_x86_64 && ptrbits == 32) asmb = gas_x86_32; else if (asmb == gas_x86_32 && ptrbits == 64) asmb = gas_x86_64; sp = ProbeComp(verb, targarg, OS, mach, comps, nof77, nocygwin, ptrbits); if (nof77) f2cdefs = "-DATL_NoF77"; else if (!f2cdefs) f2cdefs = sp; if (!f77libs) f77libs = ProbeF77LIB(verb, targarg, OS, mach, comps, f2cdefs, nof77);/* * If user has not specified muladd flags (which are suffixed to kernel flags), * add flags to keep gcc 4 from hanging, if necessary */ if (!smaflags) { if (CompIsGcc(comps[SKC_])) { GetGccVers(comps[SKC_], &h, &i, &j, &k); if (i >= 4) smaflags = "-fno-tree-loop-optimize"; else if (i == 3) /* reduce opt to avoid compiler hang */ smaflags = "-O0"; } else if (OS == OSIRIX && CompIsMIPSpro(comps[SKC_])) smaflags = " -O2"; } if (!dmaflags) { if (CompIsGcc(comps[DKC_])) { GetGccVers(comps[DKC_], &h, &i, &j, &k); if (i >= 4) dmaflags = "-fno-tree-loop-optimize"; else if (i == 3) /* reduce opt to avoid compiler hang */ dmaflags = "-O0"; } else if (OS == OSIRIX && CompIsMIPSpro(comps[DKC_])) dmaflags = " -O2"; } SpewItForth(verb, OS, mach, mhz, asmb, vecexts, ptrbits, ncpu, l2size, srcdir, bindir, bozol1, archdef, nof77, comps, gccflags, f2cdefs, cdefs, pmake, flapack, smaflags, dmaflags, f77libs);/* * Cleanup directory, and exit */ system("make confclean"); exit(0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -