diff options
author | Greta Yorsh <gyorsh@janestreet.com> | 2019-08-15 12:09:37 +0100 |
---|---|---|
committer | Greta Yorsh <gyorsh@janestreet.com> | 2021-02-11 16:42:40 +0000 |
commit | 3f2025f4e37b91a0d2114045e579b7cb14e57551 (patch) | |
tree | ead01e984d8a361d7100f5912ff7dd3b2988ba39 /driver | |
parent | 95a4963775a6d4d13a25945cb1f1e369a3414d8f (diff) | |
download | ocaml-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.ml | 5 | ||||
-rw-r--r-- | driver/compenv.mli | 1 | ||||
-rw-r--r-- | driver/optmaindriver.ml | 3 |
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 |