diff --git a/infer/src/deadcode/Makefile b/infer/src/deadcode/Makefile index 501702982..a4d8b1add 100644 --- a/infer/src/deadcode/Makefile +++ b/infer/src/deadcode/Makefile @@ -178,6 +178,7 @@ detect_dead_ml_file: if [ "$$1" = "infertop.ml" ] \ || [ "$$1" = "deadcode/all_infer_in_one_file.ml" ] \ || [[ "$$1" =~ ^"labs/" ]] \ + || [[ "$$1" =~ ^"llvm/" ]] \ || [[ "$$1" =~ ^"opensource/" ]]; then \ exit 0; \ else \ diff --git a/infer/src/llvm/Makefile b/infer/src/llvm/Makefile new file mode 100644 index 000000000..7949350f8 --- /dev/null +++ b/infer/src/llvm/Makefile @@ -0,0 +1,26 @@ +# 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. + +ROOT_DIR = ../../.. +include $(ROOT_DIR)/Makefile.config + +INFER_BUILD_DIR = ../_build/default + +default: llvm_sil + +$(BIN_DIR)/llvm_sil: + rm -f $(INFER_BUILD_DIR)/llvm_sil.ml + make -C .. infer + cp llvm_sil.ml $(INFER_BUILD_DIR) + cd $(INFER_BUILD_DIR) && \ + ocamlfind ocamlopt -package llair -linkpkg llvm_sil.ml -o $(BIN_DIR)/llvm_sil + rm -f $(INFER_BUILD_DIR)/llvm_sil.ml + +.PHONY: llvm_sil +llvm_sil: $(BIN_DIR)/llvm_sil + +.PHONY: clean +clean: + rm -f $(INFER_BUILD_DIR)/llvm_sil.ml $(BIN_DIR)/llvm_sil diff --git a/infer/src/llvm/llvm_sil.ml b/infer/src/llvm/llvm_sil.ml new file mode 100644 index 000000000..f74d336d3 --- /dev/null +++ b/infer/src/llvm/llvm_sil.ml @@ -0,0 +1,38 @@ +(* + * 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. + *) + +open Import +open Core_kernel +open Llair_ + +let main ~input ~output = + try + let program = Frontend.translate input in + Option.iter output ~f:(function + | "-" -> + Format.printf "%a@." Llair.fmt program + | filename -> + Out_channel.with_file filename ~f:(fun oc -> + let ff = Format.formatter_of_out_channel oc in + Format.fprintf ff "%a@." Llair.fmt program ) ) ; + Format.printf "@\nRESULT: Success@." + with exn -> + let bt = Caml.Printexc.get_raw_backtrace () in + ( match exn with + | Frontend.Invalid_llvm msg -> + Format.printf "@\nRESULT: Invalid input: %s@." msg + | Unimplemented msg -> + Format.printf "@\nRESULT: Unimplemented: %s@." msg + | Failure msg -> + Format.printf "@\nRESULT: Internal error: %s@." msg + | _ -> + Format.printf "@\nRESULT: Unknown error: %s@." (Caml.Printexc.to_string exn) ) ; + Caml.Printexc.raise_with_backtrace exn bt + + +;; +main ~input:Caml.Sys.argv.(1) ~output:(Some "-")