diff options
Diffstat (limited to 'rakelib/cross.rake')
| -rw-r--r-- | rakelib/cross.rake | 34 |
1 files changed, 29 insertions, 5 deletions
diff --git a/rakelib/cross.rake b/rakelib/cross.rake index 3de7d79..700a8dd 100644 --- a/rakelib/cross.rake +++ b/rakelib/cross.rake @@ -4,15 +4,14 @@ require 'net/http' require 'rake/clean' require 'open3' require 'etc' +require_relative 'shared' GCC_VERSION = "14.2.0" BINUTILS_VERSION = '2.43.1' GLIBC_VERSION = '2.40' KERNEL_VERSION = '5.15.166' -TMP = Pathname.new('./build') - -CLEAN.include TMP +CLOBBER.include TMP class BuildTarget attr_accessor(:build, :gcc, :target, :tmp) @@ -87,11 +86,16 @@ def download_and_unarchive(url, target) download_and_unarchive URI.parse(response['location']) when Net::HTTPSuccess Open3.popen2 'tar', '-C', target.to_path, archive_type, '-xv' do |stdin, stdout, wait_thread| - stdout.close + Thread.new do + stdout.each { |line| puts line } + end response.read_body do |chunk| stdin.write chunk end + stdin.close + + wait_thread.value end else response.error! @@ -301,7 +305,27 @@ namespace :cross do sh env, 'make', '-j', Etc.nprocessors.to_s, chdir: cwd.to_path sh env, 'make', 'install', chdir: cwd.to_path end + + task :init, [:target] do |_, args| + options = find_build_target GCC_VERSION, args + env = { + 'PATH' => "#{options.rootfs.realpath + 'bin'}:#{ENV['PATH']}" + } + sh env, 'riscv32-unknown-linux-gnu-gcc', + '-ffreestanding', '-static', + '-o', (options.tools + 'init').to_path, + 'tools/init.c' + end end -task cross: ['cross:binutils', 'cross:gcc1', 'cross:headers', 'cross:kernel', 'cross:glibc', 'cross:gcc2'] do +desc 'Build cross toolchain' +task cross: [ + 'cross:binutils', + 'cross:gcc1', + 'cross:headers', + 'cross:kernel', + 'cross:glibc', + 'cross:gcc2', + 'cross:init' +] do end |
