14822bd4308ad8abf1a7127fe81d1d462f6d7a340Jeff Cohen//===-- JIT.h - Abstract Execution Engine Interface -------------*- C++ -*-===//
22f51914d828b462b054195e73c75448f24e01979Jeff Cohen//
32f51914d828b462b054195e73c75448f24e01979Jeff Cohen//                     The LLVM Compiler Infrastructure
42f51914d828b462b054195e73c75448f24e01979Jeff Cohen//
57ed47a13356daed2a34cd2209a31f92552e3bdd8Chris Lattner// This file is distributed under the University of Illinois Open Source
67ed47a13356daed2a34cd2209a31f92552e3bdd8Chris Lattner// License. See LICENSE.TXT for details.
72f51914d828b462b054195e73c75448f24e01979Jeff Cohen//
82f51914d828b462b054195e73c75448f24e01979Jeff Cohen//===----------------------------------------------------------------------===//
92f51914d828b462b054195e73c75448f24e01979Jeff Cohen//
10f2dc4fd5de8c893ede4230e05ed2818c57a343eaJeff Cohen// This file forces the JIT to link in on certain operating systems.
112f51914d828b462b054195e73c75448f24e01979Jeff Cohen// (Windows).
122f51914d828b462b054195e73c75448f24e01979Jeff Cohen//
132f51914d828b462b054195e73c75448f24e01979Jeff Cohen//===----------------------------------------------------------------------===//
142f51914d828b462b054195e73c75448f24e01979Jeff Cohen
15674be02d525d4e24bc6943ed9274958c580bcfbcJakub Staszak#ifndef LLVM_EXECUTIONENGINE_JIT_H
16674be02d525d4e24bc6943ed9274958c580bcfbcJakub Staszak#define LLVM_EXECUTIONENGINE_JIT_H
172f51914d828b462b054195e73c75448f24e01979Jeff Cohen
182f51914d828b462b054195e73c75448f24e01979Jeff Cohen#include "llvm/ExecutionEngine/ExecutionEngine.h"
19f2dc4fd5de8c893ede4230e05ed2818c57a343eaJeff Cohen#include <cstdlib>
202f51914d828b462b054195e73c75448f24e01979Jeff Cohen
21e46161f10c3e0c640b22e446b873df8b01413f52Bob Wilsonextern "C" void LLVMLinkInJIT();
222f51914d828b462b054195e73c75448f24e01979Jeff Cohen
232f51914d828b462b054195e73c75448f24e01979Jeff Cohennamespace {
242f51914d828b462b054195e73c75448f24e01979Jeff Cohen  struct ForceJITLinking {
252f51914d828b462b054195e73c75448f24e01979Jeff Cohen    ForceJITLinking() {
26bbd8e5d79ac4cdc5d205230eac88f69fd309df53Eli Bendersky      // We must reference JIT in such a way that compilers will not
272f51914d828b462b054195e73c75448f24e01979Jeff Cohen      // delete it all as dead code, even with whole program optimization,
282f51914d828b462b054195e73c75448f24e01979Jeff Cohen      // yet is effectively a NO-OP. As the compiler isn't smart enough
292f51914d828b462b054195e73c75448f24e01979Jeff Cohen      // to know that getenv() never returns -1, this will do the job.
302f51914d828b462b054195e73c75448f24e01979Jeff Cohen      if (std::getenv("bar") != (char*) -1)
312f51914d828b462b054195e73c75448f24e01979Jeff Cohen        return;
322f51914d828b462b054195e73c75448f24e01979Jeff Cohen
33e46161f10c3e0c640b22e446b873df8b01413f52Bob Wilson      LLVMLinkInJIT();
342f51914d828b462b054195e73c75448f24e01979Jeff Cohen    }
352f51914d828b462b054195e73c75448f24e01979Jeff Cohen  } ForceJITLinking;
362f51914d828b462b054195e73c75448f24e01979Jeff Cohen}
372f51914d828b462b054195e73c75448f24e01979Jeff Cohen
382f51914d828b462b054195e73c75448f24e01979Jeff Cohen#endif
39