TInfoCC = tuple[name: string, objExt: string, optSpeed: string, optSize: string,
compilerExe: string, cppCompiler: string, compileTmpl: string,
buildGui: string, buildDll: string, buildLib: string,
linkerExe: string, linkTmpl: string, includeCmd: string,
linkDirCmd: string, linkLibCmd: string, debug: string,
pic: string, asmStmtFrmt: string, structStmtFmt: string,
produceAsm: string, cppXsupport: string, props: TInfoCCProps]CC: array[succ(low(TSystemCC)) .. high(TSystemCC), TInfoCC] = [("gcc", "o",
" -O3 -fno-ident", " -Os -fno-ident", "gcc", "g++",
"-c $options $include -o $objfile $file", " -mwindows", " -shared",
"ar rcs $libfile $objfiles", "",
"$buildgui $builddll -o $exefile $objfiles $options", " -I", " -L", " -l$1",
"", "-fPIC", "__asm__($1);$n", "$1 $3 $2 ",
"-Wa,-acdl=$asmfile -g -fverbose-asm -masm=intel",
"-std=gnu++17 -funsigned-char", {hasSwitchRange, hasComputedGoto, hasCpp,
hasGcGuard, hasGnuAsm, hasAttribute,
hasBuiltinUnreachable}), ("switch_gcc",
"o", " -O3 ", " -Os ", "aarch64-none-elf-gcc", "aarch64-none-elf-g++",
"-w -MMD -MP -MF $dfile -c $options $include -o $objfile $file",
" -mwindows", " -shared", "aarch64-none-elf-gcc-ar rcs $libfile $objfiles",
"aarch64-none-elf-gcc",
"$buildgui $builddll -Wl,-Map,$mapfile -o $exefile $objfiles $options",
" -I", " -L", " -l$1", "", "-fPIE", "asm($1);$n", "$1 $3 $2 ",
"-Wa,-acdl=$asmfile -g -fverbose-asm -masm=intel",
"-std=gnu++17 -funsigned-char", {hasSwitchRange, hasComputedGoto, hasCpp,
hasGcGuard, hasGnuAsm, hasAttribute,
hasBuiltinUnreachable}), ("llvm_gcc", "o",
" -O3 -fno-ident", " -Os -fno-ident", "llvm-gcc", "llvm-g++",
"-c $options $include -o $objfile $file", " -mwindows", " -shared",
"llvm-ar rcs $libfile $objfiles", "",
"$buildgui $builddll -o $exefile $objfiles $options", " -I", " -L", " -l$1",
"", "-fPIC", "__asm__($1);$n", "$1 $3 $2 ",
"-Wa,-acdl=$asmfile -g -fverbose-asm -masm=intel",
"-std=gnu++17 -funsigned-char", {hasSwitchRange, hasComputedGoto, hasCpp,
hasGcGuard, hasGnuAsm, hasAttribute,
hasBuiltinUnreachable}), ("clang", "o",
" -O3 -fno-ident", " -Os -fno-ident", "clang", "clang++",
"-c $options $include -o $objfile $file", " -mwindows", " -shared",
"llvm-ar rcs $libfile $objfiles", "",
"$buildgui $builddll -o $exefile $objfiles $options", " -I", " -L", " -l$1",
"", "-fPIC", "__asm__($1);$n", "$1 $3 $2 ",
"-Wa,-acdl=$asmfile -g -fverbose-asm -masm=intel",
"-std=gnu++17 -funsigned-char", {hasSwitchRange, hasComputedGoto, hasCpp,
hasGcGuard, hasGnuAsm, hasAttribute,
hasBuiltinUnreachable}), ("bcc", "obj",
" -O3 -6 ", " -O1 -6 ", "bcc32c", "cpp32c",
"-c $options $include -o$objfile $file", " -tW", " -tWD", "", "bcc32",
"$options $buildgui $builddll -e$exefile $objfiles", " -I", "", "", "", "",
"__asm{$n$1$n}$n", "$1 $2", "", "",
{hasSwitchRange, hasComputedGoto, hasCpp, hasGcGuard, hasAttribute}), (
"vcc", "obj", " /Ogityb2 ", " /O1 ", "cl", "cl",
"/c$vccplatform $options $include /nologo /Fo$objfile $file",
" /SUBSYSTEM:WINDOWS user32.lib ", " /LD",
"vccexe --command:lib$vccplatform /nologo /OUT:$libfile $objfiles", "cl",
"$builddll$vccplatform /Fe$exefile $objfiles $buildgui /nologo $options",
" /I", " /LIBPATH:", " $1.lib", " /RTC1 /Z7 ", "", "__asm{$n$1$n}$n",
"$3$n$1 $2", "/Fa$asmfile", "", {hasCpp, hasAssume, hasDeclspec}), ("tcc",
"o", "", "", "tcc", "", "-c $options $include -o $objfile $file",
"-Wl,-subsystem=gui", " -shared", "", "tcc",
"-o $exefile $options $buildgui $builddll $objfiles", " -I", "", "", " -g ",
"", "asm($1);$n", "$1 $2",
"-Wa,-acdl=$asmfile -g -fverbose-asm -masm=intel", "",
{hasSwitchRange, hasComputedGoto, hasGnuAsm}), ("env", "o", " -O3 ",
" -O1 ", "", "", "-c $ccenvflags $options $include -o $objfile $file", "",
" -shared ", "", "", "-o $exefile $buildgui $builddll $objfiles $options",
" -I", "", "", "", "", "__asm{$n$1$n}$n", "$1 $2", "", "", {hasGnuAsm}), (
"icl", "obj", " /Ogityb2 ", " /O1 ", "icl", "cl",
"/c$vccplatform $options $include /nologo /Fo$objfile $file",
" /SUBSYSTEM:WINDOWS user32.lib ", " /LD",
"vccexe --command:lib$vccplatform /nologo /OUT:$libfile $objfiles", "icl",
"$builddll$vccplatform /Fe$exefile $objfiles $buildgui /nologo $options",
" /I", " /LIBPATH:", " $1.lib", " /RTC1 /Z7 ", "", "__asm{$n$1$n}$n",
"$3$n$1 $2", "/Fa$asmfile", "", {hasCpp, hasAssume, hasDeclspec}), ("icc",
"o", " -O3 -fno-ident", " -Os -fno-ident", "icc", "g++",
"-c $options $include -o $objfile $file", " -mwindows", " -shared",
"ar rcs $libfile $objfiles", "icc",
"$buildgui $builddll -o $exefile $objfiles $options", " -I", " -L", " -l$1",
"", "-fPIC", "__asm__($1);$n", "$1 $3 $2 ",
"-Wa,-acdl=$asmfile -g -fverbose-asm -masm=intel",
"-std=gnu++17 -funsigned-char", {hasSwitchRange, hasComputedGoto, hasCpp,
hasGcGuard, hasGnuAsm, hasAttribute,
hasBuiltinUnreachable}), ("clang_cl",
"obj", " /Ogityb2 ", " /O1 ", "clang-cl", "clang-cl",
"/c$vccplatform $options $include /nologo /Fo$objfile $file",
" /SUBSYSTEM:WINDOWS user32.lib ", " /LD",
"vccexe --command:lib$vccplatform /nologo /OUT:$libfile $objfiles",
"clang-cl", "-fuse-ld=lld $builddll$vccplatform /Fe$exefile $objfiles $buildgui /nologo $options",
" /I", " /LIBPATH:", " $1.lib", " /RTC1 /Z7 ", "", "__asm{$n$1$n}$n",
"$3$n$1 $2", "/Fa$asmfile", "", {hasCpp, hasAssume, hasDeclspec}), ("hipcc",
"o", " -O3 -fno-ident", " -Os -fno-ident", "hipcc", "hipcc",
"-c $options $include -o $objfile $file", " -mwindows", " -shared",
"llvm-ar rcs $libfile $objfiles", "",
"$buildgui $builddll -o $exefile $objfiles $options", " -I", " -L", " -l$1",
"", "-fPIC", "__asm__($1);$n", "$1 $3 $2 ",
"-Wa,-acdl=$asmfile -g -fverbose-asm -masm=intel",
"-std=gnu++17 -funsigned-char", {hasSwitchRange, hasComputedGoto, hasCpp,
hasGcGuard, hasGnuAsm, hasAttribute,
hasBuiltinUnreachable}), ("nvcc", "o",
" -O3 -fno-ident", " -Os -fno-ident", "nvcc", "nvcc",
"-c -x cu -Xcompiler=\"$options\" $include -o $objfile $file", " -mwindows",
" -shared", "ar rcs $libfile $objfiles", "",
"$buildgui $builddll -o $exefile $objfiles -Xcompiler=\"$options\"", " -I",
" -L", " -l$1", "", "-fPIC", "__asm__($1);$n", "$1 $3 $2 ",
"-Wa,-acdl=$asmfile -g -fverbose-asm -masm=intel",
"-std=gnu++17 -funsigned-char", {hasSwitchRange, hasComputedGoto, hasCpp,
hasGcGuard, hasGnuAsm, hasAttribute,
hasBuiltinUnreachable})]proc getCompileCFileCmd(conf: ConfigRef; cfile: Cfile; isMainFile = false;
produceOutput = false): string {....raises: [Exception,
ValueError, KeyError, OSError, IOError, ERecoverableError], tags: [
ReadEnvEffect, RootEffect, ReadDirEffect, WriteIOEffect, ReadIOEffect,
WriteDirEffect], forbids: [].}proc runJsonBuildInstructions(conf: ConfigRef; jsonFile: AbsoluteFile) {....raises: [
OSError, IOError, Exception, ValueError, KeyError, ERecoverableError], tags: [
RootEffect, ReadIOEffect, WriteIOEffect, WriteDirEffect, ReadDirEffect,
ReadEnvEffect, ExecIOEffect, TimeEffect], forbids: [].}
© 2006–2024 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/compiler/extccomp.html