Jupyter kernel support dylib.

This commit is contained in:
Axel Naumann 2015-12-09 21:01:04 +01:00 committed by sftnight
parent 6eac3e3159
commit 2f2c2151c0
2 changed files with 88 additions and 0 deletions

View File

@ -0,0 +1,55 @@
#------------------------------------------------------------------------------
# CLING - the C++ LLVM-based InterpreterG :)
#
# This file is dual-licensed: you can choose to license it under the University
# of Illinois Open Source License or the GNU Lesser General Public License. See
# LICENSE.TXT for details.
#------------------------------------------------------------------------------
set(SOURCES
Kernel.cpp
)
set(LIBS
clangBasic
clangAST
clangFrontend
clingInterpreter
clingUtils
)
if( LLVM_ENABLE_PIC )
set(ENABLE_SHARED SHARED)
endif()
if(WIN32)
set(output_name "libclingJupyter")
else()
set(output_name "clingJupyter")
endif()
add_clang_library(libclingJupyter ${ENABLE_SHARED} ${ENABLE_STATIC}
OUTPUT_NAME ${output_name}
${SOURCES}
# DEPENDS clang-headers
LINK_LIBS
${LIBS}
LINK_COMPONENTS
Core
Support
)
if(ENABLE_SHARED)
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
set(LIBCLINGJUPYTER_LINK_FLAGS " -Wl,-compatibility_version -Wl,1")
if (DEFINED ${LLVM_SUBMIT_VERSION})
set(LIBCLINGJUPYTER_LINK_FLAGS
"${LIBCLINGJUPYTER_LINK_FLAGS} -Wl,-current_version -Wl,${LLVM_SUBMIT_VERSION}.${LLVM_SUBMIT_SUBVERSION}")
endif()
set_property(TARGET libclingJupyter APPEND_STRING PROPERTY
LINK_FLAGS ${LIBCLINGJUPYTER_LINK_FLAGS})
endif()
endif()

33
tools/Jupyter/Kernel.cpp Normal file
View File

@ -0,0 +1,33 @@
//
// Created by Axel Naumann on 09/12/15.
//
#include "cling/Interpreter/Interpreter.h"
#include "cling/Interpreter/Value.h"
extern "C" {
///\{
///\name Cling4CTypes
/// The Python compatible view of cling
/// The Interpreter object cast to void*
using TheInterpreter = void ;
/// Create an interpreter object.
TheInterpreter *cling_create(int argc, const char *argv[], const char* llvmdir) {
return new cling::Interpreter(argc, argv, llvmdir);
}
/// Evaluate a string of code. Returns 0 on success.
int cling_eval(TheInterpreter *interpVP, const char *code) {
cling::Interpreter *interp = (cling::Interpreter *) interpVP;
printf("Interpreter %s about to run \"%s\"\n", interp->getVersion(), code);
cling::Value V;
cling::Interpreter::CompilationResult Res = interp->evaluate(code, V);
if (Res != cling::Interpreter::kSuccess)
return 1;
return 0;
}
///\}
} // extern "C"