aboutsummaryrefslogtreecommitdiffstats
path: root/driver/Assembler.ml
diff options
context:
space:
mode:
authorBernhard Schommer <bernhardschommer@gmail.com>2016-07-12 13:18:42 +0200
committerBernhard Schommer <bernhardschommer@gmail.com>2016-07-12 13:18:42 +0200
commitefa462bd1655c6b2c8f064e214762650092257e8 (patch)
treefbabaeb77489660a60666accdef6bfbb89495478 /driver/Assembler.ml
parenta6bde8ba057ff057e311781fd91b4a9ab441731c (diff)
downloadcompcert-efa462bd1655c6b2c8f064e214762650092257e8.tar.gz
compcert-efa462bd1655c6b2c8f064e214762650092257e8.zip
Added heuristic for passing arg via responsefiles.
Since gnu make and other tools under windows seem to have a limit of around 8000 bytes per command line the arguments should be passed via responsefiles instead. Bug 18308
Diffstat (limited to 'driver/Assembler.ml')
-rw-r--r--driver/Assembler.ml9
1 files changed, 7 insertions, 2 deletions
diff --git a/driver/Assembler.ml b/driver/Assembler.ml
index 52fb17d8..d6cb65ea 100644
--- a/driver/Assembler.ml
+++ b/driver/Assembler.ml
@@ -18,12 +18,17 @@ open Driveraux
(* From asm to object file *)
let assemble ifile ofile =
- let cmd = List.concat [
- Configuration.asm;
+ let cmd,opts = match Configuration.asm with
+ | name::opts -> name,opts
+ | [] -> assert false (* Should be catched in Configuration *) in
+ let opts = List.concat [
+ opts;
["-o"; ofile];
List.rev !assembler_options;
[ifile]
] in
+ let opts = responsefile opts (fun a -> if gnu_system then ["@"^a] else ["@"^a]) in
+ let cmd = cmd::opts in
let exc = command cmd in
if exc <> 0 then begin
safe_remove ofile;