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