Commit 41f563b6 authored by Ian Lynagh's avatar Ian Lynagh
Browse files

Small DynFlags improvements

parent 62d3f119
......@@ -96,6 +96,58 @@ compiler/stage%/build/Config.hs : mk/config.mk mk/project.mk | $$(dir $$@)/.
@echo '#error Unknown target arch' >> $@
@echo '#endif' >> $@
@echo >> $@
# Sync this with checkOS in configure.ac
@echo 'cTargetOS :: OS' >> $@
@echo '#if linux_TARGET_OS' >> $@
@echo 'cTargetOS = Linux' >> $@
@echo '#elif freebsd_TARGET_OS' >> $@
@echo 'cTargetOS = FreeBSD' >> $@
@echo '#elif netbsd_TARGET_OS' >> $@
@echo 'cTargetOS = NetBSD' >> $@
@echo '#elif openbsd_TARGET_OS' >> $@
@echo 'cTargetOS = OpenBSD' >> $@
@echo '#elif dragonfly_TARGET_OS' >> $@
@echo 'cTargetOS = OtherOS "dragonfly"' >> $@
@echo '#elif osf1_TARGET_OS' >> $@
@echo 'cTargetOS = OtherOS "osf"' >> $@
@echo '#elif osf3_TARGET_OS' >> $@
@echo 'cTargetOS = OtherOS "osf"' >> $@
@echo '#elif hpux_TARGET_OS' >> $@
@echo 'cTargetOS = HPUX' >> $@
@echo '#elif linuxaout_TARGET_OS' >> $@
@echo 'cTargetOS = Linux' >> $@
@echo '#elif kfreebsdgnu_TARGET_OS' >> $@
@echo 'cTargetOS = OtherOS "kfreebsdgnu"' >> $@
@echo '#elif freebsd2_TARGET_OS' >> $@
@echo 'cTargetOS = FreeBSD' >> $@
@echo '#elif solaris2_TARGET_OS' >> $@
@echo 'cTargetOS = Solaris' >> $@
@echo '#elif cygwin32_TARGET_OS' >> $@
@echo 'cTargetOS = Windows' >> $@
@echo '#elif mingw32_TARGET_OS' >> $@
@echo 'cTargetOS = Windows' >> $@
@echo '#elif darwin_TARGET_OS' >> $@
@echo 'cTargetOS = OSX' >> $@
@echo '#elif gnu_TARGET_OS' >> $@
@echo 'cTargetOS = OtherOS "gnu"' >> $@
@echo '#elif nextstep2_TARGET_OS' >> $@
@echo 'cTargetOS = OtherOS "nextstep"' >> $@
@echo '#elif nextstep3_TARGET_OS' >> $@
@echo 'cTargetOS = OtherOS "nextstep"' >> $@
@echo '#elif sunos4_TARGET_OS' >> $@
@echo 'cTargetOS = Solaris' >> $@
@echo '#elif ultrix_TARGET_OS' >> $@
@echo 'cTargetOS = OtherOS "ultrix"' >> $@
@echo '#elif irix_TARGET_OS' >> $@
@echo 'cTargetOS = IRIX' >> $@
@echo '#elif aix_TARGET_OS' >> $@
@echo 'cTargetOS = AIX' >> $@
@echo '#elif haiku_TARGET_OS' >> $@
@echo 'cTargetOS = OtherOS "haiku"' >> $@
@echo '#else' >> $@
@echo '#error Unknown target OS' >> $@
@echo '#endif' >> $@
@echo >> $@
@echo 'cProjectName :: String' >> $@
@echo 'cProjectName = "$(ProjectName)"' >> $@
@echo 'cProjectVersion :: String' >> $@
......
......@@ -111,6 +111,7 @@ import Data.List
import Data.Map (Map)
import qualified Data.Map as Map
-- import Data.Maybe
import Distribution.System
import System.FilePath
import System.IO ( stderr, hPutChar )
......@@ -403,7 +404,7 @@ data DynFlags = DynFlags {
-- See CoreMonad.FloatOutSwitches
#ifndef OMIT_NATIVE_CODEGEN
targetPlatform :: Platform, -- ^ The platform we're compiling for. Used by the NCG.
targetPlatform :: Platform.Platform, -- ^ The platform we're compiling for. Used by the NCG.
#endif
cmdlineHcIncludes :: [String], -- ^ @\-\#includes@
importPaths :: [FilePath],
......@@ -630,6 +631,14 @@ data HscTarget
| HscNothing -- ^ Don't generate any code. See notes above.
deriving (Eq, Show)
showHscTargetFlag :: HscTarget -> String
showHscTargetFlag HscC = "-fvia-c"
showHscTargetFlag HscAsm = "-fasm"
showHscTargetFlag HscLlvm = "-fllvm"
showHscTargetFlag HscJava = panic "No flag for HscJava"
showHscTargetFlag HscInterpreted = "-fbyte-code"
showHscTargetFlag HscNothing = "-fno-code"
-- | Will this target result in an object file on the disk?
isObjectTarget :: HscTarget -> Bool
isObjectTarget HscC = True
......@@ -1100,12 +1109,13 @@ parseDynamicFlags_ dflags0 args pkg_flags = do
when (not (null errs)) $ ghcError $ errorsToGhcException errs
let (pic_warns, dflags2)
#if !(x86_64_TARGET_ARCH && linux_TARGET_OS)
| (not opt_Static || opt_PIC) && hscTarget dflags1 == HscLlvm
| not (cTargetArch == X86_64 && cTargetOS == Linux) &&
(not opt_Static || opt_PIC) &&
hscTarget dflags1 == HscLlvm
= ([L noSrcSpan $ "Warning: -fllvm is incompatible with -fPIC and -"
++ "dynamic on this platform;\n ignoring -fllvm"],
dflags1{ hscTarget = HscAsm })
#endif
++ "dynamic on this platform;\n"
++ " using " ++ showHscTargetFlag defaultObjectTarget ++ " instead"],
dflags1{ hscTarget = defaultObjectTarget })
| otherwise = ([], dflags1)
return (dflags2, leftover, pic_warns ++ warns)
......
......@@ -265,6 +265,7 @@ checkVendor() {
esac
}
# Sync this with cTargetOS in compiler/ghc.mk
checkOS() {
case $1 in
linux|freebsd|netbsd|openbsd|dragonfly|osf1|osf3|hpux|linuxaout|kfreebsdgnu|freebsd2|solaris2|cygwin32|mingw32|darwin|gnu|nextstep2|nextstep3|sunos4|ultrix|irix|aix|haiku)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment