Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 36 additions & 2 deletions src/compiler/fb.bas
Original file line number Diff line number Diff line change
Expand Up @@ -233,6 +233,38 @@ dim shared as FBTARGET targetinfo(0 to FB_COMPTARGETS-1) = _
0 or FB_TARGETOPT_UNIX _
or FB_TARGETOPT_CALLEEPOPSHIDDENPTR _
or FB_TARGETOPT_RETURNINREGS _
), _
( _
@"amiga", _
FB_DATATYPE_ULONG, _
FB_FUNCMODE_CDECL, _
FB_FUNCMODE_STDCALL_MS, _
0 or FB_TARGETOPT_CALLEEPOPSHIDDENPTR _
), _
( _
@"aros", _
FB_DATATYPE_ULONG, _
FB_FUNCMODE_CDECL, _
FB_FUNCMODE_STDCALL_MS, _
0 or FB_TARGETOPT_UNIX _
or FB_TARGETOPT_CALLEEPOPSHIDDENPTR _
or FB_TARGETOPT_ELF _
), _
( _
@"morphos", _
FB_DATATYPE_ULONG, _
FB_FUNCMODE_CDECL, _
FB_FUNCMODE_STDCALL_MS, _
0 or FB_TARGETOPT_CALLEEPOPSHIDDENPTR _
or FB_TARGETOPT_ELF _
), _
( _
@"amigaos4", _
FB_DATATYPE_ULONG, _
FB_FUNCMODE_CDECL, _
FB_FUNCMODE_STDCALL_MS, _
0 or FB_TARGETOPT_CALLEEPOPSHIDDENPTR _
or FB_TARGETOPT_ELF _
) _
}

Expand All @@ -250,7 +282,8 @@ dim shared as FBCPUFAMILYINFO cpufamilyinfo(0 to FB_CPUFAMILY__COUNT-1) = _
(@"powerpc" , FB_DEFAULT_CPUTYPE_PPC ), _
(@"powerpc64" , FB_DEFAULT_CPUTYPE_PPC64 ), _
(@"powerpc64le", FB_DEFAULT_CPUTYPE_PPC64LE), _
(@"asmjs" , FB_DEFAULT_CPUTYPE_ASMJS ) _
(@"asmjs" , FB_DEFAULT_CPUTYPE_ASMJS ), _
(@"m68k" , FB_DEFAULT_CPUTYPE_M68K ) _
}

type FBCPUTYPEINFO
Expand Down Expand Up @@ -286,7 +319,8 @@ dim shared as FBCPUTYPEINFO cputypeinfo(0 to FB_CPUTYPE__COUNT-1) = _
( NULL , @"powerpc" , FB_CPUFAMILY_PPC , 32, TRUE ), _ '' FB_CPUTYPE_PPC
( NULL , @"powerpc64" , FB_CPUFAMILY_PPC64 , 64, TRUE ), _ '' FB_CPUTYPE_PPC64
( NULL , @"powerpc64le" , FB_CPUFAMILY_PPC64LE, 64, FALSE ), _ '' FB_CPUTYPE_PPC64LE
( NULL , @"asmjs" , FB_CPUFAMILY_ASMJS , 32, FALSE ) _ '' FB_CPUTYPE_ASMJS
( NULL , @"asmjs" , FB_CPUFAMILY_ASMJS , 32, FALSE ), _ '' FB_CPUTYPE_ASMJS
( @"68020" , @"m68k" , FB_CPUFAMILY_M68K , 32, TRUE ) _ '' FB_CPUTYPE_M68K
}

''::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Expand Down
7 changes: 7 additions & 0 deletions src/compiler/fb.bi
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,7 @@ enum FB_CPUTYPE
FB_CPUTYPE_PPC64
FB_CPUTYPE_PPC64LE
FB_CPUTYPE_ASMJS
FB_CPUTYPE_M68K
FB_CPUTYPE__COUNT
end enum

Expand All @@ -194,6 +195,7 @@ enum
FB_CPUFAMILY_PPC64
FB_CPUFAMILY_PPC64LE
FB_CPUFAMILY_ASMJS
FB_CPUFAMILY_M68K
FB_CPUFAMILY__COUNT
end enum

Expand Down Expand Up @@ -247,6 +249,10 @@ enum FB_COMPTARGET
FB_COMPTARGET_DARWIN
FB_COMPTARGET_NETBSD
FB_COMPTARGET_JS
FB_COMPTARGET_AMIGA
FB_COMPTARGET_AROS
FB_COMPTARGET_MORPHOS
FB_COMPTARGET_AMIGAOS4
FB_COMPTARGETS
end enum

Expand Down Expand Up @@ -464,6 +470,7 @@ const FB_DEFAULT_CPUTYPE_PPC = FB_CPUTYPE_PPC
const FB_DEFAULT_CPUTYPE_PPC64 = FB_CPUTYPE_PPC64
const FB_DEFAULT_CPUTYPE_PPC64LE = FB_CPUTYPE_PPC64LE
const FB_DEFAULT_CPUTYPE_ASMJS = FB_CPUTYPE_ASMJS
const FB_DEFAULT_CPUTYPE_M68K = FB_CPUTYPE_M68K

'' default 32 and 64 bit CPU's (based on defaults above)
#ifdef __FB_ARM__
Expand Down
87 changes: 75 additions & 12 deletions src/compiler/fbc.bas
Original file line number Diff line number Diff line change
Expand Up @@ -305,10 +305,10 @@ private function hGet1stOutputLineFromCommand( byref cmd as string ) as string
end if

dim ln as string
input #f, ln
line input #f, ln

close f
return ln
return trim( ln )
end function

'' Pass some arguments to gcc/clang and read the results. Returns an empty string on
Expand Down Expand Up @@ -840,7 +840,14 @@ private function hLinkFiles( ) as integer
case FB_CPUFAMILY_ARM
'' fixme: this is clearly too specific
ldcline += "-arch armv6 "
case FB_CPUFAMILY_AARCH64
ldcline += "-arch arm64 "
Comment on lines +843 to +844
end select

'' Amiga-like targets: no special ld emulation flags needed
case FB_COMPTARGET_AMIGA, FB_COMPTARGET_AROS, _
FB_COMPTARGET_MORPHOS, FB_COMPTARGET_AMIGAOS4

end select

'' Set executable name
Expand Down Expand Up @@ -1123,9 +1130,11 @@ private function hLinkFiles( ) as integer
wend
end scope

'' And the sysroot
'' And the sysroot (Darwin uses -syslibroot, handled separately)
if( len( fbc.sysroot ) ) then
ldcline += " --sysroot=" + fbc.sysroot
if( fbGetOption( FB_COMPOPT_TARGET ) <> FB_COMPTARGET_DARWIN ) then
ldcline += " --sysroot=" + fbc.sysroot
end if
end if

'' crt begin objects
Expand Down Expand Up @@ -1167,6 +1176,8 @@ private function hLinkFiles( ) as integer
FB_COMPTARGET_NETBSD, FB_COMPTARGET_DRAGONFLY, FB_COMPTARGET_SOLARIS

if( fbGetOption( FB_COMPOPT_OUTTYPE ) = FB_OUTTYPE_EXECUTABLE) then
'' Darwin doesn't need CRT startup objects on modern macOS
if (fbGetOption( FB_COMPOPT_TARGET ) <> FB_COMPTARGET_DARWIN) then
if( fbGetOption( FB_COMPOPT_PROFILE ) ) then
select case as const fbGetOption( FB_COMPOPT_TARGET )
case FB_COMPTARGET_OPENBSD, FB_COMPTARGET_NETBSD
Expand All @@ -1182,6 +1193,7 @@ private function hLinkFiles( ) as integer
ldcline += hFindLib( "crt1.o" )
end select
end if
end if
end if

if (fbGetOption( FB_COMPOPT_TARGET ) <> FB_COMPTARGET_DARWIN) then
Expand Down Expand Up @@ -1323,7 +1335,29 @@ private function hLinkFiles( ) as integer
end select

if( fbGetOption( FB_COMPOPT_TARGET ) = FB_COMPTARGET_DARWIN ) then
ldcline += " -macosx_version_min 10.4"
scope
'' Fallback SDK version for cross-compilation when xcrun is unavailable.
'' Overridden at runtime by xcrun --show-sdk-version on native macOS.
dim as string sdkver = "14.0"
dim as string sysroot
if( len( fbc.sysroot ) > 0 ) then
sysroot = fbc.sysroot
#ifdef __FB_DARWIN__
else
sysroot = hGet1stOutputLineFromCommand( "xcrun --show-sdk-path" )
dim as string v = hGet1stOutputLineFromCommand( "xcrun --show-sdk-version" )
if( len( v ) > 0 ) then sdkver = v
#endif
end if
if( fbGetCpuFamily( ) = FB_CPUFAMILY_AARCH64 ) then
ldcline += " -platform_version macos 11.0.0 " + sdkver
else
ldcline += " -platform_version macos 10.4.0 " + sdkver
end if
if( len( sysroot ) > 0 ) then
ldcline += " -syslibroot " + QUOTE + sysroot + QUOTE
end if
end scope
end if

'' This is required for 64-bit modules on *nix-y platforms
Expand All @@ -1332,8 +1366,7 @@ private function hLinkFiles( ) as integer
select case as const fbGetOption( FB_COMPOPT_TARGET )
case FB_COMPTARGET_LINUX, FB_COMPTARGET_FREEBSD, _
FB_COMPTARGET_OPENBSD, FB_COMPTARGET_NETBSD, _
FB_COMPTARGET_DRAGONFLY, FB_COMPTARGET_SOLARIS, _
FB_COMPTARGET_DARWIN
FB_COMPTARGET_DRAGONFLY, FB_COMPTARGET_SOLARIS
dim as long outtype = fbGetOption( FB_COMPOPT_OUTTYPE )
if outtype = FB_OUTTYPE_EXECUTABLE OrElse outtype = FB_OUTTYPE_DYNAMICLIB Then
dim as long cpufamily = fbGetCpuFamily( )
Expand Down Expand Up @@ -1656,7 +1689,11 @@ dim shared as FBGNUOSINFO gnuosmap(0 to ...) => _
(@"solaris" , FB_COMPTARGET_SOLARIS ), _
(@"netbsd" , FB_COMPTARGET_NETBSD ), _
(@"openbsd" , FB_COMPTARGET_OPENBSD ), _
(@"xbox" , FB_COMPTARGET_XBOX ) _
(@"xbox" , FB_COMPTARGET_XBOX ), _
(@"amigaos4" , FB_COMPTARGET_AMIGAOS4 ), _
(@"amigaos" , FB_COMPTARGET_AMIGA ), _
(@"aros" , FB_COMPTARGET_AROS ), _
(@"morphos" , FB_COMPTARGET_MORPHOS ) _
}

'' Architectures recognized when parsing GNU triplets (-target option)
Expand All @@ -1681,7 +1718,8 @@ dim shared as FBGNUARCHINFO gnuarchmap(0 to ...) => _
(@"ppc64 " , FB_DEFAULT_CPUTYPE_PPC64 ), _
(@"powerpc64" , FB_DEFAULT_CPUTYPE_PPC64 ), _
(@"ppc64le " , FB_DEFAULT_CPUTYPE_PPC64LE), _
(@"powerpc64le", FB_DEFAULT_CPUTYPE_PPC64LE) _
(@"powerpc64le", FB_DEFAULT_CPUTYPE_PPC64LE), _
(@"m68k" , FB_DEFAULT_CPUTYPE_M68K ) _
}

'' Identify OS (FB_COMPTARGET_*) and architecture (FB_CPUTYPE_*) in a GNU
Expand Down Expand Up @@ -1764,7 +1802,11 @@ dim shared as FBOSARCHINFO fbosarchmap(0 to ...) => _
(@"linux" , FB_COMPTARGET_LINUX , FB_DEFAULT_CPUTYPE ), _
(@"android", FB_COMPTARGET_ANDROID, FB_CPUTYPE_ARMV7A ), _
(@"netbsd" , FB_COMPTARGET_NETBSD , FB_DEFAULT_CPUTYPE ), _
(@"openbsd", FB_COMPTARGET_OPENBSD, FB_DEFAULT_CPUTYPE ) _
(@"openbsd", FB_COMPTARGET_OPENBSD, FB_DEFAULT_CPUTYPE ), _
(@"amiga" , FB_COMPTARGET_AMIGA , FB_DEFAULT_CPUTYPE_M68K ), _
(@"aros" , FB_COMPTARGET_AROS , FB_DEFAULT_CPUTYPE ), _
(@"morphos" , FB_COMPTARGET_MORPHOS , FB_DEFAULT_CPUTYPE_PPC ), _
(@"amigaos4", FB_COMPTARGET_AMIGAOS4, FB_DEFAULT_CPUTYPE_PPC ) _
}

''
Expand Down Expand Up @@ -3684,7 +3726,7 @@ private function hCompileStage2Module( byval module as FBCIOFILE ptr ) as intege
'' GCC doesn't recognize the -march option and PowerPC combination
'' and recommendeds the -mcpu option be used for PowerPC.
select case fbGetCpuFamily( )
case FB_CPUFAMILY_PPC, FB_CPUFAMILY_PPC64, FB_CPUFAMILY_PPC64LE
case FB_CPUFAMILY_PPC, FB_CPUFAMILY_PPC64, FB_CPUFAMILY_PPC64LE, FB_CPUFAMILY_M68K
if( fbc.cputype_is_native ) then
ln += "-mcpu=native "
else
Expand Down Expand Up @@ -4308,7 +4350,6 @@ private sub hAddDefaultLibs( )
end if

case FB_COMPTARGET_DARWIN
fbcAddDefLib( "gcc" )
fbcAddDefLib( "System" )
fbcAddDefLib( "pthread" )
fbcAddDefLib( "ncurses" )
Expand Down Expand Up @@ -4427,6 +4468,28 @@ private sub hAddDefaultLibs( )
fbcAddDefLib( "gmon" )
end if

case FB_COMPTARGET_AMIGA
fbcAddDefLib( "gcc" )
fbcAddDefLib( "amiga" )
fbcAddDefLib( "m" )

case FB_COMPTARGET_AROS
fbcAddDefLib( "gcc" )
fbcAddDefLib( "arosc" )
fbcAddDefLib( "autoinit" )
fbcAddDefLib( "m" )

case FB_COMPTARGET_MORPHOS
fbcAddDefLib( "gcc" )
fbcAddDefLib( "c" )
fbcAddDefLib( "m" )

case FB_COMPTARGET_AMIGAOS4
fbcAddDefLib( "gcc" )
fbcAddDefLib( "c" )
fbcAddDefLib( "m" )
fbcAddDefLib( "auto" )

end select

end sub
Expand Down
Loading
Loading