Skip to content

Commit

Permalink
Refactor build script
Browse files Browse the repository at this point in the history
  • Loading branch information
dirk committed Mar 5, 2015
1 parent 47fda8e commit 1323be7
Show file tree
Hide file tree
Showing 3 changed files with 99 additions and 86 deletions.
118 changes: 32 additions & 86 deletions Rakefile
@@ -1,73 +1,23 @@

def include_env v
ENV[v].to_s
end

# Setting up global constants
CC = ENV['CC'].nil? ? 'clang' : ENV['CC']
# cpp = ENV['CPP'].nil? ? 'clang++' : ENV['CPP']
AR = 'ar'
LD = 'ld'
IS_LINUX = `uname -s`.strip == 'Linux'

# $ldflags = "-lpthread -L. #{include_env 'LDFLAGS'}".strip
warnings = '-Wall -Wextra -Wconversion'
cflags = "-g -fPIC #{warnings} -std=c99 -I. #{include_env 'CFLAGS'}".strip
$LOAD_PATH.push File.expand_path(__dir__)
require 'lib/rake/util'
require 'lib/rake/env'

# Expose cflags and Lua globally for `cflags_for`
CFLAGS = cflags
LUA = 'lua5.1'

llvm_config = 'llvm-config'
if `uname -s`.strip == 'Darwin'
llvm_config = "#{`brew --prefix llvm`.strip}/bin/llvm-config"
end
LLVM_CONFIG = llvm_config
LLVM_MODULES = 'core analysis mcjit native'
LLVM_LIBDIR = `#{llvm_config} --libdir`.strip

version = `cat ./VERSION`.strip
shared_library = "libhivm-#{version}.so"

def cflags_for file
basename = File.basename file
flags = CFLAGS
if %w{object.o generator.o exception.o debug.o bootstrap.o}.include? basename
flags += " #{`pkg-config --cflags glib-2.0`.strip}"
end
if basename == 'object.o' && IS_LINUX
flags += ' -I/usr/local/include'
end
# TODO: Refactor to make this unnecessary
if basename == "generator.o" || basename == "bootstrap.o" || basename == "debug.o"
flags += ' -Wno-unused-parameter'
end
if basename == "vm-db.o" || basename == "debug.o"
flags += " -DHVM_VM_DEBUG #{`pkg-config --cflags #{LUA}`.strip}"
end
if basename == "jit-compiler.o"
flags += " "+`#{LLVM_CONFIG} --cflags`.strip
end
# Optimization passes on some objects
if basename =~ /^vm/ || basename == "gc1.o"
flags += ' -O2'
end
return flags
end
shared_library = "libhivm-#{VERSION}.so"

desc "Build"
task "build" => ['libhivm.a', 'libhivm-db.a']#, "libhivm.so"]
task "default" => ["build", "build:include"]

headers = {
"vm" => "hvm",
"object" => "hvm_object",
"symbol" => "hvm_symbol",
"chunk" => "hvm_chunk",
"vm" => "hvm",
"object" => "hvm_object",
"symbol" => "hvm_symbol",
"chunk" => "hvm_chunk",
"generator" => "hvm_generator",
"bootstrap" => "hvm_bootstrap",
"exception" => "hvm_exception",
"debug" => "hvm_debug"
"debug" => "hvm_debug"
}
headers.each do |src, dst|
file "include/#{dst}.h" => "src/#{src}.h" do |t|
Expand Down Expand Up @@ -174,20 +124,30 @@ file 'src/vm-db.o' => ['src/vm.c', 'src/vm-dispatch.include.c'] do |t|
sh "#{CC} #{t.prerequisites.first} -c #{cflags_for t.name} -o #{t.name}"
end

desc "Clean up objects"
task "clean" do
sh "rm -f src/*.o"
sh "rm -f src/chunk.pb-c.*"
sh "rm -f include/*.h"
# sh "rm test/*.o"
sh "rm -f lib*.*"
end
desc "Alias for clean:objects"
task 'clean' => ['clean:objects']

namespace 'clean' do
desc 'Clean up objects'
task 'objects' do
sh "rm -f src/*.o"
sh "rm -f lib*.*"
# sh "rm test/*.o"
end

desc 'Clean up copied headers'
task 'headers' do
sh "rm -f include/*.h"
end

desc 'Clean up generated source files'
task 'generated' do
sh 'rm -f src/chunk.pb-c.*'
end

namespace "clean" do
desc "Clean up everything (objects, docs)"
task "all" => ["clean", "doc:clean"] do
sh "rm include/*.h"
puts 'Done!'
desc 'Clean up everything (objects, docs)'
task 'all' => ['clean:objects', 'clean:headers', 'clean:generated', 'doc:clean'] do
sh 'rm include/*.h'
end
end

Expand All @@ -202,17 +162,3 @@ namespace "doc" do
sh "rm -rf doc/*"
end
end


# Utility functions:

def find_jemalloc
paths = [
'/usr/local/lib/libjemalloc.a',
'/usr/local/libjemalloc.a'
]
paths.each do |p|
return p if File.exists? p
end
raise 'libjemalloc.a not found'
end
25 changes: 25 additions & 0 deletions lib/rake/env.rb
@@ -0,0 +1,25 @@

# Setting up global constants
CC = ENV['CC'].nil? ? 'clang' : ENV['CC']
# cpp = ENV['CPP'].nil? ? 'clang++' : ENV['CPP']
AR = 'ar'
LD = 'ld'
IS_LINUX = `uname -s`.strip == 'Linux'
VERSION = `cat ./VERSION`.strip

# $ldflags = "-lpthread -L. #{include_env 'LDFLAGS'}".strip
warnings = '-Wall -Wextra -Wconversion'
cflags = "-g -fPIC #{warnings} -std=c99 -I. #{include_env 'CFLAGS'}".strip

# Expose cflags and Lua for `cflags_for`
CFLAGS = cflags
LUA = 'lua5.1'

# Settings for LLVM
llvm_config = 'llvm-config'
if `uname -s`.strip == 'Darwin'
llvm_config = "#{`brew --prefix llvm`.strip}/bin/llvm-config"
end
LLVM_CONFIG = llvm_config
LLVM_MODULES = 'core analysis mcjit native'
LLVM_LIBDIR = `#{llvm_config} --libdir`.strip
42 changes: 42 additions & 0 deletions lib/rake/util.rb
@@ -0,0 +1,42 @@

def include_env v
ENV[v].to_s
end

def cflags_for file
basename = File.basename file
flags = CFLAGS
if %w{object.o generator.o exception.o debug.o bootstrap.o}.include? basename
flags += " #{`pkg-config --cflags glib-2.0`.strip}"
end
if basename == 'object.o' && IS_LINUX
flags += ' -I/usr/local/include'
end
# TODO: Refactor to make this unnecessary
if basename == "generator.o" || basename == "bootstrap.o" || basename == "debug.o"
flags += ' -Wno-unused-parameter'
end
if basename == "vm-db.o" || basename == "debug.o"
flags += " -DHVM_VM_DEBUG #{`pkg-config --cflags #{LUA}`.strip}"
end
if basename == "jit-compiler.o"
flags += " "+`#{LLVM_CONFIG} --cflags`.strip
end
# Optimization passes on some objects
if basename =~ /^vm/ || basename == "gc1.o"
flags += ' -O2'
end
return flags
end

# Search in a few default places for the jemalloc static library
def find_jemalloc
paths = [
'/usr/local/lib/libjemalloc.a',
'/usr/local/libjemalloc.a'
]
paths.each do |p|
return p if File.exists? p
end
raise 'libjemalloc.a not found'
end

0 comments on commit 1323be7

Please sign in to comment.