Merge pull request #60 from eagletmt/ffi-link
Enable dynamic linking for FFI
This commit is contained in:
commit
eb48b8290a
22
Cabal.hs
22
Cabal.hs
@ -1,4 +1,4 @@
|
|||||||
{-# LANGUAGE OverloadedStrings #-}
|
{-# LANGUAGE OverloadedStrings, RecordWildCards #-}
|
||||||
|
|
||||||
module Cabal (initializeGHC) where
|
module Cabal (initializeGHC) where
|
||||||
|
|
||||||
@ -16,7 +16,6 @@ import GHC
|
|||||||
import GHCApi
|
import GHCApi
|
||||||
import GHCChoice
|
import GHCChoice
|
||||||
import qualified Gap
|
import qualified Gap
|
||||||
import Language.Haskell.Extension
|
|
||||||
import System.Directory
|
import System.Directory
|
||||||
import System.FilePath
|
import System.FilePath
|
||||||
import Types
|
import Types
|
||||||
@ -34,12 +33,13 @@ initializeGHC opt fileName ghcOptions logging = withCabal ||> withoutCabal
|
|||||||
return (fileName,logReader)
|
return (fileName,logReader)
|
||||||
withCabal = do
|
withCabal = do
|
||||||
(owdir,cdir,cfile) <- liftIO getDirs
|
(owdir,cdir,cfile) <- liftIO getDirs
|
||||||
binfo <- liftIO $ parseCabalFile cfile
|
binfo@BuildInfo{..} <- liftIO $ parseCabalFile cfile
|
||||||
let (idirs',exts',mlang) = extractBuildInfo binfo
|
let exts = map (addX . Gap.extensionToString) $ usedExtensions binfo
|
||||||
exts = map (addX . Gap.extensionToString) exts'
|
lang = maybe "-XHaskell98" (addX . show) defaultLanguage
|
||||||
lang = maybe "-XHaskell98" (addX . show) mlang
|
libs = map ("-l" ++) extraLibs
|
||||||
gopts = ghcOptions ++ exts ++ [lang]
|
libDirs = map ("-L" ++) extraLibDirs
|
||||||
idirs = case idirs' of
|
gopts = ghcOptions ++ exts ++ [lang] ++ libs ++ libDirs
|
||||||
|
idirs = case hsSourceDirs of
|
||||||
[] -> [cdir,owdir]
|
[] -> [cdir,owdir]
|
||||||
dirs -> map (cdir </>) dirs ++ [owdir]
|
dirs -> map (cdir </>) dirs ++ [owdir]
|
||||||
logReader <- initSession opt gopts idirs logging
|
logReader <- initSession opt gopts idirs logging
|
||||||
@ -59,12 +59,6 @@ parseCabalFile file = do
|
|||||||
toMaybe [] = Nothing
|
toMaybe [] = Nothing
|
||||||
toMaybe (x:_) = Just x
|
toMaybe (x:_) = Just x
|
||||||
|
|
||||||
-- SourceDirs, Extensions, and Language
|
|
||||||
extractBuildInfo :: BuildInfo -> ([String],[Extension],Maybe Language)
|
|
||||||
extractBuildInfo binfo = (hsSourceDirs binfo
|
|
||||||
,usedExtensions binfo
|
|
||||||
,defaultLanguage binfo)
|
|
||||||
|
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
|
|
||||||
-- CurrentWorkingDir, CabalDir, CabalFile
|
-- CurrentWorkingDir, CabalDir, CabalFile
|
||||||
|
@ -45,7 +45,7 @@ setFlags opt d idirs
|
|||||||
d' = d {
|
d' = d {
|
||||||
packageFlags = ghcPackage : packageFlags d
|
packageFlags = ghcPackage : packageFlags d
|
||||||
, importPaths = idirs
|
, importPaths = idirs
|
||||||
, ghcLink = NoLink
|
, ghcLink = LinkInMemory
|
||||||
, hscTarget = HscInterpreted
|
, hscTarget = HscInterpreted
|
||||||
, flags = flags d
|
, flags = flags d
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user