From 9a367aa7eb1576a235f5f52ee542132a1e5e39df Mon Sep 17 00:00:00 2001 From: LoGin Date: Thu, 24 Aug 2023 18:50:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0github=20workflow=EF=BC=8C?= =?UTF-8?q?=E6=A3=80=E6=9F=A5=E4=BB=A3=E7=A0=81=E6=98=AF=E5=90=A6=E5=B7=B2?= =?UTF-8?q?=E7=BB=8F=E6=A0=BC=E5=BC=8F=E5=8C=96=20(#342)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 添加github workflow,检查代码是否已经格式化 --- .github/workflows/cache-toolchain.yml | 55 +++++++++++++++++++ .github/workflows/makefile.yml | 22 +++----- .github/workflows/rustfmt.yml | 40 ++++++++++++++ .gitignore | 2 + Cargo.toml | 7 +++ kernel/src/Makefile | 4 +- kernel/src/syscall/mod.rs | 1 - kernel/src/syscall/user_access.rs | 2 +- user/Makefile | 2 +- user/libs/libc/build.rs | 2 +- user/libs/libc/src/Makefile | 2 +- .../libc/src/include/internal/bindings/mod.rs | 2 +- user/libs/libc/src/include/internal/mod.rs | 2 +- user/libs/libc/src/include/mod.rs | 2 +- 14 files changed, 122 insertions(+), 23 deletions(-) create mode 100644 .github/workflows/cache-toolchain.yml create mode 100644 .github/workflows/rustfmt.yml create mode 100644 Cargo.toml diff --git a/.github/workflows/cache-toolchain.yml b/.github/workflows/cache-toolchain.yml new file mode 100644 index 00000000..1c1c658a --- /dev/null +++ b/.github/workflows/cache-toolchain.yml @@ -0,0 +1,55 @@ +name: Reusable workflow example + +on: workflow_call + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Cache DragonOS GCC + id: cache-dragonos-gcc + uses: actions/cache@v3 + env: + cache-name: cache-dragonos-gcc + with: + path: | + ~/opt + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('tools/build_gcc_toolchain.sh') }} + + - if: ${{ steps.cache-dragonos-gcc.outputs.cache-hit != 'true' }} + name: build dragonos-gcc + continue-on-error: true + run: bash tools/build_gcc_toolchain.sh -f + + - name: Cache build tools + id: cache-build-tools + uses: actions/cache@v3 + env: + cache-name: cache-build-tools + dadk_version: 0.1.2 + with: + path: | + ~/.cargo + ~/.rustup + ~/.bashrc + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.dadk_version }}-${{ hashFiles('.github/workflows/cache-toolchain.yml') }} + + - if: ${{ steps.cache-build-tools.outputs.cache-hit != 'true' }} + name: Install toolchain + continue-on-error: true + run: | + sudo sh -c "apt update && apt install -y llvm-dev libclang-dev clang gcc-multilib libssl-dev pkg-config" + cargo install cargo-binutils + rustup toolchain install nightly + rustup default nightly + rustup component add rust-src + rustup component add llvm-tools-preview + rustup target add x86_64-unknown-none + rustup component add rust-src --toolchain nightly-x86_64-unknown-linux-gnu + rustup component add rustfmt + cargo install dadk --version 0.1.2 + diff --git a/.github/workflows/makefile.yml b/.github/workflows/makefile.yml index 7cc4e14c..0e320bb5 100644 --- a/.github/workflows/makefile.yml +++ b/.github/workflows/makefile.yml @@ -7,13 +7,18 @@ on: branches: [ "master" ] jobs: + # ensure the toolchain is cached + ensure-toolchain: + uses: ./.github/workflows/cache-toolchain.yml + build: runs-on: ubuntu-latest + needs: [ensure-toolchain] steps: - uses: actions/checkout@v3 - + - name: Cache DragonOS GCC id: cache-dragonos-gcc uses: actions/cache@v3 @@ -24,28 +29,19 @@ jobs: ~/opt key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('tools/build_gcc_toolchain.sh') }} - - if: ${{ steps.cache-dragonos-gcc.outputs.cache-hit != 'true' }} - name: build dragonos-gcc - continue-on-error: true - run: bash tools/build_gcc_toolchain.sh -f - - name: Cache build tools id: cache-build-tools uses: actions/cache@v3 env: cache-name: cache-build-tools - dadk_version: 0.1.1 + dadk_version: 0.1.2 with: path: | ~/.cargo ~/.rustup ~/.bashrc - key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.dadk_version }}-${{ hashFiles('.github/workflows/makefile.yml') }} - - - if: ${{ steps.cache-build-tools.outputs.cache-hit != 'true' }} - name: Install toolchain - continue-on-error: true - run: sudo sh -c "apt update && apt install -y llvm-dev libclang-dev clang gcc-multilib libssl-dev" && cargo install cargo-binutils && rustup toolchain install nightly && rustup default nightly && rustup component add rust-src && rustup component add llvm-tools-preview && rustup target add x86_64-unknown-none && rustup component add rust-src --toolchain nightly-x86_64-unknown-linux-gnu && cargo install dadk --version 0.1.1 + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.dadk_version }}-${{ hashFiles('.github/workflows/cache-toolchain.yml') }} + - name: build the DragonOS run: bash -c "source ~/.cargo/env && export DragonOS_GCC=$HOME/opt/dragonos-gcc/gcc-x86_64-unknown-none/bin && make -j $(nproc) " diff --git a/.github/workflows/rustfmt.yml b/.github/workflows/rustfmt.yml new file mode 100644 index 00000000..44e9daf0 --- /dev/null +++ b/.github/workflows/rustfmt.yml @@ -0,0 +1,40 @@ +name: Rust format check + +on: [push, pull_request] + +jobs: + # ensure the toolchain is cached + ensure-toolchain: + uses: ./.github/workflows/cache-toolchain.yml + + fmt: + name: check + runs-on: ubuntu-latest + needs: [ensure-toolchain] + steps: + - uses: actions/checkout@v3 + - name: Cache build tools + id: cache-build-tools + uses: actions/cache@v3 + env: + cache-name: cache-build-tools + dadk_version: 0.1.2 + with: + path: | + ~/.cargo + ~/.rustup + ~/.bashrc + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.dadk_version }}-${{ hashFiles('.github/workflows/cache-toolchain.yml') }} + + # 准备 bindings.rs + # 由于 bindings.rs 是在 build.rs 中生成的,而这里为了方便,直接 touch 一个空文件 + - name: prepare bindings + run: | + printf "\n" >> kernel/src/include/bindings/bindings.rs + printf "\n" >> user/libs/libc/src/include/internal/bindings/bindings.rs + + - name: Check format + uses: actions-rs/cargo@v1 + with: + command: fmt + args: --all -- --check diff --git a/.gitignore b/.gitignore index 289ac261..d9faba48 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,5 @@ user/sys_api_lib docs/_build draft cppcheck.xml +/target/ +Cargo.lock \ No newline at end of file diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 00000000..cc4c4197 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,7 @@ +[workspace] +resolver = "2" + +members = [ + "kernel", + "user/libs/libc/", +] \ No newline at end of file diff --git a/kernel/src/Makefile b/kernel/src/Makefile index 7500550a..1c8f9650 100644 --- a/kernel/src/Makefile +++ b/kernel/src/Makefile @@ -38,7 +38,7 @@ kernel_rust: all: kernel @echo "Linking kernel..." - $(LD) -b elf64-x86-64 -z muldefs -o kernel head.o main.o $(shell find . -name "*.o") ../target/x86_64-unknown-none/release/libdragonos_kernel.a -T link.lds + $(LD) -b elf64-x86-64 -z muldefs -o kernel head.o main.o $(shell find . -name "*.o") $(ROOT_PATH)/target/x86_64-unknown-none/release/libdragonos_kernel.a -T link.lds # 生成kallsyms current_dir=$(pwd) @@ -55,7 +55,7 @@ all: kernel # 重新链接 @echo "Re-Linking kernel..." @echo $(shell find . -name "*.o") - $(LD) -b elf64-x86-64 -z muldefs -o kernel head.o main.o $(shell find . -name "*.o") ../target/x86_64-unknown-none/release/libdragonos_kernel.a ./debug/kallsyms.o -T link.lds + $(LD) -b elf64-x86-64 -z muldefs -o kernel head.o main.o $(shell find . -name "*.o") $(ROOT_PATH)/target/x86_64-unknown-none/release/libdragonos_kernel.a ./debug/kallsyms.o -T link.lds @echo "Generating kernel ELF file..." # 生成内核文件 $(OBJCOPY) -I elf64-x86-64 -O elf64-x86-64 kernel ../../bin/kernel/kernel.elf diff --git a/kernel/src/syscall/mod.rs b/kernel/src/syscall/mod.rs index 20d7a5ef..6965356c 100644 --- a/kernel/src/syscall/mod.rs +++ b/kernel/src/syscall/mod.rs @@ -664,7 +664,6 @@ impl Syscall { Ok(pipefd) => Self::pipe(pipefd), }, } - } SYS_UNLINK_AT => { diff --git a/kernel/src/syscall/user_access.rs b/kernel/src/syscall/user_access.rs index 006a30e0..4a0897c9 100644 --- a/kernel/src/syscall/user_access.rs +++ b/kernel/src/syscall/user_access.rs @@ -327,7 +327,7 @@ impl<'a> UserBufferWriter<'a> { }; return Ok(chunks); } - + fn convert_one_with_offset(src: &mut [u8], offset: usize) -> Result<&mut T, SystemError> { if offset + core::mem::size_of::() > src.len() { return Err(SystemError::EINVAL); diff --git a/user/Makefile b/user/Makefile index 8e19d10f..da796370 100644 --- a/user/Makefile +++ b/user/Makefile @@ -95,7 +95,7 @@ sys_api_lib: sys_api_lib_stage_1 mkdir -p $(ROOT_PATH)/bin/tmp/user/sys_api_lib_build_tmp mkdir -p $(OLD_LIBC_INSTALL_PATH)/include mkdir -p $(OLD_LIBC_INSTALL_PATH)/lib - $(AR) x $(ROOT_PATH)/user/libs/libc/target/x86_64-unknown-none/release/liblibc.a --output=$(ROOT_PATH)/bin/tmp/user/sys_api_lib_build_tmp + $(AR) x $(ROOT_PATH)/target/x86_64-unknown-none/release/liblibc.a --output=$(ROOT_PATH)/bin/tmp/user/sys_api_lib_build_tmp $(AR) crvs $(OLD_LIBC_INSTALL_PATH)/lib/libc.a $(shell find ./libs/* -name "*.o") $(shell find $(ROOT_PATH)/bin/tmp/user/sys_api_lib_build_tmp/* -name "*.o") rm -rf $(ROOT_PATH)/bin/tmp/user/sys_api_lib_build_tmp # $(shell find ./libs/* -name "*.o" | xargs -I {} cp {} $(ROOT_PATH)/bin/sysroot/usr/lib/) diff --git a/user/libs/libc/build.rs b/user/libs/libc/build.rs index 6930e321..bcc9d717 100644 --- a/user/libs/libc/build.rs +++ b/user/libs/libc/build.rs @@ -42,4 +42,4 @@ fn main() { .write_to_file(out_path.join("bindings.rs")) .expect("Couldn't write bindings!"); } -} \ No newline at end of file +} diff --git a/user/libs/libc/src/Makefile b/user/libs/libc/src/Makefile index 8131f4e2..e2d8ec83 100644 --- a/user/libs/libc/src/Makefile +++ b/user/libs/libc/src/Makefile @@ -36,4 +36,4 @@ libc: $(libc_objs) $(libc_sub_dirs) libc_rust libc_rust: rustup default nightly - cargo +nightly build --release --target ./arch/x86_64/x86_64-unknown-none.json \ No newline at end of file + cargo +nightly build --release --target ./arch/x86_64/x86_64-unknown-none.json diff --git a/user/libs/libc/src/include/internal/bindings/mod.rs b/user/libs/libc/src/include/internal/bindings/mod.rs index 44946577..90c70dcc 100644 --- a/user/libs/libc/src/include/internal/bindings/mod.rs +++ b/user/libs/libc/src/include/internal/bindings/mod.rs @@ -1 +1 @@ -pub mod bindings; \ No newline at end of file +pub mod bindings; diff --git a/user/libs/libc/src/include/internal/mod.rs b/user/libs/libc/src/include/internal/mod.rs index 44946577..90c70dcc 100644 --- a/user/libs/libc/src/include/internal/mod.rs +++ b/user/libs/libc/src/include/internal/mod.rs @@ -1 +1 @@ -pub mod bindings; \ No newline at end of file +pub mod bindings; diff --git a/user/libs/libc/src/include/mod.rs b/user/libs/libc/src/include/mod.rs index 069bb86b..becabbd6 100644 --- a/user/libs/libc/src/include/mod.rs +++ b/user/libs/libc/src/include/mod.rs @@ -1 +1 @@ -pub mod internal; \ No newline at end of file +pub mod internal;