73 lines
2.5 KiB
OCaml
73 lines
2.5 KiB
OCaml
|
|
let () =
|
||
|
|
let c = Configurator.V1.create "mirage-crypto" in
|
||
|
|
let ccomp_type_opt = Configurator.V1.ocaml_config_var c "ccomp_type" in
|
||
|
|
let arch =
|
||
|
|
let defines =
|
||
|
|
Configurator.V1.C_define.import
|
||
|
|
c
|
||
|
|
~includes:[]
|
||
|
|
[("__x86_64__", Switch); ("__i386__", Switch); ("__powerpc64__", Switch);
|
||
|
|
("__s390x__", Switch); ("__aarch64__", Switch);
|
||
|
|
("_WIN64", Switch); ("_WIN32", Switch)]
|
||
|
|
in
|
||
|
|
match defines with
|
||
|
|
| (_, Switch true) :: _ -> `x86_64
|
||
|
|
| _ :: (_, Switch true) :: _ -> `x86
|
||
|
|
| _ :: _ :: (_, Switch true) :: _ -> `ppc64
|
||
|
|
| _ :: _ :: _ :: (_, Switch true) :: _ -> `s390x
|
||
|
|
| _ :: _ :: _ :: _ :: (_, Switch true) :: _ -> `arm64
|
||
|
|
| _ :: _ :: _ :: _ :: _ :: (_, Switch true) :: _ -> `x86_64
|
||
|
|
| _ :: _ :: _ :: _ :: _ :: _ :: (_, Switch true) :: _ -> `x86
|
||
|
|
| _ -> `unknown
|
||
|
|
in
|
||
|
|
let os =
|
||
|
|
let defines =
|
||
|
|
Configurator.V1.C_define.import
|
||
|
|
c
|
||
|
|
~includes:[]
|
||
|
|
[("__APPLE__", Switch)]
|
||
|
|
in
|
||
|
|
match defines with
|
||
|
|
| (_, Switch true) :: _ -> `macos
|
||
|
|
| _ -> `unknown
|
||
|
|
in
|
||
|
|
let accelerate_flags =
|
||
|
|
match arch, ccomp_type_opt with
|
||
|
|
| `x86_64, Some "msvc" -> [ "-DACCELERATE" ]
|
||
|
|
| `x86_64, _ -> [ "-DACCELERATE"; "-mssse3"; "-maes"; "-mpclmul" ]
|
||
|
|
| _ -> []
|
||
|
|
in
|
||
|
|
let ent_flags =
|
||
|
|
match arch, ccomp_type_opt with
|
||
|
|
| (`x86_64 | `x86), Some "msvc" -> [ "-DENTROPY" ]
|
||
|
|
| (`x86_64 | `x86), _ -> [ "-DENTROPY"; "-mrdrnd"; "-mrdseed" ]
|
||
|
|
| _ -> []
|
||
|
|
in
|
||
|
|
let std_flags =
|
||
|
|
match ccomp_type_opt with
|
||
|
|
| Some "msvc" -> ["/Wall"]
|
||
|
|
| _ -> ["--std=c11"; "-Wall"; "-Wextra"; "-Wpedantic"; "-O3"]
|
||
|
|
in
|
||
|
|
let warn_flags =
|
||
|
|
(* See #178, there may be false positives on ppc&s390 with no-stringop-overflow *)
|
||
|
|
match arch, ccomp_type_opt with
|
||
|
|
| _, Some "msvc" -> [ "/WX" ]
|
||
|
|
| (`ppc64, _) | (`s390x, _) -> [ "-Wno-stringop-overflow"; "-Werror" ]
|
||
|
|
| _ -> [ "-Werror" ]
|
||
|
|
in
|
||
|
|
let no_instcombine_on_macos = match arch, os with
|
||
|
|
| `arm64, `macos ->
|
||
|
|
let res = Configurator.V1.Process.run c "cc" ["-dumpversion"] in
|
||
|
|
if String.trim res.stdout = "14.0.3" then
|
||
|
|
["-mllvm"; "--instcombine-max-iterations=0"]
|
||
|
|
(* macOS instcombine miscompilation with clang 14.0.3 *)
|
||
|
|
else
|
||
|
|
[]
|
||
|
|
| _ -> []
|
||
|
|
in
|
||
|
|
let flags = std_flags @ no_instcombine_on_macos @ ent_flags in
|
||
|
|
let opt_flags = flags @ accelerate_flags in
|
||
|
|
Configurator.V1.Flags.write_sexp "cflags_optimized.sexp" opt_flags;
|
||
|
|
Configurator.V1.Flags.write_sexp "cflags.sexp" flags;
|
||
|
|
Configurator.V1.Flags.write_sexp "cflags_warn.sexp" warn_flags
|