mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-18 08:06:32 +00:00
完善libc,构建了OS-specific工具链,编译了基于gcc-11.3.0的DragonOS userland compiler,移植了mpfr,gmp,mpc库 (#134)
* 修改include路径 * 添加了创建libsysapi.a和/bin/sysroot/usr/include/+lib/的代码 * 修补.gitignore * 删除多余项 * 优化脚本可读性 * 新增crt0 crti crtn * 编译binutils所需的东西 * fflush()和fprintf()的简单实现 * 应用程序启动前,调用初始化libc的函数 * 自动创建sysroot * 添加了stderr的初始化 * 修改了stderr的初始化 * 内核添加对stdio的简略处理 * 格式化代码 * 修正打开stdio文件描述符的问题 * bugfix: 修复fprintf忘记释放buf的问题 * 修复shell错误地把入口设置为main而不是_start的问题 * 新增__cxa_atexit (gcc要求libc提供这个) * 增加putchar puts * 更新写入磁盘镜像的脚本,默认无参数时,使用legacy方式安装 * 更新编译脚本 * stdio增加eof的定义 * 新增extern cplusplus * mpfr gmp mpc 构建脚本 * 更新libsysapi.a为libc.a * 加上ferror fopen fclose * 更新移植的软件的构建脚本 * 更改build_gcc_toolchain.sh中的-save参数名为-save-cache Co-authored-by: longjin <longjin@RinGoTek.cn>
This commit is contained in:
@ -17,11 +17,15 @@ KEEP_BINUTILS=0
|
||||
KEEP_GCC=0
|
||||
CHANGE_SOURCE=0
|
||||
FORCE=0
|
||||
SAVE_CACHE=0
|
||||
while true; do
|
||||
if [ ! -n "$1" ]; then
|
||||
break
|
||||
fi
|
||||
case "$1" in
|
||||
"-save-cache")
|
||||
SAVE_CACHE=1
|
||||
;;
|
||||
"-rebuild")
|
||||
echo "清除${INSTALL_POS}目录下的所有信息"
|
||||
rm -rf "${INSTALL_POS}"
|
||||
@ -40,6 +44,7 @@ while true; do
|
||||
;;
|
||||
"-help")
|
||||
echo "脚本选项如下:"
|
||||
echo "-save-cache: 保留最后的下载压缩包"
|
||||
echo "-rebuild: 清除上一次安装的全部信息, 即删掉$INSTALL_POS目录下的所有内容, 然后重新构建gcc工具链."
|
||||
echo "-kg(keep-gcc): 您确保${STRUCTURE}-gcc已被编译安装, 本次调用脚本不重复编译安装gcc. 如果没有安装,脚本仍然会自动安装."
|
||||
echo "-kb(keep-binutils): 您确保binutils已被编译安装, 本次调用脚本不重复编译安装binutils. 如果没有安装,脚本仍然会自动安装."
|
||||
@ -167,13 +172,15 @@ source "$HOME/.bashrc"
|
||||
if [ -n "$(find $PREFIX/bin/* -name $TARGET_GCC)" ] &&
|
||||
[ -n "$(find $PREFIX/bin/* -name $TARGET_LD)" ] &&
|
||||
[ -n "$(find $PREFIX/bin/* -name $TARGET_AS)" ]; then
|
||||
# 删除临时文件
|
||||
rm -rf "$BIN_UTILS"
|
||||
rm -rf "$BIN_UTILS_TAR"
|
||||
rm -rf "build-binutils"
|
||||
rm -rf "$GCC_FILE"
|
||||
rm -rf "$GCC_FILE_TAR"
|
||||
rm -rf "build-gcc"
|
||||
if [ ${SAVE_CACHE} -eq 0 ]; then
|
||||
# 删除临时文件
|
||||
rm -rf "$BIN_UTILS"
|
||||
rm -rf "$BIN_UTILS_TAR"
|
||||
rm -rf "build-binutils"
|
||||
rm -rf "$GCC_FILE"
|
||||
rm -rf "$GCC_FILE_TAR"
|
||||
rm -rf "build-gcc"
|
||||
fi
|
||||
|
||||
echo -e "\033[42;37m [构建成功] Build Successfully.(请重新打开另一个Shell窗口或者重新打开你的IDE以获取新的环境变量) \033[0m"
|
||||
else
|
||||
|
@ -87,8 +87,10 @@ cp ${kernel} ${root_folder}/bin/disk_mount/boot
|
||||
mkdir -p ${root_folder}/bin/disk_mount/bin
|
||||
mkdir -p ${root_folder}/bin/disk_mount/dev
|
||||
mkdir -p ${root_folder}/bin/disk_mount/proc
|
||||
mkdir -p ${root_folder}/bin/disk_mount/usr
|
||||
cp -r ${root_folder}/bin/user/* ${root_folder}/bin/disk_mount/bin
|
||||
touch ${root_folder}/bin/disk_mount/dev/keyboard.dev
|
||||
cp -r ${root_folder}/bin/sysroot/usr/* ${root_folder}/bin/disk_mount/usr/
|
||||
|
||||
# 设置 grub 相关数据
|
||||
if [ ${ARCH} == "i386" ] || [ ${ARCH} == "x86_64" ]; then
|
||||
@ -121,7 +123,8 @@ case "$1" in
|
||||
esac
|
||||
;;
|
||||
*)
|
||||
echo "参数错误"
|
||||
#传统bios
|
||||
${GRUB_PATH_I386_LEGACY_INSTALL} --target=i386-pc --boot-directory=${boot_folder} /dev/$LOOP_DEVICE
|
||||
;;
|
||||
|
||||
esac
|
||||
|
Reference in New Issue
Block a user