summaryrefslogtreecommitdiff
path: root/driver
diff options
context:
space:
mode:
authorGreta Yorsh <gyorsh@janestreet.com>2019-08-15 12:09:37 +0100
committerGreta Yorsh <gyorsh@janestreet.com>2021-02-11 16:42:40 +0000
commit3f2025f4e37b91a0d2114045e579b7cb14e57551 (patch)
treeead01e984d8a361d7100f5912ff7dd3b2988ba39 /driver
parent95a4963775a6d4d13a25945cb1f1e369a3414d8f (diff)
downloadocaml-3f2025f4e37b91a0d2114045e579b7cb14e57551.tar.gz
Call linker even when Clflags.objfiles is empty to link .o .a files
Record when linker inputs are specified on command line.
Diffstat (limited to 'driver')
-rw-r--r--driver/compenv.ml5
-rw-r--r--driver/compenv.mli1
-rw-r--r--driver/optmaindriver.ml3
3 files changed, 7 insertions, 2 deletions
diff --git a/driver/compenv.ml b/driver/compenv.ml
index 9c1e02d22c..d7dfa7f4f4 100644
--- a/driver/compenv.ml
+++ b/driver/compenv.ml
@@ -600,6 +600,7 @@ let get_objfiles ~with_ocamlparam =
else
List.rev !objfiles
+let has_linker_inputs = ref false
@@ -653,8 +654,10 @@ let process_action
else if Filename.check_suffix name ".cmi" && !make_package then
objfiles := name :: !objfiles
else if Filename.check_suffix name Config.ext_obj
- || Filename.check_suffix name Config.ext_lib then
+ || Filename.check_suffix name Config.ext_lib then begin
+ has_linker_inputs := true;
ccobjs := name :: !ccobjs
+ end
else if not !native_code && Filename.check_suffix name Config.ext_dll then
dllibs := name :: !dllibs
else
diff --git a/driver/compenv.mli b/driver/compenv.mli
index 93a585dc78..3ed6e11819 100644
--- a/driver/compenv.mli
+++ b/driver/compenv.mli
@@ -37,6 +37,7 @@ val last_objfiles : string list ref
val first_objfiles : string list ref
val stop_early : bool ref
+val has_linker_inputs : bool ref
type filename = string
diff --git a/driver/optmaindriver.ml b/driver/optmaindriver.ml
index 9986a5a5b8..3ead11643d 100644
--- a/driver/optmaindriver.ml
+++ b/driver/optmaindriver.ml
@@ -106,7 +106,8 @@ let main argv ppf =
(Compenv.get_objfiles ~with_ocamlparam:false) target);
Warnings.check_fatal ();
end
- else if not !Compenv.stop_early && !objfiles <> [] then begin
+ else if not !Compenv.stop_early &&
+ (!objfiles <> [] || !Compenv.has_linker_inputs) then begin
let target =
if !output_c_object then
let s = Compenv.extract_output !output_name in