Skip to content

Commit

Permalink
Call the C++ compiler with -std=c++11 when using OCaml >= 5.0 (#10962)
Browse files Browse the repository at this point in the history
* Call the C++ compiler with -std=c++11 when using OCaml >= 5.0
  • Loading branch information
kit-ty-kate authored Oct 6, 2024
1 parent 7cb89f5 commit 250f0b1
Show file tree
Hide file tree
Showing 8 changed files with 35 additions and 18 deletions.
2 changes: 2 additions & 0 deletions doc/changes/10962.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
- Call the C++ compiler with `-std=c++11` when using OCaml >= 5.0
(#10962, @kit-ty-kate)
36 changes: 22 additions & 14 deletions src/dune_rules/cxx_flags.ml
Original file line number Diff line number Diff line change
@@ -1,24 +1,29 @@
open Import

type phase =
| Compile
| Link

type ccomp_type =
| Gcc
| Msvc
| Clang
| Other of string

let base_cxx_flags ~for_ cc =
match cc, for_ with
| Gcc, Compile -> [ "-x"; "c++" ]
| Gcc, Link -> [ "-lstdc++"; "-shared-libgcc" ]
| Clang, Compile -> [ "-x"; "c++" ]
| Clang, Link -> [ "-lc++" ]
| Msvc, Compile -> [ "/TP" ]
| Msvc, Link -> []
| Other _, (Link | Compile) -> []
type phase =
| Compile of Ocaml.Version.t
| Link

let base_cxx_compile_flags version = function
| Gcc | Clang ->
"-x"
:: "c++"
:: (if Ocaml.Version.add_std_cxx_flag version then [ "-std=c++11" ] else [])
| Msvc -> [ "/TP" ]
| Other _ -> []
;;

let base_cxx_link_flags = function
| Gcc -> [ "-lstdc++"; "-shared-libgcc" ]
| Clang -> [ "-lc++" ]
| Msvc -> []
| Other _ -> []
;;

let fdiagnostics_color = function
Expand Down Expand Up @@ -62,5 +67,8 @@ let ccomp_type (ctx : Build_context.t) =
let get_flags ~for_ ctx =
let open Action_builder.O in
let+ ccomp_type = ccomp_type ctx in
base_cxx_flags ~for_ ccomp_type
(match for_ with
| Compile version -> base_cxx_compile_flags version
| Link -> base_cxx_link_flags)
ccomp_type
;;
2 changes: 1 addition & 1 deletion src/dune_rules/cxx_flags.mli
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
open Import

type phase =
| Compile
| Compile of Ocaml.Version.t
| Link

(** The detected compiler *)
Expand Down
6 changes: 5 additions & 1 deletion src/dune_rules/foreign_rules.ml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,11 @@ let default_context_flags (ctx : Build_context.t) ocaml_config ~project =
in
let cxx =
let+ fdiagnostics_color = fdiagnostics_color
and+ db_flags = Cxx_flags.get_flags ~for_:Compile ctx in
and+ db_flags =
Cxx_flags.get_flags
~for_:(Compile (Ocaml.Version.make (Ocaml_config.version ocaml_config)))
ctx
in
List.concat [ db_flags; cxxflags; fdiagnostics_color ]
in
c, cxx
Expand Down
1 change: 1 addition & 0 deletions src/ocaml/version.ml
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,4 @@ let has_sandboxed_otherlibs version = version >= (5, 0, 0)
let has_META_files version = version >= (5, 0, 0)
let supports_bin_annot_occurrences version = version >= (5, 2, 0)
let supports_hidden_includes version = version >= (5, 2, 0)
let add_std_cxx_flag version = version >= (5, 0, 0)
2 changes: 2 additions & 0 deletions src/ocaml/version.mli
Original file line number Diff line number Diff line change
Expand Up @@ -79,3 +79,5 @@ val supports_bin_annot_occurrences : t -> bool

(** Whether the compiler supports the -H flag *)
val supports_hidden_includes : t -> bool

val add_std_cxx_flag : t -> bool
2 changes: 1 addition & 1 deletion test/blackbox-tests/test-cases/cpp-std-ocaml5.t/run.t
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,4 @@
> EOF

$ (dune build ./cpp11.exe 2>/dev/null) && _build/default/cpp11.exe
[1]
Hi from C++11
2 changes: 1 addition & 1 deletion test/blackbox-tests/test-cases/dune
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@
(enabled_if %{bin-available:hg})))

(cram
(applies_to patch-back-source-tree cpp-std-ocaml5)
(applies_to patch-back-source-tree)
(enabled_if
(<> %{system} macosx)))

Expand Down

0 comments on commit 250f0b1

Please sign in to comment.