summaryrefslogtreecommitdiffhomepage
path: root/Rakefile
blob: 14ff8077ad167b623a7d83b4278fb06c8b6badb3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# Build description.
# basic build file for mruby

# compiler, linker (gcc), archiver, parser generator
CC = ENV['CC'] || 'gcc'
LL = ENV['LL'] || 'gcc'
AR = ENV['AR'] || 'ar'
YACC = ENV['YACC'] || 'bison'
MAKE = ENV['MAKE'] || 'make'

# mruby source root path
MRUBY_ROOT = ENV['MRUBY_ROOT'] || File.expand_path(File.dirname(__FILE__))

# by default GEMs are deactivated
ENABLE_GEMS = false

# the default file which contains the active GEMs
ACTIVE_GEMS = File.join(File.dirname(__FILE__), 'mrbgems', 'GEMS.active')

# default compile option
COMPILE_MODE = :debug


##############################
# compile flags

case COMPILE_MODE.to_s
when 'debug'
  CFLAGS = ['-g', '-O3']
when 'release'
  CFLAGS = ['-O3']
when 'small'
  CFLAGS = ['-Os']
else
  CFLAGS = [ENV['CFLAGS']]
end
LDFLAGS = [ENV['LDFLAGS']]

CFLAGS << "-Wall" << "-Werror-implicit-function-declaration" << "-I#{MRUBY_ROOT}/include"
if ENV['OS'] == 'Windows_NT'
  MAKE_FLAGS = "--no-print-directory CC=#{CC} LL=#{LL} CFLAGS='#{CFLAGS.join(' ')}' LDFLAGS='#{LDFLAGS.join(' ')}' ENABLE_GEMS='#{ENABLE_GEMS}' MRUBY_ROOT='#{MRUBY_ROOT}'"
else
  MAKE_FLAGS = "--no-print-directory CC='#{CC}' LL='#{LL}' CFLAGS='#{CFLAGS.join(' ')}' LDFLAGS='#{LDFLAGS.join(' ')}' ENABLE_GEMS='#{ENABLE_GEMS}' MRUBY_ROOT='#{MRUBY_ROOT}'"
end



##############################
# internal variables

CP = ENV['CP'] ||= 'cp'
RM_F = ENV['RM_F'] ||= 'rm -f'
CAT = ENV['CAT'] ||= 'cat'


##############################
# generic build targets, rules
if ENABLE_GEMS
  require './mrbgems/build_tasks'
end

task :default => :all

desc "build all targets, install (locally) in-repo"
task :all do
  sh "#{MAKE} -C src #{MAKE_FLAGS}"
  sh "#{MAKE} -C mrblib #{MAKE_FLAGS}"
  if ENABLE_GEMS
    puts "-- MAKE mrbgems --"
    Rake::Task['mrbgems_all'].invoke
  end
  sh "#{MAKE} -C tools/mruby #{MAKE_FLAGS}"
  sh "#{MAKE} -C tools/mirb #{MAKE_FLAGS}"
end

desc "sh all mruby tests"
task :test => [:all] do
  sh "#{MAKE} -C test #{MAKE_FLAGS}"
end

desc "clean all built and in-repo installed artifacts"
task :clean do
  sh "#{MAKE} clean -C src #{MAKE_FLAGS}"
  sh "#{MAKE} clean -C mrblib #{MAKE_FLAGS}"
  if ENABLE_GEMS
    puts "-- MAKE mrbgems --"
    Rake::Task['mrbgems_clean'].invoke
  end
  sh "#{MAKE} clean -C tools/mruby #{MAKE_FLAGS}"
  sh "#{MAKE} clean -C tools/mirb #{MAKE_FLAGS}"
  sh "#{MAKE} clean -C test #{MAKE_FLAGS}"
end

desc "show build config summary"
task :showconfig do
  puts "  CC = #{CC}"
  puts "  LL = #{LL}"
  puts "  MAKE = #{MAKE}"
  puts ""
  puts "  CFLAGS = #{CFLAGS.join(' ')}"
  puts "  LDFLAGS = #{LDFLAGS.join(' ')}"
end