You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

172 lines
3.7 KiB

(* -*- tuareg -*- *)
(*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*)
(* NOTE: prepend dune.common to this file! *)
let ( ^/ ) = Filename.concat
let source_dirs =
(if clang then ["al"; "clang"; "unit" ^/ "clang"] else ["clang_stubs"; "unit" ^/ "clang_stubs"])
@ [ (if java then "java" else "java_stubs")
; "backend"
; "concurrency"
; "integration"
; "labs"
; "test_determinator"
; "topl"
; "unit"
; "unit" ^/ "nullsafe" ]
let infer_binaries = ["infer"; "inferunit"] @ if facebook then ["InferCreateTraceViewLinks"] else []
let env_stanza =
Format.sprintf
{|
(env
(dev
(flags %s))
(opt
(flags %s)
(ocamlopt_flags (:standard -O3)))
(test
(flags %s))
)
|}
lenient_flags lenient_flags strict_flags
let clang_lexer_stanzas =
if clang then ["(ocamllex types_lexer ctl_lexer)"; "(menhir (modules types_parser ctl_parser))"]
else []
let infer_cflags =
[ "-open"
; "Core"
; "-open"
; "Biabduction"
; "-open"
; "Bo"
; "-open"
; "Nullsafe"
; "-open"
; "Pulselib"
; "-open"
; "Checkers"
; "-open"
; "Costlib"
; "-open"
; "Quandary"
; "-open"
; "Absint"
; "-open"
; "OpenSource"
; "-open"
; "InferStdlib"
; "-open"
; "IStd"
; "-open"
; "InferGenerated"
; "-open"
; "InferIR"
; "-open"
; "InferBase"
; "-open"
; "InferCStubs" ]
|> String.concat " "
let main_lib_stanza =
Format.sprintf
{|
(library
(name InferModules)
(public_name infer)
(flags (:standard %s))
(libraries %s)
(modules :standard \ %s infertop)
(preprocess (pps ppx_compare ppx_fields_conv ppx_hash ppx_sexp_conv ppx_variants_conv -no-check))
)
|}
infer_cflags
(String.concat " "
( common_libraries
@ [ "InferIR"
; "InferCStubs"
; "absint"
; "biabduction"
; "nullsafe"
; "bo"
; "pulselib"
; "checkers"
; "costlib"
; "quandary" ] ))
(String.concat " " infer_binaries)
let infer_exe_stanza =
Format.sprintf
{|
(executables
(names %s)
(modes byte_complete exe)
(flags (:standard %s -open InferModules))
(libraries InferModules)
(modules %s)
(preprocess (pps ppx_compare ppx_fields_conv ppx_hash ppx_sexp_conv ppx_variants_conv -no-check))
(promote (until-clean) (into ../bin))
)
|}
(String.concat " " infer_binaries)
infer_cflags
(String.concat " " infer_binaries)
let infertop_stanza =
Format.sprintf
{|
(executable
(name infertop)
(modes byte_complete)
(flags (:standard %s))
(libraries utop InferModules)
(link_flags (-linkall -warn-error -31))
(modules Infertop)
(preprocess (pps ppx_compare ppx_fields_conv ppx_hash ppx_sexp_conv ppx_variants_conv -no-check))
(promote (until-clean) (into ../bin))
)
|}
infer_cflags
let topl_stanzas =
["(ocamllex ToplLexer)"; "(menhir (flags --unused-token INDENT --explain) (modules ToplParser))"]
let java_sources_lexer = if java then ["(ocamllex jSourceFileInfo)"] else []
let flatten_sources_stanzas =
List.map
(fun source_dir ->
[ Printf.sprintf "(copy_files# %s/*.ml{,i,l})" source_dir
; (* menhir doesn't support '# 1 "<source file>"' directives at the start of the file inserted by
copy# actions *)
Printf.sprintf "(copy_files %s/*.mly)" source_dir ] )
source_dirs
|> List.concat
(** The build stanzas to be passed to dune *)
let stanzas =
(env_stanza :: main_lib_stanza :: infer_exe_stanza :: infertop_stanza :: clang_lexer_stanzas)
@ java_sources_lexer @ topl_stanzas @ flatten_sources_stanzas
;;
String.concat "\n" stanzas |> Jbuild_plugin.V1.send