JIT.h revision 4822bd4308ad8abf1a7127fe81d1d462f6d7a340
14822bd4308ad8abf1a7127fe81d1d462f6d7a340Jeff Cohen//===-- JIT.h - Abstract Execution Engine Interface -------------*- C++ -*-===//
22f51914d828b462b054195e73c75448f24e01979Jeff Cohen//
32f51914d828b462b054195e73c75448f24e01979Jeff Cohen//                     The LLVM Compiler Infrastructure
42f51914d828b462b054195e73c75448f24e01979Jeff Cohen//
52f51914d828b462b054195e73c75448f24e01979Jeff Cohen// This file was developed by Jeff Cohen and is distributed under the
62f51914d828b462b054195e73c75448f24e01979Jeff Cohen// University of Illinois Open Source 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
152f51914d828b462b054195e73c75448f24e01979Jeff Cohen#ifndef EXECUTION_ENGINE_JIT_H
162f51914d828b462b054195e73c75448f24e01979Jeff Cohen#define EXECUTION_ENGINE_JIT_H
172f51914d828b462b054195e73c75448f24e01979Jeff Cohen
182f51914d828b462b054195e73c75448f24e01979Jeff Cohen#include "llvm/ExecutionEngine/ExecutionEngine.h"
19f2dc4fd5de8c893ede4230e05ed2818c57a343eaJeff Cohen#include <cstdlib>
202f51914d828b462b054195e73c75448f24e01979Jeff Cohen
212f51914d828b462b054195e73c75448f24e01979Jeff Cohennamespace llvm {
222f51914d828b462b054195e73c75448f24e01979Jeff Cohen  extern void LinkInJIT();
232f51914d828b462b054195e73c75448f24e01979Jeff Cohen}
242f51914d828b462b054195e73c75448f24e01979Jeff Cohen
252f51914d828b462b054195e73c75448f24e01979Jeff Cohennamespace {
262f51914d828b462b054195e73c75448f24e01979Jeff Cohen  struct ForceJITLinking {
272f51914d828b462b054195e73c75448f24e01979Jeff Cohen    ForceJITLinking() {
282f51914d828b462b054195e73c75448f24e01979Jeff Cohen      // We must reference the passes in such a way that compilers will not
292f51914d828b462b054195e73c75448f24e01979Jeff Cohen      // delete it all as dead code, even with whole program optimization,
302f51914d828b462b054195e73c75448f24e01979Jeff Cohen      // yet is effectively a NO-OP. As the compiler isn't smart enough
312f51914d828b462b054195e73c75448f24e01979Jeff Cohen      // to know that getenv() never returns -1, this will do the job.
322f51914d828b462b054195e73c75448f24e01979Jeff Cohen      if (std::getenv("bar") != (char*) -1)
332f51914d828b462b054195e73c75448f24e01979Jeff Cohen        return;
342f51914d828b462b054195e73c75448f24e01979Jeff Cohen
352f51914d828b462b054195e73c75448f24e01979Jeff Cohen      llvm::LinkInJIT();
362f51914d828b462b054195e73c75448f24e01979Jeff Cohen    }
372f51914d828b462b054195e73c75448f24e01979Jeff Cohen  } ForceJITLinking;
382f51914d828b462b054195e73c75448f24e01979Jeff Cohen}
392f51914d828b462b054195e73c75448f24e01979Jeff Cohen
402f51914d828b462b054195e73c75448f24e01979Jeff Cohen#endif
41