From 3c5c649902c2d9e5e1c07e0335d6caf28bf3694c Mon Sep 17 00:00:00 2001 From: Brad Richardson Date: Fri, 6 Mar 2020 19:45:44 -0800 Subject: Add place to specify other libraries when building library --- src/Build.hs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/Build.hs b/src/Build.hs index 813c10e..b9f2011 100644 --- a/src/Build.hs +++ b/src/Build.hs @@ -118,8 +118,9 @@ buildLibrary -> FilePath -> [String] -> String + -> [FilePath] -> IO () -buildLibrary libraryDirectory sourceExtensions buildDirectory compiler flags libraryName +buildLibrary libraryDirectory sourceExtensions buildDirectory compiler flags libraryName otherLibraryDirectories = do sourceFiles <- getDirectoriesFiles [libraryDirectory] sourceExtensions let sourceFileLookupMap = createSourceFileLookupMap @@ -129,6 +130,10 @@ buildLibrary libraryDirectory sourceExtensions buildDirectory compiler flags lib let moduleLookupMap = createModuleLookupMap buildDirectory libraryDirectory sourceFiles + otherModuleMaps <- mapM getLibraryModuleMap otherLibraryDirectories + let allModuleMaps = + moduleLookupMap + `Map.union` foldl Map.union Map.empty otherModuleMaps let archiveFile = buildDirectory libraryName <.> "a" shake shakeOptions { shakeFiles = buildDirectory , shakeChange = ChangeModtimeAndDigest @@ -148,11 +153,14 @@ buildLibrary libraryDirectory sourceExtensions buildDirectory compiler flags lib modulesUsed <- liftIO $ getModulesUsed sourceFile let moduleFilesNeeded = mapMaybe - (`Map.lookup` moduleLookupMap) + (`Map.lookup` allModuleMaps) modulesUsed + let includeFlags = + map ("-I" ++) otherLibraryDirectories need moduleFilesNeeded cmd compiler ["-c", "-J" ++ buildDirectory] + includeFlags flags ["-o", objectFile, sourceFile] archiveFile %> \a -> do -- cgit v1.2.3