require 'rake/clean'
require 'rake/loaders/makefile'

CC = "#{ENV['GNUi386']}/bin/gcc386"
INCDIR = ["#{ENV['BD']}/include", "../src", "../src/posix_include", "../src/mruby/include"]
CFLAGS = "-O2 -fno-strength-reduce -mpreferred-stack-boundary=2 -Wall"
CPPFLAGS = "#{INCDIR.map {|item| '-I'+item }.join(' ')} -DPCAT"
LOADLIBES = "-limg  -lapp -ltf -lgcc -lmain_r -ldbg -llang -lg -lsys -lg -lf -lsvc"
LDFLAGS = "-L#{ENV['BD']}/lib/i386e2"
NM = "#{ENV['GNUi386']}/bin/nm"
MAKEDEPS =  "#{ENV['BD']}/etc/makedeps #{CPPFLAGS}"

TARGET = "hello"
TARGET_MAP = "#{TARGET}.map"
TARGET_BIN = "#{TARGET}.out"

SRCS = FileList["../src/*.c"]
OBJS_HELLO = SRCS.pathmap("%f").ext('o')

CLEAN.include(OBJS_HELLO)
CLOBBER.include(TARGET_MAP)
CLOBBER.include(TARGET_BIN)
CLOBBER.include("Dependencies.mf")
CLOBBER.include(FileList["*.d"])
CLOBBER.include("mruby")

task :default => ["mruby_lib", TARGET_MAP]

task "clean" do
  sh "ruby ../src/mruby/minirake MRUBY_CONFIG=../src/build_config.rb MRUBY_BUILD_DIR=./mruby -f ../src/mruby/Rakefile clean"
end

task "mruby_lib" do
  sh "ruby ../src/mruby/minirake MRUBY_CONFIG=../src/build_config.rb MRUBY_BUILD_DIR=./mruby -f ../src/mruby/Rakefile"
end

file TARGET_BIN => OBJS_HELLO do |t|
  sh "#{CC} #{LDFLAGS} #{t.prerequisites.join(' ')} mruby/pcat/lib/libmruby.a #{LOADLIBES} -o #{t.name} "
end

rule '.o' => [proc{|t| t.pathmap("../src/%n.c") }] do |t|
  sh "#{CC} #{CFLAGS} #{CPPFLAGS} -c #{t.source} -o #{t.name}"
end

rule '.map' => '.out' do |t|
  sh "#{NM} -n #{t.source} > #{t.name}"
end

file "Dependencies.mf" => SRCS do |t|
  sh "perl #{MAKEDEPS} #{t.name} #{t.prerequisites.join(' ')}"
end

import "Dependencies.mf"
