diff options
| -rw-r--r-- | Rakefile | 107 | ||||
| -rw-r--r-- | core/mruby_build.rb | 24 |
2 files changed, 83 insertions, 48 deletions
@@ -1,9 +1,36 @@ require 'fileutils' + +config_root = File.expand_path('.') +config_core = File.expand_path("#{config_root}/core") + +config_build_config = File.expand_path("#{config_root}/core/mruby_build.rb") + +config_build_raylib_source = File.expand_path("#{config_root}/core/raylib/src") + +config_mruby = File.expand_path("#{config_root}/core/mruby") +config_include_mruby = File.expand_path("#{config_mruby}/include") + +config_tux = File.expand_path("#{config_root}/vendor/tux") +config_tux_include = File.expand_path("#{config_root}/vendor/tux/include") +config_tux_lib = File.expand_path("#{config_root}/vendor/tux/lib") + +config_web = File.expand_path("#{config_root}/vendor/web") +config_web_include = File.expand_path("#{config_root}/vendor/web/include") +config_web_lib = File.expand_path("#{config_root}/vendor/web/lib") + +config_build = File.expand_path("#{config_root}/build") +config_build_temp = File.expand_path("#{config_build}/temp") +config_build_tux = File.expand_path("#{config_build}/tux") +config_build_web = File.expand_path("#{config_build}/web") + +config_game = File.expand_path("#{config_root}/game") + namespace :build do - @vendor_dir = '../vendor' - @include_dir = "#{@vendor_dir}/include" - @library_dir = "#{@vendor_dir}/lib" - @bytecode_header_path = "../build/temp" + + #@vendor_dir = '../vendor' + #@include_dir = "#{@vendor_dir}/include" + #@library_dir = "#{@vendor_dir}/lib" + #@bytecode_header_path = "../build/temp" desc "Build the engine" task :mruby do Dir.chdir("core/mruby") do @@ -15,71 +42,81 @@ namespace :build do # end # end #end - system('env MRUBY_CONFIG=../mruby_build.rb rake') - #FileUtils.cp("build/web/lib/libmruby.a", "../../vendor/web/lib/mruby/") - FileUtils.cp("build/host/lib/libmruby.a", "../../vendor/tux/lib/") + system("env MRUBY_CONFIG=#{config_build_config} rake") + FileUtils.cp("build/web/lib/libmruby.a", "#{config_web_lib}/") + FileUtils.cp("build/host/lib/libmruby.a", "#{config_tux_lib}/") #FileUtils.cp("build/win/lib/libmruby.a", "../vendor/lib/win/mruby/") end end desc "Build Raylib" task :raylib do - Dir.chdir("core/raylib/src") do + Dir.chdir(config_build_raylib_source) do `make clean` - puts 'building...' + puts 'building for tux...' `make PLATFORM=PLATFORM_DESKTOP` puts + Dir.mkdir(config_tux) unless File.exists?(config_tux) puts 'installing, this should prompt you to enter password unless you are already in sudo' - `sudo DESTDIR=#{File.expand_path('../../../vendor/tux')} make install` + `sudo DESTDIR=#{config_tux} make install` + `make clean` + puts 'building for web...' + `make PLATFORM=PLATFORM_WEB` + puts + Dir.mkdir(config_web) unless File.exists?(config_web) + puts 'installing, this should prompt you to enter password unless you are already in sudo' + `sudo DESTDIR=#{config_web} make install` `make clean` - #`make PLATFORM=PLATFORM_WEB` - #`sudo DESTDIR=/path/u/want make install` - #`make clean` end end #desc 'Export to single file' task :single_file do result = '' - main = File.read('game/main.rb') + main = File.read("#{config_game}/main.rb") tmp = main.lines(chomp: true).select do |line| line.include? 'require ' end tmp.each do |file| file.delete_prefix!('require ') - result += "#{File.read("game/#{file[1, file.length - 2]}")}\n" + result += "#{File.read("#{config_game}/#{file[1, file.length - 2]}")}\n" end result += main.lines.reject do |line| line.include? 'require ' end.join - Dir.mkdir("build") unless File.exists?("build") - Dir.mkdir("build/temp") unless File.exists?("build/temp") - File.write('build/temp/main.rb', result) + Dir.mkdir(config_build) unless File.exists?(config_build) + Dir.mkdir(config_build_temp) unless File.exists?(config_build_temp) + File.write("#{config_build_temp}/main.rb", result) end #desc 'Compile the game to bytecode' task :bytecode => :single_file do - Dir.mkdir("build") unless File.exists?("build") - Dir.mkdir("build/temp") unless File.exists?("build/temp") - Dir.chdir("build/temp") do - system("../../core/mruby/bin/mrbc -Bbytecode -obytecode.h main.rb") + Dir.mkdir(config_build) unless File.exists?(config_build) + Dir.mkdir(config_build_temp) unless File.exists?(config_build_temp) + Dir.chdir(config_build_temp) do + system("#{config_mruby}/bin/mrbc -Bbytecode -obytecode.h main.rb") end end + desc 'Build the game for web' task :web => :bytecode do - Dir.mkdir("build/web") unless File.exists?("build/web") - #Dir.chdir("build/web") do - Dir.chdir("game") do - system("emcc -Os -Wall -I#{@include_dir}/raylib -I#{@include_dir}/mruby -I#{@bytecode_header_path} #{@vendor_dir}/boilerplate.c #{@library_dir}/web/mruby/libmruby.a #{@library_dir}/web/raylib/libraylib.a -o ../build/web/index.html -s USE_GLFW=3 -DPLATFORM_WEB --preload-file ./assets --shell-file #{@vendor_dir}/html/minshell.html -s TOTAL_MEMORY=268435456") # -s ASYNCIFY + Dir.mkdir(config_build) unless File.exists?(config_build) + Dir.mkdir(config_build_web) unless File.exists?(config_build_web) + Dir.chdir(config_game) do + system("emcc -Os -Wall -I#{config_web_include} -I#{config_include_mruby} -I#{config_build_temp} #{config_core}/boilerplate_entry.c #{config_web_lib}/libmruby.a #{config_web_lib}/libraylib.a -o #{config_build_web}/index.html -s USE_GLFW=3 -DPLATFORM_WEB --preload-file ./assets --shell-file #{config_core}/shell.html -s TOTAL_MEMORY=268435456") # -s ASYNCIFY end end + desc 'Build the game for Linux' task :tux => :bytecode do - Dir.mkdir("build/tux") unless File.exists?("build/tux") + Dir.mkdir(config_build) unless File.exists?(config_build) + Dir.mkdir(config_build_tux) unless File.exists?(config_build_tux) #Dir.chdir("build/tux") do - Dir.chdir("game") do - system("zig cc -target native #{@vendor_dir}/boilerplate.c -o ../build/tux/game -lGL -lm -lpthread -ldl -lrt -lX11 -I#{@bytecode_header_path} -I#{@include_dir}/raylib -I#{@include_dir}/mruby #{@library_dir}/tux/mruby/libmruby.a #{@library_dir}/tux/raylib/libraylib.a") - system("rsync -r ./assets ../build/tux") + Dir.chdir(config_game) do + system("zig cc -target native #{config_core}/boilerplate_entry.c -o #{config_build_tux}/game -lGL -lm -lpthread -ldl -lrt -lX11 -I#{config_build_temp} -I#{config_tux_include} -I#{config_include_mruby} #{config_tux_lib}/libmruby.a #{config_tux_lib}/libraylib.a") + end + if File.exists?("#{config_game}/assets") + system("rsync -r #{config_game}/assets #{config_build_tux}") # TODO: maybe get rid of this? copying assets can be costly end end #desc 'Build the game for Window' @@ -91,10 +128,10 @@ namespace :build do #end end -desc 'Launch the game' +desc 'Launch the game with the interpreter' task :playtest => "build:single_file" do Dir.chdir("game") do - system("../core/mruby/build/host/bin/mruby ../build/temp/main.rb") + system("#{config_mruby}/build/host/bin/mruby #{config_build_temp}/main.rb") end end task :p => :playtest @@ -103,7 +140,7 @@ task :p => :playtest namespace :clean do desc "Clean the mruby build folders" task :mruby do - Dir.chdir("core/mruby") do + Dir.chdir(config_mruby) do system('rake deep_clean') end end @@ -111,7 +148,7 @@ namespace :clean do puts 'Not implemented yet' end end - +=begin desc "Create a server and open your game in your browser" task :serve do link = "http://localhost:8000/index.html" @@ -125,3 +162,5 @@ task :serve do `ruby -run -ehttpd build/web/ -p8000` end task :s => :serve +=end + diff --git a/core/mruby_build.rb b/core/mruby_build.rb index 2bd5a6e..8a440c9 100644 --- a/core/mruby_build.rb +++ b/core/mruby_build.rb @@ -62,7 +62,7 @@ MRuby::Build.new do |conf| # Dir #conf.gem :git => 'https://github.com/iij/mruby-dir' - # -- YOUR GAMES -- + # -- YOUR GEMS -- # gems added into the mrbgems directory puts "HERE: #{File.expand_path(configure_mrbgem_dir)}" @@ -98,6 +98,7 @@ MRuby::Build.new do |conf| conf.enable_bintest conf.enable_test end + =begin MRuby::CrossBuild.new("tux") do |conf| conf.toolchain :clang @@ -183,7 +184,7 @@ MRuby::CrossBuild.new("win") do |conf| conf.cxx.command = "zig c++ -target x86_64-windows-gnu" end =end -=begin + MRuby::CrossBuild.new("web") do |conf| conf.toolchain :clang @@ -245,11 +246,11 @@ MRuby::CrossBuild.new("web") do |conf| # Dir #conf.gem :git => 'https://github.com/iij/mruby-dir' - # -- YOUR GAMES -- + # -- YOUR GEMS -- # gems added into the mrbgems directory Dir.each_child(configure_mrbgem_dir) do |mrb_gem| - conf.gem mrb_gem + conf.gem "#{configure_mrbgem_dir}/#{mrb_gem}" end # --- @@ -261,7 +262,7 @@ MRuby::CrossBuild.new("web") do |conf| conf.linker do |linker| linker.command = 'emcc' - linker.flags = ["-std=c99 --shell-file #{configure_project_root}/raylib/src/shell.html"] + linker.flags = ["-std=c99 --shell-file #{configure_project_root}/core/shell.html"] linker.library_paths = ['.'] end @@ -273,20 +274,15 @@ MRuby::CrossBuild.new("web") do |conf| cxx.command = "em++" end - # FelECS - conf.gem github: 'realtradam/FelECS', path: 'mrbgem' - - # Raylib - #conf.gem :git => '[email protected]:realtradam/mruby-raylib.git', :branch => 'master' - conf.gem '../../mruby-raylib'# do |g| conf.cc do |cc| - cc.include_paths << ["#{configure_project_root}/include", "#{configure_project_root}/vendor/include/raylib"] + #cc.include_paths << ["#{configure_project_root}/include", "#{configure_project_root}/vendor/include/raylib"] + cc.include_paths << ["#{configure_project_root}/vendor/web/include"] cc.flags << ['-Wall', '-D_DEFAULT_SOURCE', '-Wno-missing-braces', '-Os', '-DPLATFORM_WEB'] end conf.linker do |linker| linker.flags << ["-lraylib -Wall -D_DEFAULT_SOURCE -Wno-missing-braces -Os -s USE_GLFW=3 -s TOTAL_MEMORY=67108864 -s FORCE_FILESYSTEM=1"] - linker.library_paths << ["#{configure_project_root}/raylib/src", "#{configure_project_root}/vendor/lib/web/raylib"] + #linker.library_paths << ["#{configure_project_root}/raylib/src", "#{configure_project_root}/vendor/lib/web/raylib"] + linker.library_paths << ["#{configure_project_root}/vendor/web/lib"] end end -=end |
