From 1164c3b6e29d0217cb466ce64c0e4a4c711b6b56 Mon Sep 17 00:00:00 2001 From: Hunter Sezen Date: Thu, 27 Sep 2018 05:44:52 +0700 Subject: multimedia/lightspark: Added llvm patch. Signed-off-by: Willy Sudiarto Raharjo --- multimedia/lightspark/lightspark.SlackBuild | 7 +- multimedia/lightspark/llvm.patch | 366 ++++++++++++++++++++++++++++ 2 files changed, 372 insertions(+), 1 deletion(-) create mode 100644 multimedia/lightspark/llvm.patch (limited to 'multimedia') diff --git a/multimedia/lightspark/lightspark.SlackBuild b/multimedia/lightspark/lightspark.SlackBuild index bb900c932122..209f60e0d280 100644 --- a/multimedia/lightspark/lightspark.SlackBuild +++ b/multimedia/lightspark/lightspark.SlackBuild @@ -24,7 +24,7 @@ PRGNAM=lightspark VERSION=${VERSION:-0.8.1} -BUILD=${BUILD:-1} +BUILD=${BUILD:-2} TAG=${TAG:-_SBo} if [ -z "$ARCH" ]; then @@ -69,6 +69,11 @@ find -L . \ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; +# make llvm dependency optional (disabled by default) +# https://github.com/lightspark/lightspark/issues/336 +# https://github.com/lightspark/lightspark/commit/aa970bcfa33cf9e88647e8268c4a18f7670c8d75 +patch -p1 < $CWD/llvm.patch + mkdir -p build cd build cmake \ diff --git a/multimedia/lightspark/llvm.patch b/multimedia/lightspark/llvm.patch new file mode 100644 index 000000000000..fd210e598ca3 --- /dev/null +++ b/multimedia/lightspark/llvm.patch @@ -0,0 +1,366 @@ +From aa970bcfa33cf9e88647e8268c4a18f7670c8d75 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ludger=20Kr=C3=A4mer?= +Date: Mon, 17 Sep 2018 18:57:48 +0200 +Subject: [PATCH] make llvm dependency optional (disabled by default) + +--- + CMakeLists.txt | 82 ++++++++++++++++------------- + README | 5 +- + src/main.cpp | 5 +- + src/scripting/abc.cpp | 6 +++ + src/scripting/abc.h | 21 ++++++-- + src/scripting/abc_codesynt.cpp | 3 ++ + src/scripting/toplevel/toplevel.cpp | 2 + + 7 files changed, 82 insertions(+), 42 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index b76e228fe..6fc6d174e 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -194,6 +194,7 @@ SET(ENABLE_CURL TRUE CACHE BOOL "Enable CURL? (Required for Downloader functiona + SET(ENABLE_GLES2 FALSE CACHE BOOL "Build with OpenGLES 2.0 support instead of OpenGL") + SET(ENABLE_LIBAVCODEC TRUE CACHE BOOL "Enable libavcodec and dependent functionality?") + SET(ENABLE_RTMP TRUE CACHE BOOL "Enable librtmp and dependent functionality?") ++SET(ENABLE_LLVM FALSE CACHE BOOL "Enable support for llvm based jit execution (currently broken)") + SET(ENABLE_PROFILING FALSE CACHE BOOL "Enable profiling support? (Causes performance issues)") + SET(ENABLE_MEMORY_USAGE_PROFILING FALSE CACHE BOOL "Enable profiling of memory usage? (Causes performance issues)") + SET(PLUGIN_DIRECTORY "${LIBDIR}/mozilla/plugins" CACHE STRING "Directory to install Firefox plugin to") +@@ -217,40 +218,45 @@ SET(CMAKE_INSTALL_RPATH "${PRIVATELIBDIR}") + # Libraries we need + INCLUDE(FindPkgConfig REQUIRED) + INCLUDE(FindGettext REQUIRED) +-INCLUDE(FindLLVM REQUIRED) +-IF(${LLVM_STRING_VERSION} VERSION_LESS 2.8) +- MESSAGE(FATAL_ERROR "LLVM >=2.8 is required!") +-ENDIF(${LLVM_STRING_VERSION} VERSION_LESS 2.8) +-IF(${LLVM_STRING_VERSION} VERSION_EQUAL 2.9) +- MESSAGE(FATAL_ERROR "LLVM !=2.9 is required!") +-ENDIF(${LLVM_STRING_VERSION} VERSION_EQUAL 2.9) +-IF(${LLVM_STRING_VERSION} VERSION_EQUAL 2.8) +- ADD_DEFINITIONS(-DLLVM_28) +-ENDIF(${LLVM_STRING_VERSION} VERSION_EQUAL 2.8) +-IF(${LLVM_STRING_VERSION} VERSION_EQUAL 3.0) +- ADD_DEFINITIONS(-DLLVM_30) +-ENDIF(${LLVM_STRING_VERSION} VERSION_EQUAL 3.0) +-IF(${LLVM_STRING_VERSION} VERSION_GREATER 3.0) +- ADD_DEFINITIONS(-DLLVM_31) +-ENDIF(${LLVM_STRING_VERSION} VERSION_GREATER 3.0) +-IF(${LLVM_STRING_VERSION} VERSION_GREATER 3.3) +- ADD_DEFINITIONS(-DLLVM_34) +-ENDIF(${LLVM_STRING_VERSION} VERSION_GREATER 3.3) +-IF(${LLVM_STRING_VERSION} VERSION_GREATER 3.4) +- ADD_DEFINITIONS(-DLLVM_35) +-ENDIF(${LLVM_STRING_VERSION} VERSION_GREATER 3.4) +-IF(NOT (${LLVM_STRING_VERSION} VERSION_LESS 3.6)) +- ADD_DEFINITIONS(-DLLVM_36) +-ENDIF(NOT (${LLVM_STRING_VERSION} VERSION_LESS 3.6)) +-IF(NOT ${LLVM_STRING_VERSION} VERSION_LESS 3.7) +- ADD_DEFINITIONS(-DLLVM_37) +-ENDIF(NOT ${LLVM_STRING_VERSION} VERSION_LESS 3.7) +-IF(NOT ${LLVM_STRING_VERSION} VERSION_LESS 3.8) +- ADD_DEFINITIONS(-DLLVM_38) +-ENDIF(NOT ${LLVM_STRING_VERSION} VERSION_LESS 3.8) +-IF(NOT ${LLVM_STRING_VERSION} VERSION_LESS 5.0) +- ADD_DEFINITIONS(-DLLVM_50) +-ENDIF(NOT ${LLVM_STRING_VERSION} VERSION_LESS 5.0) ++ ++IF (ENABLE_LLVM) ++ ADD_DEFINITIONS(-DLLVM_ENABLED) ++ INCLUDE(FindLLVM REQUIRED) ++ IF(${LLVM_STRING_VERSION} VERSION_LESS 2.8) ++ MESSAGE(FATAL_ERROR "LLVM >=2.8 is required!") ++ ENDIF(${LLVM_STRING_VERSION} VERSION_LESS 2.8) ++ IF(${LLVM_STRING_VERSION} VERSION_EQUAL 2.9) ++ MESSAGE(FATAL_ERROR "LLVM !=2.9 is required!") ++ ENDIF(${LLVM_STRING_VERSION} VERSION_EQUAL 2.9) ++ IF(${LLVM_STRING_VERSION} VERSION_EQUAL 2.8) ++ ADD_DEFINITIONS(-DLLVM_28) ++ ENDIF(${LLVM_STRING_VERSION} VERSION_EQUAL 2.8) ++ IF(${LLVM_STRING_VERSION} VERSION_EQUAL 3.0) ++ ADD_DEFINITIONS(-DLLVM_30) ++ ENDIF(${LLVM_STRING_VERSION} VERSION_EQUAL 3.0) ++ IF(${LLVM_STRING_VERSION} VERSION_GREATER 3.0) ++ ADD_DEFINITIONS(-DLLVM_31) ++ ENDIF(${LLVM_STRING_VERSION} VERSION_GREATER 3.0) ++ IF(${LLVM_STRING_VERSION} VERSION_GREATER 3.3) ++ ADD_DEFINITIONS(-DLLVM_34) ++ ENDIF(${LLVM_STRING_VERSION} VERSION_GREATER 3.3) ++ IF(${LLVM_STRING_VERSION} VERSION_GREATER 3.4) ++ ADD_DEFINITIONS(-DLLVM_35) ++ ENDIF(${LLVM_STRING_VERSION} VERSION_GREATER 3.4) ++ IF(NOT (${LLVM_STRING_VERSION} VERSION_LESS 3.6)) ++ ADD_DEFINITIONS(-DLLVM_36) ++ ENDIF(NOT (${LLVM_STRING_VERSION} VERSION_LESS 3.6)) ++ IF(NOT ${LLVM_STRING_VERSION} VERSION_LESS 3.7) ++ ADD_DEFINITIONS(-DLLVM_37) ++ ENDIF(NOT ${LLVM_STRING_VERSION} VERSION_LESS 3.7) ++ IF(NOT ${LLVM_STRING_VERSION} VERSION_LESS 3.8) ++ ADD_DEFINITIONS(-DLLVM_38) ++ ENDIF(NOT ${LLVM_STRING_VERSION} VERSION_LESS 3.8) ++ IF(NOT ${LLVM_STRING_VERSION} VERSION_LESS 5.0) ++ ADD_DEFINITIONS(-DLLVM_50) ++ ENDIF(NOT ${LLVM_STRING_VERSION} VERSION_LESS 5.0) ++ENDIF(ENABLE_LLVM) ++ + INCLUDE(FindZLIB REQUIRED) + INCLUDE(FindFreetype REQUIRED) + IF(NOT(ENABLE_GLES2)) +@@ -405,7 +411,9 @@ IF(GTHREAD_FOUND AND (GTHREAD_VERSION VERSION_LESS 2.32.0)) + ADD_DEFINITIONS(-DHAVE_G_THREAD_INIT) + ENDIF(GTHREAD_FOUND AND (GTHREAD_VERSION VERSION_LESS 2.32.0)) + +-INCLUDE_DIRECTORIES(${LLVM_INCLUDE_DIR}) ++IF (ENABLE_LLVM) ++ INCLUDE_DIRECTORIES(${LLVM_INCLUDE_DIR}) ++ENDIF(ENABLE_LLVM) + INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIR}) + INCLUDE_DIRECTORIES(${FREETYPE_INCLUDE_DIRS}) + IF(ENABLE_GLES2) +@@ -445,7 +453,9 @@ IF(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + SET(CMAKE_SHARED_LINKER_FLAGS_RELEASE "-s") + ENDIF(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + +-LINK_DIRECTORIES(${LLVM_LIB_DIR}) ++IF(ENABLE_LLVM) ++ LINK_DIRECTORIES(${LLVM_LIB_DIR}) ++ENDIF(ENABLE_LLVM) + + IF(ENABLE_CURL) + pkg_check_modules(CURL REQUIRED libcurl) +diff --git a/README b/README +index 231d54b7b..0d693e98d 100644 +--- a/README ++++ b/README +@@ -10,10 +10,13 @@ INSTALLATION + ============ + + To compile this software you need to install development packages for +-llvm (version 2.8 or >= 3.0), opengl, curl, zlib, libavcodec, libavresample ++opengl, curl, zlib, libavcodec, libavresample + libglew, pcre, librtmp, cairo, libboost-filesystem, + sdl2, sdl2_mixer, libjpeg, libavformat, pango, liblzma + ++If jit compilation using llvm is enabled(disabled by default), ++you also need the development packages for llvm (version 2.8 or >= 3.0) ++ + If compiling the PPAPI (Chromium) plugin is enabled (on by default), keep in mind that + it will replace the adobe flash plugin, as only one flash plugin is allowed in chromium. + +diff --git a/src/main.cpp b/src/main.cpp +index cb3c7573b..4de0e748e 100644 +--- a/src/main.cpp ++++ b/src/main.cpp +@@ -342,7 +342,10 @@ int main(int argc, char* argv[]) + if(fileName==NULL) + { + LOG(LOG_ERROR, "Usage: " << argv[0] << " [--url|-u http://loader.url/file.swf]" << +- " [--disable-interpreter|-ni] [--enable-fast-interpreter|-fi] [--enable-jit|-j]" << ++ " [--disable-interpreter|-ni] [--enable-fast-interpreter|-fi]" << ++#ifdef LLVM_ENABLED ++ " [--enable-jit|-j]" << ++#endif + " [--log-level|-l 0-4] [--parameters-file|-p params-file] [--security-sandbox|-s sandbox]" << + " [--exit-on-error] [--HTTP-cookies cookie] [--air] [--avmplus] [--disable-rendering]" << + #ifdef PROFILING_SUPPORT +diff --git a/src/scripting/abc.cpp b/src/scripting/abc.cpp +index c99f89d6e..9e8d36fdc 100644 +--- a/src/scripting/abc.cpp ++++ b/src/scripting/abc.cpp +@@ -23,6 +23,7 @@ + + #include "compat.h" + ++#ifdef LLVM_ENABLED + #include + #ifndef LLVM_36 + #include +@@ -60,6 +61,7 @@ + #ifdef HAVE_TRANSFORMS_SCALAR_GVN_H + # include + #endif ++#endif + #include "logger.h" + #include "swftypes.h" + #include +@@ -1940,6 +1942,7 @@ void ABCVm::Run(ABCVm* th) + #endif + if(th->m_sys->useJit) + { ++#ifdef LLVM_ENABLED + #ifdef LLVM_31 + llvm::TargetOptions Opts; + #ifndef LLVM_34 +@@ -2006,6 +2009,7 @@ void ABCVm::Run(ABCVm* th) + th->FPM->add(llvm::createDeadStoreEliminationPass()); + + th->registerFunctions(); ++#endif + } + th->registerClasses(); + +@@ -2052,11 +2056,13 @@ void ABCVm::Run(ABCVm* th) + snapshotCount++; + #endif + } ++#ifdef LLVM_ENABLED + if(th->m_sys->useJit) + { + th->ex->clearAllGlobalMappings(); + delete th->module; + } ++#endif + #ifndef NDEBUG + inStartupOrClose= true; + #endif +diff --git a/src/scripting/abc.h b/src/scripting/abc.h +index 63bf51b05..467eccb5f 100644 +--- a/src/scripting/abc.h ++++ b/src/scripting/abc.h +@@ -34,6 +34,7 @@ + #include "scripting/flash/system/flashsystem.h" + #include "scripting/toplevel/toplevel.h" + ++#ifdef LLVM_ENABLED + namespace llvm { + class ExecutionEngine; + #ifdef LLVM_36 +@@ -50,9 +51,12 @@ namespace legacy { + class Value; + class LLVMContext; + } ++#endif // LLVM_ENABLED + + namespace lightspark + { ++ ++#ifdef LLVM_ENABLED + struct block_info; + #ifdef LLVM_28 + typedef const llvm::Type* LLVMTYPE; +@@ -60,8 +64,6 @@ typedef const llvm::Type* LLVMTYPE; + typedef llvm::Type* LLVMTYPE; + #endif + +-bool isVmThread(); +- + std::ostream& operator<<(std::ostream& o, const block_info& b); + + typedef std::pair stack_entry; +@@ -69,6 +71,9 @@ inline stack_entry make_stack_entry(llvm::Value* v, STACK_TYPE t) + { + return std::make_pair(v, t); + } ++#endif ++ ++bool isVmThread(); + + class method_info + { +@@ -78,6 +83,7 @@ friend class SyntheticFunction; + private: + struct method_info_simple info; + ++#ifdef LLVM_ENABLED + typedef std::vector > static_stack_types_vector; + //Helper function to sync only part of the static stack to the memory + void consumeStackForRTMultiname(static_stack_types_vector& stack, int multinameIndex) const; +@@ -92,7 +98,7 @@ friend class SyntheticFunction; + struct BuilderWrapper; + //Does analysis on function code to find optimization chances + void doAnalysis(std::map& blocks, BuilderWrapper& builderWrapper); +- ++#endif + public: + #ifdef PROFILING_SUPPORT + std::map profCalls; +@@ -104,7 +110,9 @@ friend class SyntheticFunction; + SyntheticFunction::synt_function f; + ABCContext* context; + method_body_info* body; ++#ifdef LLVM_ENABLED + SyntheticFunction::synt_function synt_method(SystemState* sys); ++#endif + bool needsArgs() { return info.needsArgs(); } + bool needsActivation() { return info.needsActivation(); } + bool needsRest() { return info.needsRest(); } +@@ -121,7 +129,9 @@ friend class SyntheticFunction; + const Type* returnType; + bool hasExplicitTypes; + method_info(): ++#ifdef LLVM_ENABLED + llvmf(NULL), ++#endif + #ifdef PROFILING_SUPPORT + profTime(0), + validProfName(false), +@@ -469,6 +479,7 @@ friend class asAtom; + static void constructFunction(asAtom & ret, call_context* th, asAtom& f, asAtom* args, int argslen); + void parseRPCMessage(_R message, _NR client, _NR responder); + ++#ifdef LLVM_ENABLED + //Opcode tables + void register_table(LLVMTYPE ret_type,typed_opcode_handler* table, int table_len); + static opcode_handler opcode_table_args_pointer_2int[]; +@@ -479,7 +490,7 @@ friend class asAtom; + static typed_opcode_handler opcode_table_void[]; + static typed_opcode_handler opcode_table_voidptr[]; + static typed_opcode_handler opcode_table_bool_t[]; +- ++#endif + + //Synchronization + Mutex event_queue_mutex; +@@ -873,6 +884,7 @@ friend class asAtom; + + MemoryAccount* vmDataMemory; + ++#ifdef LLVM_ENABLED + llvm::ExecutionEngine* ex; + llvm::Module* module; + +@@ -882,6 +894,7 @@ friend class asAtom; + llvm::FunctionPassManager* FPM; + #endif + llvm::LLVMContext& llvm_context(); ++#endif + + ABCVm(SystemState* s, MemoryAccount* m) DLL_PUBLIC; + /** +diff --git a/src/scripting/abc_codesynt.cpp b/src/scripting/abc_codesynt.cpp +index 5b71b289e..6ee977b3e 100644 +--- a/src/scripting/abc_codesynt.cpp ++++ b/src/scripting/abc_codesynt.cpp +@@ -17,6 +17,8 @@ + along with this program. If not, see . + **************************************************************************/ + ++#ifdef LLVM_ENABLED ++ + #ifdef LLVM_28 + #define alignof alignOf + #define LLVMMAKEARRAYREF(T) T +@@ -4783,3 +4785,4 @@ void ABCVm::wrong_exec_pos() + { + assert_and_throw(false && "wrong_exec_pos"); + } ++#endif //LLVM_ENABLED +diff --git a/src/scripting/toplevel/toplevel.cpp b/src/scripting/toplevel/toplevel.cpp +index 55ee6028f..c2c5bce10 100644 +--- a/src/scripting/toplevel/toplevel.cpp ++++ b/src/scripting/toplevel/toplevel.cpp +@@ -345,6 +345,7 @@ void SyntheticFunction::call(asAtom& ret, asAtom& obj, asAtom *args, uint32_t nu + ABCVm::optimizeFunction(this); + } + ++#ifdef LLVM_ENABLED + //Temporarily disable JITting + if(getSystemState()->useJit && mi->body->exceptions.size()==0 && ((hit_count>=jit_hit_threshold && codeStatus==method_body_info::OPTIMIZED) || getSystemState()->useInterpreter==false)) + { +@@ -352,6 +353,7 @@ void SyntheticFunction::call(asAtom& ret, asAtom& obj, asAtom *args, uint32_t nu + val=mi->synt_method(getSystemState()); + assert(val); + } ++#endif + ++mi->body->hit_count; + + //Prepare arguments -- cgit v1.2.3