Skip to content

Commit 959958f

Browse files
committed
make packing 7 times faster
1 parent 7870698 commit 959958f

File tree

5 files changed

+515
-599
lines changed

5 files changed

+515
-599
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,5 @@ build/
3737

3838
/mruby/
3939
/build_config.rb.lock
40-
compile_commands.json
40+
compile_commands.json
41+
/.cache/

build_config.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
MRuby::Build.new do |conf|
22
toolchain :gcc
3-
enable_debug
4-
conf.enable_sanitizer "address,undefined"
3+
#enable_debug
4+
#conf.enable_sanitizer "address,undefined"
55
conf.cc.flags << '-fno-omit-frame-pointer'
6-
conf.enable_debug
6+
#conf.enable_debug
77
conf.enable_test
88
conf.gembox 'full-core'
99
conf.gem File.expand_path(File.dirname(__FILE__))

mrbgem.rake

Lines changed: 35 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,47 @@
1+
require 'fileutils'
12
require_relative 'mrblib/version'
23

34
MRuby::Gem::Specification.new('mruby-simplemsgpack') do |spec|
4-
spec.license = 'Apache-2'
5-
spec.summary = 'msgpack for mruby including extension types'
5+
spec.license = 'Apache-2'
6+
spec.summary = 'msgpack for mruby including extension types'
67
spec.homepage = 'https://github.com/Asmod4n/mruby-simplemsgpack'
7-
spec.authors = File.readlines("#{spec.dir}/AUTHORS").map(&:strip)
8-
spec.version = MessagePack::VERSION
8+
spec.authors = File.readlines(File.join(spec.dir, 'AUTHORS')).map(&:strip)
9+
spec.version = MessagePack::VERSION
10+
911
spec.add_dependency 'mruby-errno'
1012
spec.add_dependency 'mruby-error'
1113
spec.add_dependency 'mruby-string-is-utf8'
12-
spec.add_conflict 'mruby-msgpack'
14+
spec.add_dependency 'mruby-c-ext-helpers'
15+
spec.add_conflict 'mruby-msgpack'
1316

14-
if build.is_a?(MRuby::CrossBuild)
15-
unless File.exist?("#{spec.build_dir}/lib/libmsgpack-c.a")
16-
cmake_opts = "-DCMAKE_SYSTEM_NAME=\"#{build.build_target}\" -DCMAKE_HOST_SYSTEM_NAME=\"#{build.host_target}\" -DCMAKE_INSTALL_PREFIX=\"#{spec.build_dir}\" -DCMAKE_CXX_COMPILER=\"#{spec.cxx.command}\" -DCMAKE_CXX_COMPILER_AR=\"#{spec.archiver.command}\" -DCMAKE_CXX_FLAGS=\"#{spec.cxx.flags.join(' ')}\" -DCMAKE_C_COMPILER=\"#{spec.cc.command}\" -DCMAKE_C_COMPILER_AR=\"#{spec.archiver.command}\" -DCMAKE_C_FLAGS=\"#{spec.cc.flags.join(' ')}\" -DCMAKE_LINKER=\"#{spec.linker.command}\" -DCMAKE_MODULE_LINKER_FLAGS=\"#{spec.linker.flags.join(' ')}\""
17-
sh "mkdir -p #{spec.build_dir}/build && cd #{spec.build_dir}/build && cmake #{cmake_opts} #{spec.dir}/deps/msgpack-c/ && cmake --build . && cmake --build . --target install"
18-
end
19-
spec.linker.flags_before_libraries << "\"#{spec.build_dir}/lib/libmsgpack-c.a\""
20-
spec.cc.include_paths << "#{spec.build_dir}/include"
21-
spec.cxx.include_paths << "#{spec.build_dir}/include"
22-
build.cc.include_paths << "#{spec.build_dir}/include"
23-
build.cxx.include_paths << "#{spec.build_dir}/include"
24-
elsif spec.cc.search_header_path('msgpack.h') && spec.cc.search_header_path('msgpack/version_master.h')
25-
if spec.build.toolchains.include? 'visualcpp'
26-
spec.linker.libraries << 'libmsgpackc'
27-
else
28-
spec.linker.libraries << 'msgpackc'
29-
end
30-
else
31-
`pkg-config --cflags msgpack 2>/dev/null`.split("\s").each do |cflag|
32-
spec.cxx.flags << cflag
33-
spec.cc.flags << cflag
34-
end
35-
exitstatus = $?.exitstatus
36-
`pkg-config --libs msgpack 2>/dev/null`.split("\s").each do |lib|
37-
spec.linker.flags_before_libraries << lib
17+
include_dir = File.join(spec.build_dir, 'include')
18+
19+
unless File.exist?(File.join(include_dir, 'msgpack.hpp'))
20+
warn 'mruby-simplemsgpack: cannot find msgpack-cxx, building it'
21+
22+
cmake_opts = "-DMSGPACK_USE_BOOST=OFF -DMSGPACK_INSTALL=ON " \
23+
"-DCMAKE_INSTALL_PREFIX=\"#{spec.build_dir}\" " \
24+
"-DCMAKE_CXX_COMPILER=\"#{spec.cxx.command}\" " \
25+
"-DCMAKE_CXX_COMPILER_AR=\"#{spec.archiver.command}\" " \
26+
"-DCMAKE_CXX_FLAGS=\"#{spec.cxx.flags.join(' ')}\" " \
27+
"-DCMAKE_C_COMPILER=\"#{spec.cc.command}\" " \
28+
"-DCMAKE_C_COMPILER_AR=\"#{spec.archiver.command}\" " \
29+
"-DCMAKE_C_FLAGS=\"#{spec.cc.flags.join(' ')}\" " \
30+
"-DCMAKE_LINKER=\"#{spec.linker.command}\" " \
31+
"-DCMAKE_MODULE_LINKER_FLAGS=\"#{spec.linker.flags.join(' ')}\""
32+
33+
if build.is_a?(MRuby::CrossBuild)
34+
cmake_opts << " -DCMAKE_SYSTEM_NAME=\"#{build.build_target}\"" \
35+
" -DCMAKE_HOST_SYSTEM_NAME=\"#{build.host_target}\""
3836
end
39-
exitstatus += $?.exitstatus
40-
unless exitstatus == 0
41-
unless File.exist?("#{spec.build_dir}/lib/libmsgpack-c.a")
42-
warn "mruby-simplemsgpack: cannot find libmsgpackc, building it"
43-
cmake_opts = "-DCMAKE_INSTALL_PREFIX=\"#{spec.build_dir}\" -DCMAKE_CXX_COMPILER=\"#{spec.cxx.command}\" -DCMAKE_CXX_COMPILER_AR=\"#{spec.archiver.command}\" -DCMAKE_CXX_FLAGS=\"#{spec.cxx.flags.join(' ')}\" -DCMAKE_C_COMPILER=\"#{spec.cc.command}\" -DCMAKE_C_COMPILER_AR=\"#{spec.archiver.command}\" -DCMAKE_C_FLAGS=\"#{spec.cc.flags.join(' ')}\" -DCMAKE_LINKER=\"#{spec.linker.command}\" -DCMAKE_MODULE_LINKER_FLAGS=\"#{spec.linker.flags.join(' ')}\""
44-
sh "mkdir -p #{spec.build_dir}/build && cd #{spec.build_dir}/build && cmake #{cmake_opts} #{spec.dir}/deps/msgpack-c/ && cmake --build . && cmake --build . --target install"
45-
end
46-
spec.linker.flags_before_libraries << "\"#{spec.build_dir}/lib/libmsgpack-c.a\""
47-
spec.cc.include_paths << "#{spec.build_dir}/include"
48-
spec.cxx.include_paths << "#{spec.build_dir}/include"
49-
build.cc.include_paths << "#{spec.build_dir}/include"
50-
build.cxx.include_paths << "#{spec.build_dir}/include"
37+
38+
build_dir = File.join(spec.build_dir, 'build')
39+
FileUtils.mkdir_p(build_dir)
40+
Dir.chdir(build_dir) do
41+
sh "cmake #{cmake_opts} #{File.join(spec.dir, 'deps', 'msgpack-c')}"
42+
sh "cmake --build . --target install"
5143
end
5244
end
45+
46+
[spec.cc, spec.cxx, build.cc, build.cxx].each { |c| c.include_paths << include_dir }
5347
end

mrblib/version.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
module MessagePack
2-
VERSION="2.1"
2+
VERSION="3.0"
33
end

0 commit comments

Comments
 (0)