sylware / nyanlinux (public) (License: AFFERO GPLv3) (since 2019-09-09) (hash sha1)
scripts for a lean, from scratch, amd hardware, linux distro

/builders/linux-amd/builder.sh (c5b90c59cc28646f7eb906eb4c04e12df2f5cdb6) (6385 bytes) (mode 100644) (type blob)

. $nyan_root/utils.sh
cleanup()
{
	if test -e $pkg_dir/NYAN/depmod_installed; then
		rm -f '/sbin/depmod' 
		rmdir /sbin
	fi
	if test -e /bin/bash.HIDDEN; then
		mv /bin/bash.HIDDEN /bin/bash
	fi
}
################################################################################

# sadly, the toxic mob from gcc/clang managed to commit too much brain damaged
# (gcc/clang/iso) code into linux, fixing their toxic stuff requires something
# different

pkg_dir=$pkgs_dir_root/$pkg_name
rm -Rf $pkg_dir
mkdir -p $pkgs_dir_root
printf 'copying linux source tree in ram...\n'
cp -r $src_dir_root/linux-amd $pkg_dir
printf 'done\n'
cd $pkg_dir
# create a directory for our stuff
mkdir -p NYAN
################################################################################
PATH_SAVED=$PATH
# must have sh in PATH for some makefile scripts
export PATH="\
/bin:\
/nyan/toolchains/current/bin:\
/nyan/git/current/bin:\
/nyan/make/current/bin:\
/nyan/flex/current/bin:\
/nyan/bison/current/bin:\
$PATH"
target_gnu_triple=$(basename "$(ls -d /nyan/toolchains/current/bin/*-gcc)")
target_gnu_triple=${target_gnu_triple%-gcc}
if test -e /bin/bash;then
	mv /bin/bash /bin/bash.HIDDEN
fi
#-------------------------------------------------------------------------------
#XXX:TEMPORARY FIX
cp $nyan_root/builders/$pkg_name/no_debug_fs.patch ./
patch -p1 -N -i ./no_debug_fs.patch
#-------------------------------------------------------------------------------
# there, the build system is expecting way more than minimal host and target
# compilers, then we need wrappers
mkdir -p $pkg_dir/NYAN/wrappers
export PATH="\
$pkg_dir/NYAN/wrappers:\
$PATH"
sed -r -e "s:HOSTGCC_ABSOLUTE_PATH:/nyan/toolchains/current/bin/$target_gnu_triple-gcc:" \
	$nyan_root/builders/$pkg_name/wrappers/hostgcc \
	>$pkg_dir/NYAN/wrappers/hostgcc
sed -r -e "s:TARGETGCC_ABSOLUTE_PATH:/nyan/toolchains/current/bin/$target_gnu_triple-gcc:" \
	$nyan_root/builders/$pkg_name/wrappers/crossgcc \
	>$pkg_dir/NYAN/wrappers/$target_gnu_triple-gcc
chmod +x $pkg_dir/NYAN/wrappers/hostgcc $pkg_dir/NYAN/wrappers/$target_gnu_triple-gcc
#-------------------------------------------------------------------------------
# the config in the linux directory
cp -f $nyan_root/builders/$pkg_name/config $pkg_dir/NYAN/amd_config
sed -r -e "/^CONFIG_INITRAMFS_SOURCE/ c\\
CONFIG_INITRAMFS_SOURCE=\"$pkg_dir/NYAN/amd_ramfs.cpio\"" -i $pkg_dir/NYAN/amd_config
# we don't have modules yet, give an empty one to kbuild for now
touch $pkg_dir/NYAN/amd_ramfs.cpio
#-------------------------------------------------------------------------------
release=$($nyan_root/builders/$pkg_name/release.sh "$nyan_root" "$pkg_dir/NYAN/amd_config" "$pkg_dir")
printf "linux release is \"$release\"\n"
#-------------------------------------------------------------------------------
export KCONFIG_CONFIG=$pkg_dir/NYAN/amd_config
export HOSTCC=hostgcc
export ARCH=x86_64
export CROSS_COMPILE=$target_gnu_triple-
# linux sdk wants depmod in /sbin
if test ! -x /sbin/depmod; then
	printf 'you are missing the depmod utility in /sbin, using the one in PATH\n'
	find_in_path depmod
	if test ! $r; then
		printf 'no depmod utility found in PATH, linux modules SDK will fail, exiting\n'
		cleanup
		exit 1
	fi
	mkdir -p /sbin
	printf 'linking %s to /sbin/depmod, will be removed on exiting\n' $r
	ln -sf $r /sbin/depmod
	touch $pkg_dir/NYAN/depmod_installed
fi
(cd /lib/modules;rm -Rf "$release")
# HOSTCC environment variable seems ignored, overridding makefile variable
make -j $threads_n vmlinux "HOSTCC=$HOSTCC"
make -j $threads_n modules "HOSTCC=$HOSTCC" 
make modules "HOSTCC=$HOSTCC"
make -j $threads_n modules_install "HOSTCC=$HOSTCC"
printf "linux modules installed:/lib/modules/$release\n"
#-------------------------------------------------------------------------------
# AuthenticAMD.bin firmware building
printf 'concatening AMD cpu firmware -- START\n'
firmware_dir=/lib/firmware/amd-ucode
if test ! -d $firmware_dir; then
	printf "ERROR:missing linux-firmware \"$firmware_dir\"\n"
	cleanup
	exit 1
fi
cat $(find $firmware_dir -name '*.bin' | sort) >$pkg_dir/NYAN/AuthenticAMD.bin
printf 'concatening AMD cpu firmware -- END\n'
#-------------------------------------------------------------------------------
# cpio list generation
printf 'cpio list generation for ramfs -- START\n'
cp -f $pkg_dir/usr/default_cpio_list $pkg_dir/NYAN/amd_ramfs
sed -r	-e "s:AMD_MICROCODE_DIR:$pkg_dir/NYAN:g" \
	-e "s:INIT_DIR:$pkg_dir/NYAN:g" \
	-e "s:LINUX_RELEASE:$release:g" \
	-e "s:BUILDER_DIR:$nyan_root/builders/$pkg_name:g" \
	<$nyan_root/builders/$pkg_name/amd_ramfs.in \
	>>$pkg_dir/NYAN/amd_ramfs
printf 'cpio list generation for ramfs -- END\n'
#-------------------------------------------------------------------------------
# init generation, basically craming the root uuid
printf 'init generation for ramfs -- START\n'
root_dev=$(grep -E '^/dev/[/[:alnum:]]+ / ' </proc/mounts | grep -E -o '^/dev/[/[:alnum:]]+')
printf "root_dev=$root_dev\n"
root_uuid=$(blkid $root_dev | sed -r -e 's/^.*UUID="([0-9a-f-]+)".*$/\1/')
printf "root_uuid=$root_uuid\n"

sed -r -e "/^initramfs_root_uuid/ c\\
initramfs_root_uuid=$root_uuid" \
	<$nyan_root/builders/$pkg_name/init.in \
	>$pkg_dir/NYAN/init
printf 'init generation for ramfs -- END\n'
#-------------------------------------------------------------------------------
# switch from the cpio archive to cpio list
# this is done removing the .cpio file extension, this is how linux kbuild makes
# the difference
rm $pkg_dir/NYAN/amd_ramfs.cpio
sed -r -e "/^CONFIG_INITRAMFS_SOURCE/ c\\
CONFIG_INITRAMFS_SOURCE=\"$pkg_dir/NYAN/amd_ramfs\"" -i $pkg_dir/NYAN/amd_config
#-------------------------------------------------------------------------------
# HOSTCC environment variable seems ignored, overridding makefile variable
make -j $threads_n bzImage "HOSTCC=$HOSTCC"
unset KCONFIG_CONFIG
unset HOSTCC
unset ARCH
unset CROSS_COMPILE
#-------------------------------------------------------------------------------
# install the kernel with the baked initramfs
mkdir -p /mnt/efi
cp -f $pkg_dir/arch/x86/boot/bzImage "/mnt/efi/amd-$release.efi"
printf "linux kernel installed:/mnt/efi/amd-$release.efi\n"
#-------------------------------------------------------------------------------
export PATH=$PATH_SAVED
cleanup
################################################################################
rm -Rf $pkg_dir


Mode Type Size Ref File
100644 blob 5 8eba6c8dd4dcaf6166bd22285ed34625f38a84ff .gitignore
100755 blob 1587 57fa4264b9ee0ae0a6f678f2527a05d3b22dda78 00-bootstrap-build.sh
100755 blob 848 a30f443bf405d56682efe3b4c5d3a19d5f7eb45d 01-re-bootstrap-build.sh
100644 blob 2142 f19c2d6b293244bb11a3f74ee77c10675cadc7d6 INSTALL
100644 blob 30 c9b735fa1332286f4b3f5f81fa10527fd7506b6e LICENSE
040000 tree - 427eec4d856a73b66dc557a301ee130cf835eae5 builders
100644 blob 1773 ef1551089a803bde37e36edc8d61bb819d06f793 conf.bootstrap.sh
100644 blob 479 8cc15efe46965ac7750fe304460f5a2b0aa4201c conf.sh
040000 tree - abe51c4b35f2de094a78c14c4b57de03a4561d22 files
100755 blob 356 8fb8be28ac72f7214b59934b9f74a682665f2d32 pkg-build
100644 blob 22800641 e9e6291054c857401f6835c728f31541dae4311e steam.tar.bz2
100644 blob 173 2047af328b22f9d146585cd9e759edbc18122250 utils.sh
040000 tree - 8e23f551092a35f82b37129dd08c35c4d313c17b x64
040000 tree - b7a22de7f5cbd97650dd45412ef7d4246e395eb8 x86
Hints:
Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://rocketgit.com/user/sylware/nyanlinux

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@ssh.rocketgit.com/user/sylware/nyanlinux

Clone this repository using git:
git clone git://git.rocketgit.com/user/sylware/nyanlinux

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a merge request:
... clone the repository ...
... make some changes and some commits ...
git push origin main