Merge branch 'master' of github.com:Araq/Nimrod
This commit is contained in:
commit
693ed29345
2 changed files with 40 additions and 55 deletions
|
|
@ -231,21 +231,6 @@ const # the used compiler
|
||||||
var cExt*: string = "c" # extension of generated C/C++ files
|
var cExt*: string = "c" # extension of generated C/C++ files
|
||||||
# (can be changed to .cpp later)
|
# (can be changed to .cpp later)
|
||||||
|
|
||||||
proc completeCFilePath*(cfile: string, createSubDir: bool = true): string
|
|
||||||
|
|
||||||
proc getCompileCFileCmd*(cfilename: string, isExternal: bool = false): string
|
|
||||||
proc addFileToCompile*(filename: string)
|
|
||||||
proc addExternalFileToCompile*(filename: string)
|
|
||||||
proc addFileToLink*(filename: string)
|
|
||||||
proc addCompileOption*(option: string)
|
|
||||||
proc addLinkOption*(option: string)
|
|
||||||
proc toObjFile*(filenameWithoutExt: string): string
|
|
||||||
proc CallCCompiler*(projectFile: string)
|
|
||||||
proc execExternalProgram*(cmd: string)
|
|
||||||
proc NameToCC*(name: string): TSystemCC
|
|
||||||
proc initVars*()
|
|
||||||
proc setCC*(ccname: string)
|
|
||||||
proc writeMapping*(gSymbolMapping: PRope)
|
|
||||||
# implementation
|
# implementation
|
||||||
|
|
||||||
var
|
var
|
||||||
|
|
@ -254,7 +239,13 @@ var
|
||||||
compileOptions: string = ""
|
compileOptions: string = ""
|
||||||
ccompilerpath: string = ""
|
ccompilerpath: string = ""
|
||||||
|
|
||||||
proc setCC(ccname: string) =
|
proc NameToCC*(name: string): TSystemCC =
|
||||||
|
for i in countup(succ(ccNone), high(TSystemCC)):
|
||||||
|
if cmpIgnoreStyle(name, CC[i].name) == 0:
|
||||||
|
return i
|
||||||
|
result = ccNone
|
||||||
|
|
||||||
|
proc setCC*(ccname: string) =
|
||||||
ccompiler = nameToCC(ccname)
|
ccompiler = nameToCC(ccname)
|
||||||
if ccompiler == ccNone: rawMessage(errUnknownCcompiler, ccname)
|
if ccompiler == ccNone: rawMessage(errUnknownCcompiler, ccname)
|
||||||
compileOptions = getConfigVar(CC[ccompiler].name & ".options.always")
|
compileOptions = getConfigVar(CC[ccompiler].name & ".options.always")
|
||||||
|
|
@ -263,7 +254,18 @@ proc setCC(ccname: string) =
|
||||||
for i in countup(low(CC), high(CC)): undefSymbol(CC[i].name)
|
for i in countup(low(CC), high(CC)): undefSymbol(CC[i].name)
|
||||||
defineSymbol(CC[ccompiler].name)
|
defineSymbol(CC[ccompiler].name)
|
||||||
|
|
||||||
proc initVars() =
|
proc addOpt(dest: var string, src: string) =
|
||||||
|
if len(dest) == 0 or dest[len(dest) - 1 + 0] != ' ': add(dest, " ")
|
||||||
|
add(dest, src)
|
||||||
|
|
||||||
|
proc addLinkOption*(option: string) =
|
||||||
|
if find(linkOptions, option, 0) < 0: addOpt(linkOptions, option)
|
||||||
|
|
||||||
|
proc addCompileOption*(option: string) =
|
||||||
|
if strutils.find(compileOptions, option, 0) < 0:
|
||||||
|
addOpt(compileOptions, option)
|
||||||
|
|
||||||
|
proc initVars*() =
|
||||||
# we need to define the symbol here, because ``CC`` may have never been set!
|
# we need to define the symbol here, because ``CC`` may have never been set!
|
||||||
for i in countup(low(CC), high(CC)): undefSymbol(CC[i].name)
|
for i in countup(low(CC), high(CC)): undefSymbol(CC[i].name)
|
||||||
defineSymbol(CC[ccompiler].name)
|
defineSymbol(CC[ccompiler].name)
|
||||||
|
|
@ -272,32 +274,15 @@ proc initVars() =
|
||||||
addLinkOption(getConfigVar(CC[ccompiler].name & ".options.linker"))
|
addLinkOption(getConfigVar(CC[ccompiler].name & ".options.linker"))
|
||||||
if len(ccompilerPath) == 0:
|
if len(ccompilerPath) == 0:
|
||||||
ccompilerpath = getConfigVar(CC[ccompiler].name & ".path")
|
ccompilerpath = getConfigVar(CC[ccompiler].name & ".path")
|
||||||
|
|
||||||
proc completeCFilePath(cfile: string, createSubDir: bool = true): string =
|
proc completeCFilePath*(cfile: string, createSubDir: bool = true): string =
|
||||||
result = completeGeneratedFilePath(cfile, createSubDir)
|
result = completeGeneratedFilePath(cfile, createSubDir)
|
||||||
|
|
||||||
proc NameToCC(name: string): TSystemCC =
|
proc toObjFile*(filenameWithoutExt: string): string =
|
||||||
for i in countup(succ(ccNone), high(TSystemCC)):
|
# Object file for compilation
|
||||||
if cmpIgnoreStyle(name, CC[i].name) == 0:
|
result = changeFileExt(filenameWithoutExt, cc[ccompiler].objExt)
|
||||||
return i
|
|
||||||
result = ccNone
|
|
||||||
|
|
||||||
proc addOpt(dest: var string, src: string) =
|
proc addFileToCompile*(filename: string) =
|
||||||
if len(dest) == 0 or dest[len(dest) - 1 + 0] != ' ': add(dest, " ")
|
|
||||||
add(dest, src)
|
|
||||||
|
|
||||||
proc addCompileOption(option: string) =
|
|
||||||
if strutils.find(compileOptions, option, 0) < 0:
|
|
||||||
addOpt(compileOptions, option)
|
|
||||||
|
|
||||||
proc addLinkOption(option: string) =
|
|
||||||
if find(linkOptions, option, 0) < 0: addOpt(linkOptions, option)
|
|
||||||
|
|
||||||
proc toObjFile(filenameWithoutExt: string): string =
|
|
||||||
# BUGFIX: changeFileExt is wrong, use addFileExt!
|
|
||||||
result = addFileExt(filenameWithoutExt, cc[ccompiler].objExt)
|
|
||||||
|
|
||||||
proc addFileToCompile(filename: string) =
|
|
||||||
appendStr(toCompile, filename)
|
appendStr(toCompile, filename)
|
||||||
|
|
||||||
proc footprint(filename: string): TCrc32 =
|
proc footprint(filename: string): TCrc32 =
|
||||||
|
|
@ -323,18 +308,18 @@ proc externalFileChanged(filename: string): bool =
|
||||||
f.writeln($currentCrc)
|
f.writeln($currentCrc)
|
||||||
close(f)
|
close(f)
|
||||||
|
|
||||||
proc addExternalFileToCompile(filename: string) =
|
proc addExternalFileToCompile*(filename: string) =
|
||||||
if optForceFullMake in gGlobalOptions or externalFileChanged(filename):
|
if optForceFullMake in gGlobalOptions or externalFileChanged(filename):
|
||||||
appendStr(externalToCompile, changeFileExt(filename, ""))
|
appendStr(externalToCompile, filename)
|
||||||
|
|
||||||
proc addFileToLink(filename: string) =
|
proc addFileToLink*(filename: string) =
|
||||||
prependStr(toLink, filename)
|
prependStr(toLink, filename)
|
||||||
# BUGFIX: was ``appendStr``
|
# BUGFIX: was ``appendStr``
|
||||||
|
|
||||||
proc execExternalProgram(cmd: string) =
|
proc execExternalProgram*(cmd: string) =
|
||||||
if (optListCmd in gGlobalOptions) or (gVerbosity > 0): MessageOut(cmd)
|
if (optListCmd in gGlobalOptions) or (gVerbosity > 0): MessageOut(cmd)
|
||||||
if execCmd(cmd) != 0: rawMessage(errExecutionOfProgramFailed, "")
|
if execCmd(cmd) != 0: rawMessage(errExecutionOfProgramFailed, "")
|
||||||
|
|
||||||
proc generateScript(projectFile: string, script: PRope) =
|
proc generateScript(projectFile: string, script: PRope) =
|
||||||
var (dir, name, ext) = splitFile(projectFile)
|
var (dir, name, ext) = splitFile(projectFile)
|
||||||
WriteRope(script, dir / addFileExt("compile_" & name,
|
WriteRope(script, dir / addFileExt("compile_" & name,
|
||||||
|
|
@ -344,24 +329,24 @@ proc getOptSpeed(c: TSystemCC): string =
|
||||||
result = getConfigVar(cc[c].name & ".options.speed")
|
result = getConfigVar(cc[c].name & ".options.speed")
|
||||||
if result == "":
|
if result == "":
|
||||||
result = cc[c].optSpeed # use default settings from this file
|
result = cc[c].optSpeed # use default settings from this file
|
||||||
|
|
||||||
proc getDebug(c: TSystemCC): string =
|
proc getDebug(c: TSystemCC): string =
|
||||||
result = getConfigVar(cc[c].name & ".options.debug")
|
result = getConfigVar(cc[c].name & ".options.debug")
|
||||||
if result == "":
|
if result == "":
|
||||||
result = cc[c].debug # use default settings from this file
|
result = cc[c].debug # use default settings from this file
|
||||||
|
|
||||||
proc getOptSize(c: TSystemCC): string =
|
proc getOptSize(c: TSystemCC): string =
|
||||||
result = getConfigVar(cc[c].name & ".options.size")
|
result = getConfigVar(cc[c].name & ".options.size")
|
||||||
if result == "":
|
if result == "":
|
||||||
result = cc[c].optSize # use default settings from this file
|
result = cc[c].optSize # use default settings from this file
|
||||||
|
|
||||||
const
|
const
|
||||||
specialFileA = 42
|
specialFileA = 42
|
||||||
specialFileB = 42
|
specialFileB = 42
|
||||||
|
|
||||||
var fileCounter: int
|
var fileCounter: int
|
||||||
|
|
||||||
proc getCompileCFileCmd(cfilename: string, isExternal: bool = false): string =
|
proc getCompileCFileCmd*(cfilename: string, isExternal: bool = false): string =
|
||||||
var
|
var
|
||||||
cfile, objfile, options, includeCmd, compilePattern, key, trunk, exe: string
|
cfile, objfile, options, includeCmd, compilePattern, key, trunk, exe: string
|
||||||
var c = ccompiler
|
var c = ccompiler
|
||||||
|
|
@ -427,7 +412,7 @@ proc CompileCFile(list: TLinkedList, script: var PRope, cmds: var TStringSeq,
|
||||||
app(script, tnl)
|
app(script, tnl)
|
||||||
it = PStrEntry(it.next)
|
it = PStrEntry(it.next)
|
||||||
|
|
||||||
proc CallCCompiler(projectfile: string) =
|
proc CallCCompiler*(projectfile: string) =
|
||||||
var
|
var
|
||||||
linkCmd, buildgui, builddll: string
|
linkCmd, buildgui, builddll: string
|
||||||
if gGlobalOptions * {optCompileOnly, optGenScript} == {optCompileOnly}:
|
if gGlobalOptions * {optCompileOnly, optGenScript} == {optCompileOnly}:
|
||||||
|
|
@ -475,9 +460,9 @@ proc CallCCompiler(projectfile: string) =
|
||||||
while it != nil:
|
while it != nil:
|
||||||
add(objfiles, ' ')
|
add(objfiles, ' ')
|
||||||
if targetOS == platform.hostOS:
|
if targetOS == platform.hostOS:
|
||||||
add(objfiles, quoteIfContainsWhite(toObjfile(it.data)))
|
add(objfiles, quoteIfContainsWhite(addFileExt(it.data, cc[ccompiler].objExt)))
|
||||||
else:
|
else:
|
||||||
add(objfiles, quoteIfContainsWhite(toObjfile(extractFileName(it.data))))
|
add(objfiles, quoteIfContainsWhite(addFileExt(it.data, cc[ccompiler].objExt)))
|
||||||
it = PStrEntry(it.next)
|
it = PStrEntry(it.next)
|
||||||
linkCmd = quoteIfContainsWhite(linkCmd % ["builddll", builddll,
|
linkCmd = quoteIfContainsWhite(linkCmd % ["builddll", builddll,
|
||||||
"buildgui", buildgui, "options", linkOptions, "objfiles", objfiles,
|
"buildgui", buildgui, "options", linkOptions, "objfiles", objfiles,
|
||||||
|
|
@ -502,7 +487,7 @@ proc genMappingFiles(list: TLinkedList): PRope =
|
||||||
appf(result, "--file:r\"$1\"$n", [toRope(AddFileExt(it.data, cExt))])
|
appf(result, "--file:r\"$1\"$n", [toRope(AddFileExt(it.data, cExt))])
|
||||||
it = PStrEntry(it.next)
|
it = PStrEntry(it.next)
|
||||||
|
|
||||||
proc writeMapping(gSymbolMapping: PRope) =
|
proc writeMapping*(gSymbolMapping: PRope) =
|
||||||
if optGenMapping notin gGlobalOptions: return
|
if optGenMapping notin gGlobalOptions: return
|
||||||
var code = toRope("[C_Files]\n")
|
var code = toRope("[C_Files]\n")
|
||||||
app(code, genMappingFiles(toCompile))
|
app(code, genMappingFiles(toCompile))
|
||||||
|
|
|
||||||
|
|
@ -305,7 +305,7 @@ proc processCompile(c: PContext, n: PNode) =
|
||||||
|
|
||||||
proc processCommonLink(c: PContext, n: PNode, feature: TLinkFeature) =
|
proc processCommonLink(c: PContext, n: PNode, feature: TLinkFeature) =
|
||||||
var f = expectStrLit(c, n)
|
var f = expectStrLit(c, n)
|
||||||
if splitFile(f).ext == "": f = toObjFile(f)
|
if splitFile(f).ext == "": f = addFileExt(f, cc[ccompiler].objExt)
|
||||||
var found = findFile(f)
|
var found = findFile(f)
|
||||||
if found == "": found = f # use the default
|
if found == "": found = f # use the default
|
||||||
case feature
|
case feature
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue