@@ -26,7 +26,7 @@ import GHC
26import GHC.Check (VersionCheck(..), makeGhcVersionChecker)
26import GHC.Check (VersionCheck(..), makeGhcVersionChecker)
27import HIE.Bios
27import HIE.Bios
28import HIE.Bios.Cradle
28import HIE.Bios.Cradle
29−import HIE.Bios.Environment (addCmdOpts)
29+import HIE.Bios.Environment (addCmdOpts, makeDynFlagsAbsolute)
30import HIE.Bios.Types
30import HIE.Bios.Types
31import Linker (initDynLinker)
31import Linker (initDynLinker)
32import RuleTypes
32import RuleTypes
@@ -55,8 +55,8 @@ loadGhcSession =
55 -- This rule is for caching the GHC session. E.g., even when the cabal file
55 -- This rule is for caching the GHC session. E.g., even when the cabal file
56 -- changed, if the resulting flags did not change, we would continue to use
56 -- changed, if the resulting flags did not change, we would continue to use
57 -- the existing session.
57 -- the existing session.
58− defineNoFile $ \(GetHscEnv opts deps) ->
58+ defineNoFile $ \(GetHscEnv opts optRoot deps) ->
59− liftIO $ createSession $ ComponentOptions opts deps
59+ liftIO $ createSession $ ComponentOptions opts optRoot deps
61cradleToSession :: Rules ()
61cradleToSession :: Rules ()
62cradleToSession = define $ \LoadCradle nfp -> do
62cradleToSession = define $ \LoadCradle nfp -> do
@@ -79,13 +79,14 @@ cradleToSession = define $ \LoadCradle nfp -> do
79 cmpOpts <- liftIO $ mask $ \_ -> getComponentOptions cradle
79 cmpOpts <- liftIO $ mask $ \_ -> getComponentOptions cradle
80 let opts = componentOptions cmpOpts
80 let opts = componentOptions cmpOpts
81 deps = componentDependencies cmpOpts
81 deps = componentDependencies cmpOpts
82+ root = componentRoot cmpOpts
82 deps' = case mbYaml of
83 deps' = case mbYaml of
83 -- For direct cradles, the hie.yaml file itself must be watched.
84 -- For direct cradles, the hie.yaml file itself must be watched.
84 Just yaml | isDirectCradle cradle -> yaml : deps
85 Just yaml | isDirectCradle cradle -> yaml : deps
86 existingDeps <- filterM doesFileExist deps'
87 existingDeps <- filterM doesFileExist deps'
87 need existingDeps
88 need existingDeps
88− ([],) . pure <$> useNoFile_ (GetHscEnv opts deps)
89+ ([],) . pure <$> useNoFile_ (GetHscEnv opts root deps)
90cradleLoadedMethod :: Text
91cradleLoadedMethod :: Text
91cradleLoadedMethod = "ghcide/cradle/loaded"
92cradleLoadedMethod = "ghcide/cradle/loaded"
@@ -118,7 +119,7 @@ checkGhcVersion = do
118 return Nothing
119 return Nothing
120createSession :: ComponentOptions -> IO HscEnvEq
121createSession :: ComponentOptions -> IO HscEnvEq
121−createSession (ComponentOptions theOpts _) = do
122+createSession (ComponentOptions theOpts compRoot _) = do
122 libdir <- getLibdir
123 libdir <- getLibdir
124 cacheDir <- getCacheDir theOpts
125 cacheDir <- getCacheDir theOpts
@@ -127,7 +128,8 @@ createSession (ComponentOptions theOpts _) = do
128 runGhc (Just libdir) $ do
129 runGhc (Just libdir) $ do
129 dflags <- getSessionDynFlags
130 dflags <- getSessionDynFlags
130− (dflags', _targets) <- addCmdOpts theOpts dflags
131+ (dflags_, _targets) <- addCmdOpts theOpts dflags
132+ let dflags' = makeDynFlagsAbsolute compRoot dflags_
131 setupDynFlags cacheDir dflags'
133 setupDynFlags cacheDir dflags'
132 versionMismatch <- liftIO checkGhcVersion
134 versionMismatch <- liftIO checkGhcVersion
133 case versionMismatch of
135 case versionMismatch of