commit 52a3da8f897a0970a890cf6abb0e2e15382fe90e
Author: Xavier Bachelot <xavier(a)bachelot.org>
Date: Mon Sep 24 11:23:26 2018 +0200
Disable LLVM
lightspark-0.8.1-make_llvm_optional.patch | 366 ++++++++++++++++++++++++++++++
lightspark.spec | 9 +-
2 files changed, 373 insertions(+), 2 deletions(-)
---
diff --git a/lightspark-0.8.1-make_llvm_optional.patch
b/lightspark-0.8.1-make_llvm_optional.patch
new file mode 100644
index 0000000..c20f0b2
--- /dev/null
+++ b/lightspark-0.8.1-make_llvm_optional.patch
@@ -0,0 +1,366 @@
+From aa970bcfa33cf9e88647e8268c4a18f7670c8d75 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Ludger=20Kr=C3=A4mer?= <dbluelle(a)onlinehome.de>
+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 +
+ 8 files changed, 83 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 <llvm/ExecutionEngine/ExecutionEngine.h>
+ #ifndef LLVM_36
+ #include <llvm/ExecutionEngine/JIT.h>
+@@ -60,6 +61,7 @@
+ #ifdef HAVE_TRANSFORMS_SCALAR_GVN_H
+ # include <llvm/Transforms/Scalar/GVN.h>
+ #endif
++#endif
+ #include "logger.h"
+ #include "swftypes.h"
+ #include <sstream>
+@@ -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<llvm::Value*, STACK_TYPE> 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<std::pair<int, STACK_TYPE> >
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<unsigned int,block_info>& blocks,
BuilderWrapper& builderWrapper);
+-
++#endif
+ public:
+ #ifdef PROFILING_SUPPORT
+ std::map<method_info*,uint64_t> 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<ByteArray> message, _NR<ASObject> client,
_NR<Responder> 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 <
http://www.gnu.org/licenses/>.
+ **************************************************************************/
+
++#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
diff --git a/lightspark.spec b/lightspark.spec
index 3accbdd..f92276e 100644
--- a/lightspark.spec
+++ b/lightspark.spec
@@ -19,7 +19,7 @@
Name: lightspark
Version: 0.8.1
-Release: %{?pre:0.}3%{?git_snapshot:.%{date}git}%{?pre:.%{pre}}%{?dist}
+Release: %{?pre:0.}4%{?git_snapshot:.%{date}git}%{?pre:.%{pre}}%{?dist}
Summary: An alternative Flash Player implementation
License: LGPLv3+
URL:
http://lightspark.github.io/
@@ -34,6 +34,8 @@ Patch0: lightspark-0.7.2-fix_ffmpeg_include_dir.patch
Patch1: lightspark-0.8.1-ppc64_buildfix.patch
#
https://github.com/lightspark/lightspark/commit/3e0fe0862af60768716b04543...
Patch2: lightspark-0.8.1-big_endian_buildfix.patch
+#
https://github.com/lightspark/lightspark/commit/aa970bcfa33cf9e88647e8268...
+Patch3: lightspark-0.8.1-make_llvm_optional.patch
BuildRequires: boost-devel
BuildRequires: cmake3
@@ -48,7 +50,6 @@ BuildRequires: libcurl-devel
BuildRequires: libffi-devel
BuildRequires: libjpeg-turbo-devel
BuildRequires: librtmp-devel
-BuildRequires: llvm-devel >= 2.7
BuildRequires: nasm
BuildRequires: ncurses-devel
BuildRequires: pcre-devel
@@ -98,6 +99,7 @@ This is the Chromium compatible plugin for %{name}.
%patch0 -p1 -b .ffmpeg-include-dir
%patch1 -p1 -b .ppc64_buildfix
%patch2 -p1 -b .big_endian_buildfix
+%patch3 -p1 -b .disable_llvm
%build
@@ -150,6 +152,9 @@ desktop-file-validate
$RPM_BUILD_ROOT%{_datadir}/applications/%{name}.desktop
%changelog
+* Mon Sep 24 2018 Xavier Bachelot <xavier(a)bachelot.org> - 0.8.1-4
+- Add patch to disable llvm dependency.
+
* Tue Sep 04 2018 Xavier Bachelot <xavier(a)bachelot.org> - 0.8.1-3
- Fix build on ppc64.