fixes #2569
This commit is contained in:
parent
a7a2fa63aa
commit
c8bebe92e2
3 changed files with 96 additions and 155 deletions
|
|
@ -319,7 +319,7 @@ proc processSwitch(switch, arg: string, pass: TCmdLinePass, info: TLineInfo) =
|
||||||
undefSymbol(arg)
|
undefSymbol(arg)
|
||||||
of "symbol":
|
of "symbol":
|
||||||
expectArg(switch, arg, pass, info)
|
expectArg(switch, arg, pass, info)
|
||||||
declareSymbol(arg)
|
# deprecated, do nothing
|
||||||
of "compile":
|
of "compile":
|
||||||
expectArg(switch, arg, pass, info)
|
expectArg(switch, arg, pass, info)
|
||||||
if pass in {passCmd2, passPP}: processCompile(arg)
|
if pass in {passCmd2, passPP}: processCompile(arg)
|
||||||
|
|
@ -488,7 +488,6 @@ proc processSwitch(switch, arg: string, pass: TCmdLinePass, info: TLineInfo) =
|
||||||
if theOS == osNone: localError(info, errUnknownOS, arg)
|
if theOS == osNone: localError(info, errUnknownOS, arg)
|
||||||
elif theOS != platform.hostOS:
|
elif theOS != platform.hostOS:
|
||||||
setTarget(theOS, targetCPU)
|
setTarget(theOS, targetCPU)
|
||||||
condsyms.initDefines()
|
|
||||||
of "cpu":
|
of "cpu":
|
||||||
expectArg(switch, arg, pass, info)
|
expectArg(switch, arg, pass, info)
|
||||||
if pass in {passCmd1, passPP}:
|
if pass in {passCmd1, passPP}:
|
||||||
|
|
@ -496,7 +495,6 @@ proc processSwitch(switch, arg: string, pass: TCmdLinePass, info: TLineInfo) =
|
||||||
if cpu == cpuNone: localError(info, errUnknownCPU, arg)
|
if cpu == cpuNone: localError(info, errUnknownCPU, arg)
|
||||||
elif cpu != platform.hostCPU:
|
elif cpu != platform.hostCPU:
|
||||||
setTarget(targetOS, cpu)
|
setTarget(targetOS, cpu)
|
||||||
condsyms.initDefines()
|
|
||||||
of "run", "r":
|
of "run", "r":
|
||||||
expectNoArg(switch, arg, pass, info)
|
expectNoArg(switch, arg, pass, info)
|
||||||
incl(gGlobalOptions, optRun)
|
incl(gGlobalOptions, optRun)
|
||||||
|
|
|
||||||
|
|
@ -12,66 +12,64 @@
|
||||||
import
|
import
|
||||||
strtabs, platform, strutils, idents
|
strtabs, platform, strutils, idents
|
||||||
|
|
||||||
# We need to use a PStringTable here as defined symbols are always guaranteed
|
# We need to use a StringTableRef here as defined symbols are always guaranteed
|
||||||
# to be style insensitive. Otherwise hell would break lose.
|
# to be style insensitive. Otherwise hell would break lose.
|
||||||
var gSymbols: StringTableRef
|
var gSymbols: StringTableRef
|
||||||
|
|
||||||
|
const
|
||||||
|
catNone = "false"
|
||||||
|
|
||||||
proc defineSymbol*(symbol: string) =
|
proc defineSymbol*(symbol: string) =
|
||||||
gSymbols[symbol] = "true"
|
gSymbols[symbol] = "true"
|
||||||
|
|
||||||
proc declareSymbol*(symbol: string) =
|
|
||||||
gSymbols[symbol] = "unknown"
|
|
||||||
|
|
||||||
proc undefSymbol*(symbol: string) =
|
proc undefSymbol*(symbol: string) =
|
||||||
gSymbols[symbol] = "false"
|
gSymbols[symbol] = catNone
|
||||||
|
|
||||||
proc isDefined*(symbol: string): bool =
|
proc isDefined*(symbol: string): bool =
|
||||||
if gSymbols.hasKey(symbol):
|
if gSymbols.hasKey(symbol):
|
||||||
result = gSymbols[symbol] == "true"
|
result = gSymbols[symbol] != catNone
|
||||||
|
elif cmpIgnoreStyle(symbol, CPU[targetCPU].name) == 0:
|
||||||
|
result = true
|
||||||
|
elif cmpIgnoreStyle(symbol, platform.OS[targetOS].name) == 0:
|
||||||
|
result = true
|
||||||
|
else:
|
||||||
|
case symbol.normalize
|
||||||
|
of "x86": result = targetCPU == cpuI386
|
||||||
|
of "itanium": result = targetCPU == cpuIa64
|
||||||
|
of "x8664": result = targetCPU == cpuAmd64
|
||||||
|
of "posix", "unix":
|
||||||
|
result = targetOS in {osLinux, osMorphos, osSkyos, osIrix, osPalmos,
|
||||||
|
osQnx, osAtari, osAix,
|
||||||
|
osHaiku, osVxWorks, osSolaris, osNetbsd,
|
||||||
|
osFreebsd, osOpenbsd, osMacosx}
|
||||||
|
of "bsd":
|
||||||
|
result = targetOS in {osNetbsd, osFreebsd, osOpenbsd}
|
||||||
|
of "emulatedthreadvars":
|
||||||
|
result = platform.OS[targetOS].props.contains(ospLacksThreadVars)
|
||||||
|
of "msdos": result = targetOS == osDos
|
||||||
|
of "mswindows", "win32": result = targetOS == osWindows
|
||||||
|
of "macintosh": result = targetOS in {osMacos, osMacosx}
|
||||||
|
of "sunos": result = targetOS == osSolaris
|
||||||
|
of "littleendian": result = CPU[targetCPU].endian == platform.littleEndian
|
||||||
|
of "bigendian": result = CPU[targetCPU].endian == platform.bigEndian
|
||||||
|
of "cpu8": result = CPU[targetCPU].bit == 8
|
||||||
|
of "cpu16": result = CPU[targetCPU].bit == 16
|
||||||
|
of "cpu32": result = CPU[targetCPU].bit == 32
|
||||||
|
of "cpu64": result = CPU[targetCPU].bit == 64
|
||||||
|
of "nimrawsetjmp":
|
||||||
|
result = targetOS in {osSolaris, osNetbsd, osFreebsd, osOpenbsd, osMacosx}
|
||||||
|
else: discard
|
||||||
|
|
||||||
proc isDefined*(symbol: PIdent): bool = isDefined(symbol.s)
|
proc isDefined*(symbol: PIdent): bool = isDefined(symbol.s)
|
||||||
proc isDeclared*(symbol: PIdent): bool = gSymbols.hasKey(symbol.s)
|
|
||||||
|
|
||||||
iterator definedSymbolNames*: string =
|
iterator definedSymbolNames*: string =
|
||||||
for key, val in pairs(gSymbols):
|
for key, val in pairs(gSymbols):
|
||||||
if val == "true": yield key
|
if val != catNone: yield key
|
||||||
|
|
||||||
proc countDefinedSymbols*(): int =
|
proc countDefinedSymbols*(): int =
|
||||||
result = 0
|
result = 0
|
||||||
for key, val in pairs(gSymbols):
|
for key, val in pairs(gSymbols):
|
||||||
if val == "true": inc(result)
|
if val != catNone: inc(result)
|
||||||
|
|
||||||
# For ease of bootstrapping, we keep them here and not in the global config
|
|
||||||
# file for now:
|
|
||||||
const
|
|
||||||
additionalSymbols = """
|
|
||||||
x86 itanium x8664
|
|
||||||
msdos mswindows win32 unix posix sunos bsd macintosh RISCOS hpux
|
|
||||||
mac
|
|
||||||
|
|
||||||
hppa hp9000 hp9000s300 hp9000s700 hp9000s800 hp9000s820 ELATE sparcv9
|
|
||||||
|
|
||||||
ecmascript js nimrodvm nimffi nimdoc cpp objc
|
|
||||||
gcc llvmgcc clang lcc bcc dmc wcc vcc tcc pcc ucc icl
|
|
||||||
boehmgc gcmarkandsweep gcgenerational nogc gcUseBitvectors
|
|
||||||
endb profiler
|
|
||||||
executable guiapp consoleapp library dll staticlib
|
|
||||||
|
|
||||||
quick
|
|
||||||
release debug
|
|
||||||
useWinAnsi useFork useNimRtl useMalloc useRealtimeGC ssl memProfiler
|
|
||||||
nodejs kwin nimfix
|
|
||||||
|
|
||||||
usesysassert usegcassert tinyC useFFI
|
|
||||||
useStdoutAsStdmsg createNimRtl
|
|
||||||
booting fulldebug corruption nimsuperops noSignalHandler useGnuReadline
|
|
||||||
noCaas noDocGen noBusyWaiting nativeStackTrace useNodeIds selftest
|
|
||||||
reportMissedDeadlines avoidTimeMachine useClone ignoreAllocationSize
|
|
||||||
debugExecProcesses pcreDll useLipzipSrc
|
|
||||||
preventDeadlocks UNICODE winUnicode trackGcHeaders posixRealtime
|
|
||||||
|
|
||||||
nimStdSetjmp nimRawSetjmp nimSigSetjmp
|
|
||||||
""".split
|
|
||||||
|
|
||||||
proc initDefines*() =
|
proc initDefines*() =
|
||||||
gSymbols = newStringTable(modeStyleInsensitive)
|
gSymbols = newStringTable(modeStyleInsensitive)
|
||||||
|
|
@ -90,58 +88,3 @@ proc initDefines*() =
|
||||||
defineSymbol("nimalias")
|
defineSymbol("nimalias")
|
||||||
defineSymbol("nimlocks")
|
defineSymbol("nimlocks")
|
||||||
defineSymbol("nimnode")
|
defineSymbol("nimnode")
|
||||||
|
|
||||||
# add platform specific symbols:
|
|
||||||
for c in low(CPU)..high(CPU):
|
|
||||||
declareSymbol("cpu" & $CPU[c].bit)
|
|
||||||
declareSymbol(normalize(EndianToStr[CPU[c].endian]))
|
|
||||||
declareSymbol(CPU[c].name)
|
|
||||||
for o in low(platform.OS)..high(platform.OS):
|
|
||||||
declareSymbol(platform.OS[o].name)
|
|
||||||
|
|
||||||
for a in additionalSymbols:
|
|
||||||
declareSymbol(a)
|
|
||||||
|
|
||||||
# -----------------------------------------------------------
|
|
||||||
case targetCPU
|
|
||||||
of cpuI386: defineSymbol("x86")
|
|
||||||
of cpuIa64: defineSymbol("itanium")
|
|
||||||
of cpuAmd64: defineSymbol("x8664")
|
|
||||||
else: discard
|
|
||||||
case targetOS
|
|
||||||
of osDos:
|
|
||||||
defineSymbol("msdos")
|
|
||||||
of osWindows:
|
|
||||||
defineSymbol("mswindows")
|
|
||||||
defineSymbol("win32")
|
|
||||||
of osLinux, osMorphos, osSkyos, osIrix, osPalmos, osQnx, osAtari, osAix,
|
|
||||||
osHaiku, osVxWorks:
|
|
||||||
# these are all 'unix-like'
|
|
||||||
defineSymbol("unix")
|
|
||||||
defineSymbol("posix")
|
|
||||||
of osSolaris:
|
|
||||||
defineSymbol("sunos")
|
|
||||||
defineSymbol("unix")
|
|
||||||
defineSymbol("posix")
|
|
||||||
of osNetbsd, osFreebsd, osOpenbsd:
|
|
||||||
defineSymbol("unix")
|
|
||||||
defineSymbol("bsd")
|
|
||||||
defineSymbol("posix")
|
|
||||||
of osMacos:
|
|
||||||
defineSymbol("macintosh")
|
|
||||||
of osMacosx:
|
|
||||||
defineSymbol("macintosh")
|
|
||||||
defineSymbol("unix")
|
|
||||||
defineSymbol("posix")
|
|
||||||
else: discard
|
|
||||||
defineSymbol("cpu" & $CPU[targetCPU].bit)
|
|
||||||
defineSymbol(normalize(EndianToStr[CPU[targetCPU].endian]))
|
|
||||||
defineSymbol(CPU[targetCPU].name)
|
|
||||||
defineSymbol(platform.OS[targetOS].name)
|
|
||||||
declareSymbol("emulatedthreadvars")
|
|
||||||
if platform.OS[targetOS].props.contains(ospLacksThreadVars):
|
|
||||||
defineSymbol("emulatedthreadvars")
|
|
||||||
case targetOS
|
|
||||||
of osSolaris, osNetbsd, osFreebsd, osOpenbsd, osMacosx:
|
|
||||||
defineSymbol("nimRawSetjmp")
|
|
||||||
else: discard
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue