Browse Source

Merge branch 'master' into data_structure

fslongjin 2 years ago
parent
commit
cb66d00844
4 changed files with 97 additions and 52 deletions
  1. 18 0
      .github/workflows/makefile.yml
  2. 72 46
      run.sh
  3. 0 6
      tools/Dockerfile
  4. 7 0
      tools/build_in_docker.sh

+ 18 - 0
.github/workflows/makefile.yml

@@ -0,0 +1,18 @@
+name: Build Check
+
+on:
+  push:
+    branches: [ "master" ]
+  pull_request:
+    branches: [ "master" ]
+
+jobs:
+  build:
+
+    runs-on: ubuntu-latest
+
+    steps:
+    - uses: actions/checkout@v3
+      
+    - name: build the DragonOS
+      run: make

+ 72 - 46
run.sh

@@ -4,12 +4,28 @@
 #  echo "请以sudo权限运行"
 #  exit
 #fi
+GENERATE_ISO=0
+IN_DOCKER=0
 
 # 第一个参数如果是--notbuild 那就不构建,直接运行
 if [ ! "$1" == "--nobuild" ]; then
     echo "开始构建..."
-    make all -j 16
-    make clean
+    if [ "$1" == "--docker" ]; then
+        echo "使用docker构建"
+        sudo bash tools/build_in_docker.sh
+        GENERATE_ISO=0
+    elif [ "$1" == "--current_in_docker" ]; then
+        echo "运行在docker内"
+        IN_DOCKER=1
+        make all -j 16
+        make clean
+        GENERATE_ISO=1
+    else
+        
+        make all -j 16
+        make clean
+        GENERATE_ISO=1
+    fi
 fi
 
 IA32_USE_QEMU=1
@@ -24,60 +40,70 @@ iso='./DragonOS.iso'
 iso_folder='./iso/'
 root_folder="$(pwd)"
 
-# toolchain
-OS=`uname -s`
-if [ "${OS}" == "Linux" ]; then
-    GRUB_PATH="$(dirname $(which grub-file))"
-elif [ "${OS}" == "Darwin" ]; then
-    GRUB_PATH="$(pwd)/tools/grub-2.06/build/grub/bin"
-fi
-export PATH="${GRUB_PATH}:$PATH"
-
-# ==============检查文件是否齐全================
+if [ "${GENERATE_ISO}" == "1" ]; then
+    echo "开始生成iso..."
 
+    # toolchain
+    OS=`uname -s`
+    if [ "${OS}" == "Linux" ]; then
+        GRUB_PATH="$(dirname $(which grub-file))"
+    elif [ "${OS}" == "Darwin" ]; then
+        GRUB_PATH="$(pwd)/tools/grub-2.06/build/grub/bin"
+    fi
+    export PATH="${GRUB_PATH}:$PATH"
 
-bins[0]=${kernel}
+    # ==============检查文件是否齐全================
 
-for file in ${bins[*]};do
-if [ ! -x $file ]; then
-  echo "$file 不存在!"
-  exit
-  fi
-done
 
-# ===============文件检查完毕===================
+    bins[0]=${kernel}
 
-# 如果是 i386/x86_64,需要判断是否符合 multiboot2 标准
-if [ ${ARCH} == "i386" ] || [ ${ARCH} == "x86_64" ]; then
-    if ${GRUB_PATH}/grub-file --is-x86-multiboot2 ${kernel}; then
-        echo Multiboot2 Confirmed!
+    for file in ${bins[*]};do
+    if [ ! -x $file ]; then
+    echo "$file 不存在!"
+    exit
+    fi
+    done
+
+    # ===============文件检查完毕===================
+
+    # 如果是 i386/x86_64,需要判断是否符合 multiboot2 标准
+    if [ ${ARCH} == "i386" ] || [ ${ARCH} == "x86_64" ]; then
+        if ${GRUB_PATH}/grub-file --is-x86-multiboot2 ${kernel}; then
+            echo Multiboot2 Confirmed!
+        else
+            echo NOT Multiboot2!
+            exit
+        fi
+    fi
+    # 检测路径是否合法,发生过 rm -rf -f /* 的惨剧
+    if [ "${iso_boot}" == "" ]; then
+        echo iso_boot path error.
     else
-        echo NOT Multiboot2!
-        exit
+        mkdir -p ${iso_boot}
+        rm -rf -f ${iso_boot}/*
     fi
-fi
-# 检测路径是否合法,发生过 rm -rf -f /* 的惨剧
-if [ "${iso_boot}" == "" ]; then
-    echo iso_boot path error.
-else
-    mkdir -p ${iso_boot}
-    rm -rf -f ${iso_boot}/*
-fi
 
-# 设置 grub 相关数据
-if [ ${ARCH} == "i386" ] || [ ${ARCH} == "x86_64" ]; then
-    cp ${kernel} ${iso_boot}
-    mkdir ${iso_boot_grub}
-    touch ${iso_boot_grub}/grub.cfg
-    echo 'set timeout=15
-    set default=0
-    menuentry "DragonOS" {
-       multiboot2 /boot/kernel.elf "KERNEL_ELF"
-   }' >${iso_boot_grub}/grub.cfg
+    # 设置 grub 相关数据
+    if [ ${ARCH} == "i386" ] || [ ${ARCH} == "x86_64" ]; then
+        cp ${kernel} ${iso_boot}
+        mkdir ${iso_boot_grub}
+        touch ${iso_boot_grub}/grub.cfg
+        echo 'set timeout=15
+        set default=0
+        menuentry "DragonOS" {
+        multiboot2 /boot/kernel.elf "KERNEL_ELF"
+    }' >${iso_boot_grub}/grub.cfg
+    fi
+
+    ${GRUB_PATH}/grub-mkrescue -o ${iso} ${iso_folder}
+    rm -rf ${iso_folder}
+    if [ "${IN_DOCKER}" == "1" ]; then
+        echo "运行在docker中, 构建结束"
+        exit 0
+    fi
 fi
 
-${GRUB_PATH}/grub-mkrescue -o ${iso} ${iso_folder}
-rm -rf ${iso_folder}
+
 # 进行启动前检查
 flag_can_run=0
 

+ 0 - 6
tools/Dockerfile

@@ -1,6 +0,0 @@
-FROM debian:bullseye
-RUN apt update \
-    && apt install -y git xorriso  build-essential
-VOLUME ["/user_data"]
-
-CMD tail -f /dev/null

+ 7 - 0
tools/build_in_docker.sh

@@ -0,0 +1,7 @@
+docker rm -f dragonos-build
+p=`pwd`
+cpu_count=$(cat /proc/cpuinfo |grep "processor"|wc -l)
+docker run -v $p:/data --name dragonos-build -i dragonos/dragonos-dev:v1.0 bash << EOF
+cd /data
+bash run.sh --current_in_docker
+EOF