on master help sign in
Call gcc using rawSystem
commit27d6b04fcd64703eb9bd30d03524655aa39b3dc1 authorMelvar Chen <Melvar.Chen@googlemail.com> dateWed 5 Nov 2014, 20:17 (12 years ago) parent528cc11
4 files changed+36−39
main/Main.hs+2−2 src/IRTS/CodegenC.hs+24−27 src/IRTS/System.hs+9−9 src/Pkg/Package.hs+1−1
main/Main.hs+2−2
@@ -81,7 +81,7 @@ showver = do putStrLn $ "Idris version " ++ ver
8181
8282showLibs :: IO b
8383showLibs = do libFlags <- getLibFlags
84− putStrLn libFlags
84+ putStrLn $ unwords libFlags
8585 exitWith ExitSuccess
8686
8787showLibdir :: IO b
@@ -91,5 +91,5 @@ showLibdir = do dir <- getIdrisLibDir
9191
9292showIncs :: IO b
9393showIncs = do incFlags <- getIncFlags
94− putStrLn incFlags
94+ putStrLn $ unwords incFlags
9595 exitWith ExitSuccess
src/IRTS/CodegenC.hs+24−27
@@ -24,24 +24,22 @@ codegenC ci = codegenC' (simpleDecls ci)
2424 (outputFile ci)
2525 (outputType ci)
2626 (includes ci)
27− (concatMap mkObj (compileObjs ci))
28− (concatMap mkLib (compileLibs ci) ++
29− concatMap incdir (importDirs ci))
30− (concatMap mkFlag (compilerFlags ci))
27+ (compileObjs ci)
28+ (map mkLib (compileLibs ci) ++
29+ map incdir (importDirs ci))
30+ (compilerFlags ci)
3131 (debugLevel ci)
3232
33− where mkObj f = f ++ " "
34− mkLib l = "-l" ++ l ++ " "
35− mkFlag l = l ++ " "
36− incdir i = "-I" ++ i ++ " "
33+ where mkLib l = "-l" ++ l
34+ incdir i = "-I" ++ i
3735
3836codegenC' :: [(Name, SDecl)] ->
3937 String -> -- output file name
4038 OutputType -> -- generate executable if True, only .o if False
4139 [FilePath] -> -- include files
42− String -> -- extra object files
43− String -> -- extra compiler flags (libraries)
44− String -> -- extra compiler flags (anything)
40+ [String] -> -- extra object files
41+ [String] -> -- extra compiler flags (libraries)
42+ [String] -> -- extra compiler flags (anything)
4543 DbgLevel ->
4644 IO ()
4745codegenC' defs out exec incs objs libs flags dbg
@@ -64,23 +62,22 @@ codegenC' defs out exec incs objs libs flags dbg
6462 comp <- getCC
6563 libFlags <- getLibFlags
6664 incFlags <- getIncFlags
67− let gcc = comp ++ " " ++
68− gccDbg dbg ++ " " ++
69− gccFlags ++
70− -- # Any flags defined here which alter the RTS API must also be added to config.mk
71− " -DHAS_PTHREAD -DIDRIS_ENABLE_STATS" ++
72− " -I. " ++ objs ++ " -x c " ++
73− (if (exec == Executable) then "" else " -c ") ++
74− " " ++ tmpn ++
75− " " ++ libFlags ++
76− " " ++ incFlags ++
77− " " ++ libs ++
78− " " ++ flags ++
79− " -o " ++ out
65+ let args = [gccDbg dbg] ++
66+ gccFlags ++
67+ -- # Any flags defined here which alter the RTS API must also be added to config.mk
68+ ["-DHAS_PTHREAD", "-DIDRIS_ENABLE_STATS",
69+ "-I."] ++ objs ++ ["-x", "c"] ++
70+ (if (exec == Executable) then [] else ["-c"]) ++
71+ [tmpn] ++
72+ libFlags ++
73+ incFlags ++
74+ libs ++
75+ flags ++
76+ ["-o", out]
8077-- putStrLn gcc
81− exit <- system gcc
78+ exit <- rawSystem comp args
8279 when (exit /= ExitSuccess) $
83− putStrLn ("FAILURE: " ++ gcc)
80+ putStrLn ("FAILURE: " ++ show comp ++ " " ++ show args)
8481
8582headers xs =
8683 concatMap
@@ -92,7 +89,7 @@ debug _ = ""
9289
9390-- We're using signed integers now. Make sure we get consistent semantics
9491-- out of them from gcc. See e.g. http://thiemonagel.de/2010/01/signed-integer-overflow/
95−gccFlags = " -fwrapv -fno-strict-overflow"
92+gccFlags = ["-fwrapv", "-fno-strict-overflow"]
9693
9794gccDbg DEBUG = "-g"
9895gccDbg TRACE = "-O2"
src/IRTS/System.hs+9−9
@@ -38,31 +38,31 @@ getTargetDir :: IO String
3838getTargetDir = environment "TARGET" >>= maybe getDataDir return
3939
4040#if defined(FREEBSD) || defined(DRAGONFLY)
41−extraLib = " -L/usr/local/lib"
41+extraLib = ["-L/usr/local/lib"]
4242#else
43−extraLib = ""
43+extraLib = []
4444#endif
4545
4646#ifdef IDRIS_GMP
47−gmpLib = " -lgmp"
47+gmpLib = ["-lgmp"]
4848#else
49−gmpLib = ""
49+gmpLib = []
5050#endif
5151
5252getLibFlags = do dir <- getDataDir
53− return $ "-L" ++ (dir </> "rts") ++
54− " -lidris_rts" ++ extraLib ++ gmpLib ++ " -lpthread"
53+ return $ ["-L" ++ (dir </> "rts"),
54+ "-lidris_rts"] ++ extraLib ++ gmpLib ++ ["-lpthread"]
5555
5656getIdrisLibDir = do dir <- getDataDir
5757 return $ addTrailingPathSeparator dir
5858
5959#if defined(FREEBSD) || defined(DRAGONFLY)
60−extraInclude = " -I/usr/local/include"
60+extraInclude = ["-I/usr/local/include"]
6161#else
62−extraInclude = ""
62+extraInclude = []
6363#endif
6464getIncFlags = do dir <- getDataDir
65− return $ "-I" ++ dir </> "rts" ++ extraInclude
65+ return $ ("-I" ++ dir </> "rts") : extraInclude
6666
6767getExecutablePom = do dir <- getDataDir
6868 return $ dir </> "java" </> "executable_pom.xml"
src/Pkg/Package.hs+1−1
@@ -224,7 +224,7 @@ testLib warn p f
224224 (tmpf, tmph) <- tempfile
225225 hClose tmph
226226 let libtest = d </> "rts" </> "libtest.c"
227− e <- system $ gcc ++ " " ++ libtest ++ " -l" ++ f ++ " -o " ++ tmpf
227+ e <- rawSystem gcc [libtest, "-l" ++ f, "-o", tmpf]
228228 case e of
229229 ExitSuccess -> return True
230230 _ -> do if warn