86 lines
2.7 KiB
Ruby
86 lines
2.7 KiB
Ruby
project_name "x86_64-elf-gcc"
|
|
binutils_version = "2.41"
|
|
binutils_checksum = "ae9a5789e23459e59606e6714723f2d3ffc31c03174191ef0d015bdf06007450"
|
|
gcc_version = "13.2.0"
|
|
gcc_checksum = "e275e76442a6067341a27f04c5c6b83d8613144004c0413528863dc6b5c743da"
|
|
install_path = File.expand_path("x86_64-elf-gcc")
|
|
target = "x86_64-elf"
|
|
path_prepend "#{install_path}/bin"
|
|
|
|
configure do
|
|
check_c_compiler "gcc"
|
|
check_program "make"
|
|
check_program "bison"
|
|
check_program "flex"
|
|
check_program "texi2any", on_fail: "Install the texinfo package"
|
|
check_program "wget"
|
|
check_lib "gmp", on_fail: "Install the libgmp-dev package"
|
|
check_lib "mpc", on_fail: "Install the libmpc-dev package"
|
|
check_lib "mpfr", on_fail: "Install the libmpfr-dev package"
|
|
end
|
|
|
|
default do
|
|
unless Dir.exist?(install_path)
|
|
puts "Building cross compiler toolchain..."
|
|
|
|
# Download archives.
|
|
puts "Downloading binutils..."
|
|
download "https://ftp.gnu.org/gnu/binutils/binutils-#{binutils_version}.tar.xz",
|
|
"#{build_dir}/binutils-#{binutils_version}.tar.xz",
|
|
sha256sum: binutils_checksum
|
|
|
|
puts "Downloading gcc..."
|
|
download "https://ftp.gnu.org/gnu/gcc/gcc-#{gcc_version}/gcc-#{gcc_version}.tar.xz",
|
|
"#{build_dir}/gcc-#{gcc_version}.tar.xz",
|
|
sha256sum: gcc_checksum
|
|
|
|
# Extract archives.
|
|
puts "Extracting binutils..."
|
|
sh "tar", "xJf", "binutils-#{binutils_version}.tar.xz",
|
|
chdir: build_dir
|
|
|
|
puts "Extracting gcc..."
|
|
sh "tar", "xJf", "gcc-#{gcc_version}.tar.xz",
|
|
chdir: build_dir
|
|
|
|
# Build binutils.
|
|
puts "Building binutils..."
|
|
rm_rf "#{build_dir}/build-binutils"
|
|
mkdir_p "#{build_dir}/build-binutils"
|
|
cd "#{build_dir}/build-binutils" do
|
|
sh %W[../binutils-#{binutils_version}/configure
|
|
--target=#{target} --prefix=#{install_path} --with-sysroot --disable-nls
|
|
--disable-werror]
|
|
sh "make"
|
|
sh "make install"
|
|
end
|
|
|
|
# Build gcc.
|
|
puts "Building gcc..."
|
|
rm_rf "#{build_dir}/build-gcc"
|
|
mkdir_p "#{build_dir}/build-gcc"
|
|
cd "#{build_dir}/build-gcc" do
|
|
sh %W[../gcc-#{gcc_version}/configure
|
|
--target=#{target} --prefix=#{install_path} --disable-nls
|
|
--enable-languages=c --without-headers]
|
|
sh "make all-gcc"
|
|
sh "make all-target-libgcc"
|
|
sh "make install-gcc"
|
|
sh "make install-target-libgcc"
|
|
end
|
|
|
|
# Remove archives and build directories if everything succeeded.
|
|
puts "Cleaning up..."
|
|
rm_f "#{build_dir}/binutils-#{binutils_version}.tar.xz"
|
|
rm_rf "#{build_dir}/binutils-#{binutils_version}"
|
|
rm_rf "#{build_dir}/build-binutils"
|
|
rm_f "#{build_dir}/gcc-#{gcc_version}.tar.xz"
|
|
rm_rf "#{build_dir}/gcc-#{gcc_version}"
|
|
rm_rf "#{build_dir}/build-gcc"
|
|
end
|
|
end
|
|
|
|
distclean do
|
|
rm_rf install_path
|
|
end
|