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