Add an executable filetype

This commit is contained in:
Sasha Koshka 2024-03-27 12:52:20 -04:00
parent cd396952f2
commit 2caed5b4ae
1 changed files with 35 additions and 22 deletions

View File

@ -10,51 +10,56 @@ type Filetype int; const (
FiletypeLibrary
FiletypeAssembly
FiletypeIR
FiletypeExecutable
)
// FiletypeFromString returns a filetype based on the given name.
func FiletypeFromString (ext string) (Filetype, bool) {
switch ext {
case "": return FiletypeUnknown, true
case "obj": return FiletypeObject, true
case "lib": return FiletypeLibrary, true
case "asm": return FiletypeAssembly, true
case "ir": return FiletypeIR, true
default: return FiletypeUnknown, false
case "": return FiletypeUnknown, true
case "obj": return FiletypeObject, true
case "lib": return FiletypeLibrary, true
case "asm": return FiletypeAssembly, true
case "ir": return FiletypeIR, true
case "exe": return FiletypeExecutable, true
default: return FiletypeUnknown, false
}
}
// FiletypeFromExt returns a filetype based on the given filename extension.
func FiletypeFromExt (target generator.Target, ext string) (Filetype, bool) {
switch ext {
case ".o": return FiletypeObject, true
case targetSoExt(target): return FiletypeLibrary, true
case ".s": return FiletypeAssembly, true
case ".ll": return FiletypeIR, true
default: return FiletypeUnknown, false
case ".o": return FiletypeObject, true
case targetSoExt(target): return FiletypeLibrary, true
case ".s": return FiletypeAssembly, true
case ".ll": return FiletypeIR, true
case targetExeExt(target): return FiletypeExecutable, true
default: return FiletypeUnknown, false
}
}
// String returns a string representation of the filetype.
func (filetype Filetype) String () string {
switch filetype {
case FiletypeUnknown: return ""
case FiletypeObject: return "obj"
case FiletypeLibrary: return "lib"
case FiletypeAssembly: return "asm"
case FiletypeIR: return "ir"
default: return fmt.Sprintf("Filetype(%d)", filetype)
case FiletypeUnknown: return ""
case FiletypeObject: return "obj"
case FiletypeLibrary: return "lib"
case FiletypeAssembly: return "asm"
case FiletypeIR: return "ir"
case FiletypeExecutable: return "exe"
default: return fmt.Sprintf("Filetype(%d)", filetype)
}
}
// Ext returns the standard filename extension of the filetype.
func (filetype Filetype) Ext (target generator.Target) string {
switch filetype {
case FiletypeUnknown: return ""
case FiletypeObject: return ".o"
case FiletypeLibrary: return targetSoExt(target)
case FiletypeAssembly: return ".s"
case FiletypeIR: return ".ll"
case FiletypeUnknown: return ""
case FiletypeObject: return ".o"
case FiletypeLibrary: return targetSoExt(target)
case FiletypeAssembly: return ".s"
case FiletypeIR: return ".ll"
case FiletypeExecutable: return targetExeExt(target)
default: return ""
}
}
@ -71,3 +76,11 @@ func targetSoExt (target generator.Target) string {
default: return ".so"
}
}
func targetExeExt (target generator.Target) string {
// TODO: more research is required here
switch target.OS {
case "windows": return ".exe"
default: return ""
}
}