DragonOS/user/port/gcc/11.3.0/build-hosted.sh
guanjinquan 2224c93ea9
完善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>
2023-01-06 21:29:23 +08:00

52 lines
1.3 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

##############################################
# DragonOS hosted gcc build script
#
# This script is used to build userland gcc for DragonOSRunning on Linux)
##############################################
# 编译前请先设置参数
sys_root=$DRAGONOS_SYSROOT
gcc_path=请填写gcc的路径
# 要安装到的目录
PREFIX=$HOME/opt/dragonos-host-userspace
if [ ! -d ${gcc_path} ]; then
echo "Error: ${gcc_path} not found"
exit 1
fi
if [ ! -d ${sysroot} ]; then
echo "Error: ${sysroot} not found"
exit 1
fi
# 安装依赖
# 注意texinfo和binutils的版本是否匹配
# 注意gmp/mpc/mpfr和gcc/g++的版本是否匹配
sudo apt-get install -y \
g++ \
gcc \
make \
texinfo \
libgmp3-dev \
libmpc-dev \
libmpfr-dev \
flex \
wget
mkdir -p build-gcc || exit 1
mkdir -p ${PREFIX} || exit 1
cd build-gcc
${gcc_path}/configure --prefix=${PREFIX} --target=x86_64-dragonos --with-sysroot=${sysroot} --disable-werror --disable-shared --disable-bootstrap --enable-languages=c,c++ || exit 1
make all-gcc all-target-libgcc -j $(nproc) || exit 1
make install-gcc install-target-libgcc -j $(nproc) || exit 1
# 这里会报错,暂时不知道为什么
# make all-target-libstdc++-v3 -j $(nproc) || exit 1
# make install-target-libstdc++-v3 -j $(nproc) || exit 1
make clean
cd ..
rm -rf build-gcc