libv8 3.16.14.3 → 3.16.14.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +3 -3
- data/README.md +26 -15
- data/ext/libv8/builder.rb +32 -20
- data/ext/libv8/compiler.rb +30 -38
- data/ext/libv8/compiler/clang.rb +15 -0
- data/ext/libv8/compiler/gcc.rb +15 -0
- data/ext/libv8/compiler/generic_compiler.rb +38 -0
- data/ext/libv8/patcher.rb +55 -0
- data/lib/libv8/version.rb +1 -1
- data/libv8.gemspec +1 -0
- data/patches/{do-not-imply-vfp3-and-armv7.patch → arm/do-not-imply-vfp3-and-armv7.patch} +0 -0
- data/patches/arm/do-not-use-vfp2.patch +13 -0
- data/patches/clang/no-unused-private-field.patch +28 -0
- data/patches/clang33/silence-nested-anon-types-and-unused-function-warnings.patch +28 -0
- data/patches/clang51/no-unused-variable.patch +12 -0
- data/patches/fPIC-for-static.patch +1 -1
- data/patches/{gcc48-wno-unused-local-typedefs.patch → gcc48/gcc48-wno-unused-local-typedefs.patch} +0 -0
- metadata +1942 -1955
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9b5ca0adef389868bd9b38aa3838d79fd4ce0b86
|
4
|
+
data.tar.gz: 9d9b1024787acb57297050fc139a31692b6fce4f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0a7f48927eaef75a822eca0bd2a8e841f87d4d22784bc989e99577496430f96ded65c6f1eb12e7e4a20335c7b3fb4f14c606e71e8ec77064323abd8b90b06667
|
7
|
+
data.tar.gz: e4cecdcc0c59c16ac14b275a969c6495be3b459fde3b93fabb886a8036e32390b5db1d91fa62be170050ea0e2e384ce0b9f9a428046510899aa347a359f0adaf
|
data/.travis.yml
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
rvm:
|
2
2
|
- 2.0.0
|
3
|
-
- 1.
|
3
|
+
- 2.1.0
|
4
4
|
- 1.9.3
|
5
|
-
- rbx-
|
5
|
+
- rbx-2
|
6
6
|
notifications:
|
7
7
|
recipients:
|
8
8
|
- cowboyd@thefrontside.net
|
9
9
|
- bordjukov@gmail.com
|
10
10
|
before_install:
|
11
11
|
- sudo apt-get update
|
12
|
-
- sudo apt-get install git-svn
|
12
|
+
- sudo apt-get install git-svn
|
data/README.md
CHANGED
@@ -21,10 +21,13 @@ platforms.
|
|
21
21
|
* x86_64-darwin10.7.0
|
22
22
|
* x86_64-darwin-10
|
23
23
|
* x86_64-darwin-11
|
24
|
-
* x86_64-darwin-
|
24
|
+
* x86_64-darwin-12
|
25
|
+
* x86_64-darwin-13
|
25
26
|
* x86_64-linux
|
26
27
|
* x86-linux
|
27
28
|
* x86_64-freebsd-9
|
29
|
+
* x86_64-freebsd-10
|
30
|
+
* x86_64-solaris-2.11
|
28
31
|
|
29
32
|
If you don't see your platform on this list, first, make sure that it
|
30
33
|
installs from source, and second talk to us about setting up a binary
|
@@ -38,19 +41,6 @@ own point release after the main v8 version. So libv8 `3.11.8.5` and
|
|
38
41
|
think about it would be that `3.11.8.14` is the 14th release of the
|
39
42
|
libv8 rubygem based on v8 version `3.11.8`
|
40
43
|
|
41
|
-
### Using a git version
|
42
|
-
|
43
|
-
If you want to use the latest unstable version of the gem you can do
|
44
|
-
so by specifying the git repo as a gem source. Just add the following
|
45
|
-
to your `Gemfile`:
|
46
|
-
|
47
|
-
```Ruby
|
48
|
-
gem "libv8", git: "git://github.com/cowboyd/libv8.git", submodules: true
|
49
|
-
```
|
50
|
-
|
51
|
-
You can find more info on using a git repo as a gem source in
|
52
|
-
[Bundler's documentation](http://bundler.io/v1.3/git.html).
|
53
|
-
|
54
44
|
#### Source and Binary Releases
|
55
45
|
|
56
46
|
Starting with libv8 `3.11.8.0`, all even point releases contain
|
@@ -70,6 +60,19 @@ distribution
|
|
70
60
|
|
71
61
|
> This step release system is a workaround to carlhuda/bundler#1537
|
72
62
|
|
63
|
+
### Using a git version
|
64
|
+
|
65
|
+
If you want to use the latest unstable version of the gem you can do
|
66
|
+
so by specifying the git repo as a gem source. Just make sure you have
|
67
|
+
`git-svn` and add the following to your `Gemfile`:
|
68
|
+
|
69
|
+
```Ruby
|
70
|
+
gem "libv8", git: "git://github.com/cowboyd/libv8.git", submodules: true
|
71
|
+
```
|
72
|
+
|
73
|
+
You can find more info on using a git repo as a gem source in
|
74
|
+
[Bundler's documentation](http://bundler.io/v1.3/git.html).
|
75
|
+
|
73
76
|
### What if I can't install from source?
|
74
77
|
|
75
78
|
If you can fix the "Makefile" so that it correctly compiles for your
|
@@ -88,7 +91,7 @@ To get the source, these commands will get you started:
|
|
88
91
|
Because libv8 is the interface for the V8 engine used by
|
89
92
|
[therubyracer](http://github.com/cowboyd/therubyracer), you may need
|
90
93
|
to use libv8, even if you have V8 installed already. If you wish to
|
91
|
-
use your own V8 installation, rather than have it built for you, use
|
94
|
+
use your own V8 installation, rather than have it built for you, use
|
92
95
|
the `--with-system-v8` option.
|
93
96
|
|
94
97
|
Using RubyGems:
|
@@ -102,6 +105,14 @@ Using Bundler (in your Gemfile):
|
|
102
105
|
Please note that if you intend to run your own V8, you must install
|
103
106
|
both V8 *and its headers* (found in libv8-dev for Debian distros).
|
104
107
|
|
108
|
+
### Bring your own compiler
|
109
|
+
|
110
|
+
You can specify a compiler of your choice by either setting the `CXX`
|
111
|
+
environment variable before compilation, or by adding the
|
112
|
+
`--with-cxx=<compiler>` option to the bundle configuration:
|
113
|
+
|
114
|
+
bundle config build.libv8 --with-cxx=clang++
|
115
|
+
|
105
116
|
### About
|
106
117
|
|
107
118
|
This project spun off of
|
data/ext/libv8/builder.rb
CHANGED
@@ -3,13 +3,18 @@ require File.expand_path '../compiler', __FILE__
|
|
3
3
|
require File.expand_path '../arch', __FILE__
|
4
4
|
require File.expand_path '../make', __FILE__
|
5
5
|
require File.expand_path '../checkout', __FILE__
|
6
|
+
require File.expand_path '../patcher', __FILE__
|
6
7
|
|
7
8
|
module Libv8
|
8
9
|
class Builder
|
9
10
|
include Libv8::Arch
|
10
|
-
include Libv8::Compiler
|
11
11
|
include Libv8::Make
|
12
12
|
include Libv8::Checkout
|
13
|
+
include Libv8::Patcher
|
14
|
+
|
15
|
+
def initialize
|
16
|
+
@compiler = choose_compiler
|
17
|
+
end
|
13
18
|
|
14
19
|
def make_flags(*flags)
|
15
20
|
profile = enable_config('debug') ? 'debug' : 'release'
|
@@ -17,33 +22,38 @@ module Libv8
|
|
17
22
|
# FreeBSD uses gcc 4.2 by default which leads to
|
18
23
|
# compilation failures due to warnings about aliasing.
|
19
24
|
# http://svnweb.freebsd.org/ports/head/lang/v8/Makefile?view=markup
|
20
|
-
flags << "strictaliasing=off" if
|
25
|
+
flags << "strictaliasing=off" if @compiler.is_a?(Compiler::GCC) and @compiler.version < '4.4'
|
21
26
|
|
22
27
|
# Avoid compilation failures on the Raspberry Pi.
|
23
|
-
flags << "vfp2=off vfp3=off" if
|
28
|
+
flags << "vfp2=off vfp3=off" if @compiler.target.include? "arm"
|
24
29
|
|
25
30
|
# FIXME: Determine when to activate this instead of leaving it on by
|
26
31
|
# default.
|
27
|
-
flags << "hardfp=on" if
|
32
|
+
flags << "hardfp=on" if @compiler.target.include? "arm"
|
28
33
|
|
29
34
|
# Fix Malformed archive issue caused by GYP creating thin archives by
|
30
35
|
# default.
|
31
36
|
flags << "ARFLAGS.target=crs"
|
32
37
|
|
33
38
|
# Solaris / Smart OS requires additional -G flag to use with -fPIC
|
34
|
-
flags << "CFLAGS=-G" if
|
39
|
+
flags << "CFLAGS=-G" if @compiler.target =~ /solaris/
|
40
|
+
|
41
|
+
# Disable werror as this version of v8 is getting difficult to maintain
|
42
|
+
# with it on
|
43
|
+
flags << 'werror=no'
|
35
44
|
|
36
45
|
"#{libv8_arch}.#{profile} #{flags.join ' '}"
|
37
46
|
end
|
38
47
|
|
39
48
|
def build_libv8!
|
40
49
|
Dir.chdir(V8_Source) do
|
50
|
+
fail 'No compilers available' if @compiler.nil?
|
41
51
|
checkout!
|
42
52
|
setup_python!
|
43
53
|
setup_build_deps!
|
44
|
-
|
54
|
+
patch! *patch_directories_for(@compiler)
|
45
55
|
print_build_info
|
46
|
-
puts `env CXX=#{compiler} LINK=#{compiler} #{make} #{make_flags}`
|
56
|
+
puts `env CXX=#{@compiler} LINK=#{@compiler} #{make} #{make_flags}`
|
47
57
|
end
|
48
58
|
return $?.exitstatus
|
49
59
|
end
|
@@ -69,19 +79,21 @@ module Libv8
|
|
69
79
|
`ln -fs #{GYP_Source} build/gyp`
|
70
80
|
end
|
71
81
|
|
72
|
-
|
73
|
-
File.open(".applied_patches", File::RDWR|File::CREAT) do |f|
|
74
|
-
available_patches = Dir.glob(File.expand_path '../../../patches/*.patch', __FILE__).sort
|
75
|
-
applied_patches = f.readlines.map(&:chomp)
|
82
|
+
private
|
76
83
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
end
|
84
|
+
def choose_compiler
|
85
|
+
compiler_names = if with_config('cxx') then [with_config('cxx')]
|
86
|
+
elsif ENV['CXX'] then [ENV['CXX']]
|
87
|
+
else Compiler::KNOWN_COMPILERS
|
88
|
+
end
|
83
89
|
|
84
|
-
|
90
|
+
available_compilers = Compiler.available_compilers(*compiler_names)
|
91
|
+
compatible_compilers = available_compilers.select(&:compatible?)
|
92
|
+
|
93
|
+
unless compatible_compilers.empty? then compatible_compilers
|
94
|
+
else available_compilers
|
95
|
+
end.first
|
96
|
+
end
|
85
97
|
|
86
98
|
def python_version
|
87
99
|
if system 'which python 2>&1 > /dev/null'
|
@@ -96,8 +108,8 @@ module Libv8
|
|
96
108
|
|
97
109
|
puts "Using python #{python_version}"
|
98
110
|
|
99
|
-
puts "Using compiler: #{compiler}"
|
100
|
-
unless
|
111
|
+
puts "Using compiler: #{@compiler} (#{@compiler.name} version #{@compiler.version})"
|
112
|
+
unless @compiler.compatible?
|
101
113
|
warn "Unable to find a compiler officially supported by v8."
|
102
114
|
warn "It is recommended to use GCC v4.4 or higher"
|
103
115
|
end
|
data/ext/libv8/compiler.rb
CHANGED
@@ -1,50 +1,42 @@
|
|
1
|
+
require 'mkmf'
|
2
|
+
require 'open3'
|
3
|
+
require File.expand_path '../compiler/generic_compiler', __FILE__
|
4
|
+
require File.expand_path '../compiler/gcc', __FILE__
|
5
|
+
require File.expand_path '../compiler/clang', __FILE__
|
6
|
+
|
1
7
|
module Libv8
|
2
8
|
module Compiler
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
cc ||= check_gcc_compiler ENV["CXX"]
|
9
|
-
cc ||= check_gcc_compiler "g++"
|
9
|
+
KNOWN_COMPILERS = [
|
10
|
+
'c++',
|
11
|
+
'g++48', 'g++46', 'g++44', 'g++',
|
12
|
+
'clang++',
|
13
|
+
]
|
10
14
|
|
11
|
-
|
12
|
-
# These are common on BSD's after
|
13
|
-
# GCC has been installed by a port
|
14
|
-
cc ||= check_gcc_compiler "g++44"
|
15
|
-
cc ||= check_gcc_compiler "g++46"
|
16
|
-
cc ||= check_gcc_compiler "g++48"
|
17
|
-
|
18
|
-
if cc.nil?
|
19
|
-
warn "Unable to find a compiler officially supported by v8."
|
20
|
-
warn "It is recommended to use GCC v4.4 or higher"
|
21
|
-
@compiler = cc = 'g++'
|
22
|
-
end
|
23
|
-
|
24
|
-
@compiler = cc
|
25
|
-
end
|
15
|
+
module_function
|
26
16
|
|
27
|
-
|
17
|
+
def system_compilers
|
18
|
+
available_compilers *Compiler::KNOWN_COMPILERS
|
28
19
|
end
|
29
20
|
|
30
|
-
def
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
compiler = `which #{name} 2> /dev/null`
|
35
|
-
return nil unless $?.success?
|
36
|
-
|
37
|
-
compiler.chomp!
|
38
|
-
return nil unless `#{compiler} --version` =~ /([0-9]\.[0-9]\.[0-9])/
|
21
|
+
def available_compilers(*compiler_names)
|
22
|
+
compiler_paths = compiler_names.map { |name| find name }.reject &:nil?
|
23
|
+
end
|
39
24
|
|
40
|
-
|
41
|
-
|
25
|
+
def find(name)
|
26
|
+
return nil if name.empty?
|
27
|
+
path, _, status = Open3.capture3 "which #{name}"
|
28
|
+
path.chomp!
|
29
|
+
determine_type(path).new(path) if status.success?
|
42
30
|
end
|
43
31
|
|
44
|
-
def
|
45
|
-
|
46
|
-
|
47
|
-
|
32
|
+
def determine_type(compiler_path)
|
33
|
+
compiler_version = Open3.capture3("#{compiler_path} -v")[0..1].join
|
34
|
+
|
35
|
+
case compiler_version
|
36
|
+
when /\bclang\b/i then Clang
|
37
|
+
when /^gcc/i then GCC
|
38
|
+
else GenericCompiler
|
39
|
+
end
|
48
40
|
end
|
49
41
|
end
|
50
42
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Libv8
|
2
|
+
module Compiler
|
3
|
+
class GenericCompiler
|
4
|
+
VERSION_REGEXP = /(\d+\.\d+(\.\d+)*)/
|
5
|
+
TARGET_REGEXP = /Target: ([a-z0-9\-_.]*)/
|
6
|
+
|
7
|
+
def initialize(path)
|
8
|
+
@path = path
|
9
|
+
end
|
10
|
+
|
11
|
+
def name
|
12
|
+
File.basename @path
|
13
|
+
end
|
14
|
+
|
15
|
+
def to_s
|
16
|
+
@path
|
17
|
+
end
|
18
|
+
|
19
|
+
def version
|
20
|
+
call('-v')[0..1].join =~ VERSION_REGEXP
|
21
|
+
$1
|
22
|
+
end
|
23
|
+
|
24
|
+
def target
|
25
|
+
call('-v')[0..1].join =~ TARGET_REGEXP
|
26
|
+
$1
|
27
|
+
end
|
28
|
+
|
29
|
+
def compatible?
|
30
|
+
false
|
31
|
+
end
|
32
|
+
|
33
|
+
def call(*arguments)
|
34
|
+
Open3.capture3 arguments.unshift(@path).join(' ')
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Libv8
|
2
|
+
module Patcher
|
3
|
+
PATCH_DIRECTORY = File.expand_path '../../../patches', __FILE__
|
4
|
+
|
5
|
+
module_function
|
6
|
+
|
7
|
+
def patch_directories_for(compiler)
|
8
|
+
patch_directories = []
|
9
|
+
|
10
|
+
case
|
11
|
+
when compiler.target =~ /arm/
|
12
|
+
patch_directories << 'arm'
|
13
|
+
end
|
14
|
+
|
15
|
+
case compiler
|
16
|
+
when Compiler::GCC
|
17
|
+
patch_directories << 'gcc48' if compiler.version >= '4.8'
|
18
|
+
when Compiler::Clang
|
19
|
+
patch_directories << 'clang'
|
20
|
+
patch_directories << 'clang33' if compiler.version >= '3.3'
|
21
|
+
patch_directories << 'clang51' if compiler.version >= '5.1'
|
22
|
+
end
|
23
|
+
|
24
|
+
patch_directories
|
25
|
+
end
|
26
|
+
|
27
|
+
def patch_directories(*additional_directories)
|
28
|
+
absolute_paths = [PATCH_DIRECTORY]
|
29
|
+
|
30
|
+
additional_directories.each do |directory|
|
31
|
+
absolute_paths << File.join(PATCH_DIRECTORY, directory)
|
32
|
+
end
|
33
|
+
|
34
|
+
absolute_paths.uniq
|
35
|
+
end
|
36
|
+
|
37
|
+
def patches(*additional_directories)
|
38
|
+
patch_directories(*additional_directories).map do |directory|
|
39
|
+
Dir.glob(File.join directory, '*.patch')
|
40
|
+
end.flatten.sort
|
41
|
+
end
|
42
|
+
|
43
|
+
def patch!(*additional_directories)
|
44
|
+
File.open(".applied_patches", File::RDWR|File::CREAT) do |f|
|
45
|
+
available_patches = patches *additional_directories
|
46
|
+
applied_patches = f.readlines.map(&:chomp)
|
47
|
+
|
48
|
+
(available_patches - applied_patches).each do |patch|
|
49
|
+
`patch -p1 -N < #{patch}`
|
50
|
+
f.puts patch
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
data/lib/libv8/version.rb
CHANGED
data/libv8.gemspec
CHANGED
@@ -32,5 +32,6 @@ Gem::Specification.new do |s|
|
|
32
32
|
s.add_development_dependency "rake-compiler"
|
33
33
|
s.add_development_dependency "rspec"
|
34
34
|
s.add_development_dependency "rspec-spies"
|
35
|
+
s.add_development_dependency "rubysl", "~> 2.0" if RUBY_ENGINE == "rbx"
|
35
36
|
s.add_development_dependency "vulcan"
|
36
37
|
end
|
File without changes
|
@@ -0,0 +1,13 @@
|
|
1
|
+
diff --git a/build/common.gypi b/build/common.gypi
|
2
|
+
index 3a59639..594abe4 100644
|
3
|
+
--- a/build/common.gypi
|
4
|
+
+++ b/build/common.gypi
|
5
|
+
@@ -173,7 +173,6 @@
|
6
|
+
[ 'v8_use_arm_eabi_hardfloat=="true"', {
|
7
|
+
'defines': [
|
8
|
+
'USE_EABI_HARDFLOAT=1',
|
9
|
+
- 'CAN_USE_VFP2_INSTRUCTIONS',
|
10
|
+
],
|
11
|
+
'target_conditions': [
|
12
|
+
['_toolset=="target"', {
|
13
|
+
|