Certain filename extentions depend on target os

This commit is contained in:
Sasha Koshka 2024-03-27 12:40:45 -04:00
parent 0404202691
commit cd396952f2
2 changed files with 23 additions and 15 deletions

View File

@ -35,7 +35,9 @@ func (this *Compiler) CompileUnit (address entity.Address) error {
// extension of the input. if that isn't specified, default to .o
if this.Filetype == FiletypeUnknown {
var ok bool
this.Filetype, ok = FiletypeFromExt(filepath.Ext(this.Output))
this.Filetype, ok = FiletypeFromExt (
*this.Target,
filepath.Ext(this.Output))
if !ok {
this.Filetype = FiletypeObject
}
@ -46,7 +48,7 @@ func (this *Compiler) CompileUnit (address entity.Address) error {
if this.Output == "" {
nickname, ok := entity.Address(path).Nickname()
if !ok { nickname = "output" }
this.Output = this.Filetype.Extend(nickname)
this.Output = this.Filetype.Extend(*this.Target, nickname)
}
// do something based on the output extension

View File

@ -1,6 +1,7 @@
package compiler
import "fmt"
import "git.tebibyte.media/fspl/fspl/generator"
// Filetype represents an output filetype.
type Filetype int; const (
@ -24,15 +25,13 @@ func FiletypeFromString (ext string) (Filetype, bool) {
}
// FiletypeFromExt returns a filetype based on the given filename extension.
func FiletypeFromExt (ext string) (Filetype, bool) {
// FIXME some of these are platform dependent, for example on windows
// FiletypeLib would be .dll
func FiletypeFromExt (target generator.Target, ext string) (Filetype, bool) {
switch ext {
case ".o": return FiletypeObject, true
case ".so": 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
default: return FiletypeUnknown, false
}
}
@ -49,12 +48,11 @@ func (filetype Filetype) String () string {
}
// Ext returns the standard filename extension of the filetype.
func (filetype Filetype) Ext () string {
// FIXME again, some of these are platform dependent
func (filetype Filetype) Ext (target generator.Target) string {
switch filetype {
case FiletypeUnknown: return ""
case FiletypeObject: return ".o"
case FiletypeLibrary: return ".so"
case FiletypeLibrary: return targetSoExt(target)
case FiletypeAssembly: return ".s"
case FiletypeIR: return ".ll"
default: return ""
@ -62,6 +60,14 @@ func (filetype Filetype) Ext () string {
}
// Extend adds the extension of the filetype onto the specified path.
func (filetype Filetype) Extend (path string) string {
return path + filetype.Ext()
func (filetype Filetype) Extend (target generator.Target, path string) string {
return path + filetype.Ext(target)
}
func targetSoExt (target generator.Target) string {
// TODO: more research is required here
switch target.OS {
case "windows": return ".dll"
default: return ".so"
}
}