@@ -79,18 +79,22 @@ codegenC' defs out exec incs objs libs flags exports iface dbg
79 libFlags <- getLibFlags
79 libFlags <- getLibFlags
80 incFlags <- getIncFlags
80 incFlags <- getIncFlags
81 envFlags <- getEnvFlags
81 envFlags <- getEnvFlags
82+ let stripFlag = if isDarwin then "-dead_strip" else "-Wl,-gc-sections"
82− let stackFlag = if isWindows then ["-Wl,--stack,16777216"] else []
83+ let stackFlags = if isWindows then ["-Wl,--stack,16777216"] else []
84+ let linkFlags = stripFlag : stackFlags
83 let args = gccDbg dbg ++
85 let args = gccDbg dbg ++
84 gccFlags iface ++
86 gccFlags iface ++
85 -- # Any flags defined here which alter the RTS API must also be added to config.mk
87 -- # Any flags defined here which alter the RTS API must also be added to config.mk
88+ [ "-std=c99", "-pipe"
89+ , "-fdata-sections", "-ffunction-sections"
86− ["-std=c99", "-D_POSIX_C_SOURCE=200809L", "-DHAS_PTHREAD", "-DIDRIS_ENABLE_STATS",
90+ , "-D_POSIX_C_SOURCE=200809L", "-DHAS_PTHREAD", "-DIDRIS_ENABLE_STATS"
87− "-I."] ++ objs ++ envFlags ++
91+ , "-I."] ++ objs ++ envFlags ++
88− (if (exec == Executable) then [] else ["-c"]) ++
92+ (if (exec == Executable) then linkFlags else ["-c"]) ++
90 (if not iface then libFlags else []) ++
94 (if not iface then libFlags else []) ++
91 incFlags ++
95 incFlags ++
92 (if not iface then libs else []) ++
96 (if not iface then libs else []) ++
93− flags ++ stackFlag ++
97+ flags ++
94 ["-o", out]
98 ["-o", out]
95-- putStrLn (show args)
99-- putStrLn (show args)
96 exit <- rawSystem comp args
100 exit <- rawSystem comp args