Browse Source

refactor: 把dadk原有的管理用户程序编译的逻辑移动到dadk-user (#60)

* refactor: 把dadk原有的管理用户程序编译的逻辑移动到dadk-user

同时把`--dragonos-dir`改为了`--sysroot-dir`
---------

Signed-off-by: longjin <longjin@DragonOS.org>
LoGin 5 months ago
parent
commit
73779f3d0a

+ 2 - 2
.github/workflows/rust.yml

@@ -17,9 +17,9 @@ jobs:
     steps:
     - uses: actions/checkout@v3
     - name: Build
-      run: cargo build --verbose
+      run: cargo build --release
     - name: Run tests
-      run: cargo test --verbose
+      run: cargo test --release
   
   fmt:
     runs-on: ubuntu-latest

+ 6 - 33
Cargo.toml

@@ -1,39 +1,12 @@
-[package]
-name = "dadk"
-authors = ["longjin <longjin@DragonOS.org>", "chikejian <chikejian@DragonOS.org>"]
-version = "0.1.11"
-edition = "2021"
-description = "DragonOS Application Development Kit\nDragonOS应用开发工具"
-license = "GPL-2.0-only"
-repository = "https://github.com/DragonOS-Community/DADK.git"
-readme = "README.md"
-
 [workspace]
+resolver = "2"
 members = [
-    "crates/test_base",
+    "crates/test_base", "dadk", "dadk-user",
 ]
 
-[[bin]]
-name = "dadk"
-path = "src/main.rs"
-doc = true
-
 # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
 
-[dependencies]
-chrono = { version = "=0.4.35", features = ["serde"] }
-clap = { version = "=4.5.4", features = ["derive"] }
-derive_builder = "0.20.0"
-lazy_static = "1.4.0"
-log = "0.4.17"
-regex = "1.9.1"
-reqwest = { version = "0.11", features = ["blocking", "json"] }
-serde = { version = "1.0.160", features = ["serde_derive"] }
-serde_json = "1.0.96"
-simple_logger = { version = "4.1.0", features = ["stderr"] }
-toml = "0.8.12"
-zip = "0.6"
-
-[dev-dependencies]
-test_base = { path = "crates/test_base" }
-
+[profile.release]
+lto = true
+opt-level = 3
+strip = true

+ 3 - 0
crates/test_base/src/lib.rs

@@ -68,6 +68,9 @@ impl TestContext for BaseTestContext {
         let mut project_base_path = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
         project_base_path.pop();
         project_base_path.pop();
+        // 设置workdir
+        std::env::set_current_dir(&project_base_path).ok();
+
         let r = BaseTestContext { project_base_path };
         r.ensure_fake_dragonos_dir_exist();
         r.ensure_fake_dadk_cache_root_exist();

+ 20 - 0
dadk-user/Cargo.toml

@@ -0,0 +1,20 @@
+[package]
+name = "dadk-user"
+version = "0.1.11"
+edition = "2021"
+
+[dependencies]
+chrono = { version = "=0.4.35", features = ["serde"] }
+clap = { version = "=4.5.4", features = ["derive"] }
+derive_builder = "0.20.0"
+lazy_static = "1.4.0"
+log = "0.4.17"
+regex = "1.9.1"
+reqwest = { version = "0.11", features = ["blocking", "json"] }
+serde = { version = "1.0.160", features = ["serde_derive"] }
+serde_json = "1.0.96"
+toml = "0.8.12"
+zip = "0.6"
+
+[dev-dependencies]
+test_base = { path = "../crates/test_base" }

+ 0 - 0
src/console/README.md → dadk-user/src/console/README.md


+ 0 - 0
src/console/clean.rs → dadk-user/src/console/clean.rs


+ 0 - 0
src/console/elements.rs → dadk-user/src/console/elements.rs


+ 0 - 0
src/console/interactive.rs → dadk-user/src/console/interactive.rs


+ 1 - 2
src/console/mod.rs → dadk-user/src/console/mod.rs

@@ -29,7 +29,7 @@ use self::clean::CleanArg;
 pub struct CommandLineArgs {
     /// DragonOS sysroot在主机上的路径
     #[arg(short, long, value_parser = parse_check_dir_exists)]
-    pub dragonos_dir: Option<PathBuf>,
+    pub sysroot_dir: Option<PathBuf>,
     /// DADK任务配置文件所在目录
     #[arg(short, long, value_parser = parse_check_dir_exists)]
     pub config_dir: Option<PathBuf>,
@@ -72,7 +72,6 @@ fn parse_target_arch(s: &str) -> Result<TargetArch, String> {
     return Ok(x.unwrap());
 }
 
-/// @brief 要执行的操作
 #[derive(Debug, Subcommand, Clone, Copy, PartialEq, Eq)]
 pub enum Action {
     /// 构建所有项目

+ 0 - 0
src/console/new_config.rs → dadk-user/src/console/new_config.rs


+ 12 - 14
src/context.rs → dadk-user/src/context.rs

@@ -16,7 +16,7 @@ use crate::{
 
 #[derive(Debug, Builder)]
 #[builder(setter(into))]
-pub struct DadkExecuteContext {
+pub struct DadkUserExecuteContext {
     /// DragonOS sysroot在主机上的路径
     sysroot_dir: Option<PathBuf>,
     /// DADK任务配置文件所在目录
@@ -39,7 +39,7 @@ pub struct DadkExecuteContext {
     self_ref: Mutex<Weak<Self>>,
 }
 
-impl DadkExecuteContext {
+impl DadkUserExecuteContext {
     pub fn init(&self, self_arc: Arc<Self>) {
         self.set_self_ref(Arc::downgrade(&self_arc));
 
@@ -111,16 +111,14 @@ impl DadkExecuteContext {
 pub trait TestContextExt: TestContext {
     fn base_context(&self) -> &BaseTestContext;
 
-    fn execute_context(&self) -> &DadkExecuteContext;
+    fn execute_context(&self) -> &DadkUserExecuteContext;
 }
 
-impl DadkExecuteContextBuilder {
+impl DadkUserExecuteContextBuilder {
     /// 用于测试的默认构建器
     #[cfg(test)]
-    fn default_test_execute_context_builder(
-        base_context: &BaseTestContext,
-    ) -> DadkExecuteContextBuilder {
-        DadkExecuteContextBuilder::default()
+    fn default_test_execute_context_builder(base_context: &BaseTestContext) -> Self {
+        Self::default()
             .sysroot_dir(Some(base_context.fake_dragonos_sysroot()))
             .action(Action::Build)
             .thread_num(None)
@@ -132,7 +130,7 @@ impl DadkExecuteContextBuilder {
 
 #[cfg(test)]
 pub struct DadkExecuteContextTestBuildX86_64V1 {
-    context: Arc<DadkExecuteContext>,
+    context: Arc<DadkUserExecuteContext>,
 }
 
 #[cfg(test)]
@@ -140,7 +138,7 @@ impl TestContext for DadkExecuteContextTestBuildX86_64V1 {
     fn setup() -> Self {
         let base_context = BaseTestContext::setup();
         let context =
-            DadkExecuteContextBuilder::default_test_execute_context_builder(&base_context)
+            DadkUserExecuteContextBuilder::default_test_execute_context_builder(&base_context)
                 .target_arch(TargetArch::X86_64)
                 .config_dir(Some(base_context.config_v1_dir()))
                 .build()
@@ -153,7 +151,7 @@ impl TestContext for DadkExecuteContextTestBuildX86_64V1 {
 
 #[cfg(test)]
 pub struct DadkExecuteContextTestBuildRiscV64V1 {
-    context: Arc<DadkExecuteContext>,
+    context: Arc<DadkUserExecuteContext>,
 }
 
 #[cfg(test)]
@@ -161,7 +159,7 @@ impl TestContext for DadkExecuteContextTestBuildRiscV64V1 {
     fn setup() -> Self {
         let base_context = BaseTestContext::setup();
         let context =
-            DadkExecuteContextBuilder::default_test_execute_context_builder(&base_context)
+            DadkUserExecuteContextBuilder::default_test_execute_context_builder(&base_context)
                 .target_arch(TargetArch::RiscV64)
                 .config_dir(Some(base_context.config_v1_dir()))
                 .build()
@@ -176,7 +174,7 @@ macro_rules! impl_for_test_context {
     ($context:ty) => {
         #[cfg(test)]
         impl std::ops::Deref for $context {
-            type Target = DadkExecuteContext;
+            type Target = DadkUserExecuteContext;
 
             fn deref(&self) -> &Self::Target {
                 &self.context
@@ -189,7 +187,7 @@ macro_rules! impl_for_test_context {
                 self.base_test_context.as_ref().unwrap()
             }
 
-            fn execute_context(&self) -> &DadkExecuteContext {
+            fn execute_context(&self) -> &DadkUserExecuteContext {
                 &self.context
             }
         }

+ 0 - 0
src/executor/README.md → dadk-user/src/executor/README.md


+ 0 - 0
src/executor/cache.rs → dadk-user/src/executor/cache.rs


+ 3 - 3
src/executor/mod.rs → dadk-user/src/executor/mod.rs

@@ -10,7 +10,7 @@ use log::{debug, error, info, warn};
 
 use crate::{
     console::{clean::CleanLevel, Action},
-    context::DadkExecuteContext,
+    context::DadkUserExecuteContext,
     executor::cache::CacheDir,
     parser::{
         task::{CodeSource, PrebuiltSource, TaskEnv, TaskType},
@@ -616,7 +616,7 @@ pub enum ExecutorError {
 /// # 准备全局环境变量
 pub fn prepare_env(
     sched_entities: &SchedEntities,
-    execute_ctx: &Arc<DadkExecuteContext>,
+    execute_ctx: &Arc<DadkUserExecuteContext>,
 ) -> Result<(), ExecutorError> {
     info!("Preparing environment variables...");
     let env_list = create_global_env_list(sched_entities, execute_ctx)?;
@@ -629,7 +629,7 @@ pub fn prepare_env(
 /// # 创建全局环境变量列表
 fn create_global_env_list(
     sched_entities: &SchedEntities,
-    execute_ctx: &Arc<DadkExecuteContext>,
+    execute_ctx: &Arc<DadkUserExecuteContext>,
 ) -> Result<EnvMap, ExecutorError> {
     let mut env_list = EnvMap::new();
     let envs: Vars = std::env::vars();

+ 0 - 0
src/executor/source.rs → dadk-user/src/executor/source.rs


+ 0 - 0
src/executor/target.rs → dadk-user/src/executor/target.rs


+ 0 - 0
src/executor/tests.rs → dadk-user/src/executor/tests.rs


+ 4 - 18
src/lib.rs → dadk-user/src/lib.rs

@@ -91,7 +91,6 @@ extern crate lazy_static;
 extern crate log;
 extern crate serde;
 extern crate serde_json;
-extern crate simple_logger;
 
 #[cfg(test)]
 extern crate test_base;
@@ -102,11 +101,10 @@ use clap::Parser;
 
 use log::{error, info};
 use parser::task::DADKTask;
-use simple_logger::SimpleLogger;
 
 use crate::{
     console::{interactive::InteractiveConsole, CommandLineArgs},
-    context::DadkExecuteContextBuilder,
+    context::DadkUserExecuteContextBuilder,
     scheduler::Scheduler,
 };
 
@@ -118,16 +116,13 @@ mod scheduler;
 pub mod static_resources;
 mod utils;
 
-pub fn dadk_main() {
-    logger_init();
-    // generate_tmp_dadk();
-    info!("DADK Starting...");
+pub fn dadk_user_main() {
     let args = CommandLineArgs::parse();
 
     info!("DADK run with args: {:?}", &args);
 
-    let context = DadkExecuteContextBuilder::default()
-        .sysroot_dir(args.dragonos_dir)
+    let context = DadkUserExecuteContextBuilder::default()
+        .sysroot_dir(args.sysroot_dir)
         .config_dir(args.config_dir)
         .action(args.action)
         .thread_num(args.thread)
@@ -196,12 +191,3 @@ pub fn dadk_main() {
         exit(1);
     }
 }
-
-/// 初始化日志系统
-fn logger_init() {
-    // 初始化日志系统,日志级别为Info
-    // 如果需要调试,可以将日志级别设置为Debug
-    let logger = SimpleLogger::new().with_level(log::LevelFilter::Info);
-
-    logger.init().unwrap();
-}

+ 0 - 0
src/parser/README.md → dadk-user/src/parser/README.md


+ 0 - 0
src/parser/mod.rs → dadk-user/src/parser/mod.rs


+ 0 - 0
src/parser/task.rs → dadk-user/src/parser/task.rs


+ 0 - 0
src/parser/task_log.rs → dadk-user/src/parser/task_log.rs


+ 0 - 0
src/parser/tests.rs → dadk-user/src/parser/tests.rs


+ 0 - 0
src/scheduler/README.md → dadk-user/src/scheduler/README.md


+ 3 - 3
src/scheduler/mod.rs → dadk-user/src/scheduler/mod.rs

@@ -14,7 +14,7 @@ use log::{error, info};
 
 use crate::{
     console::Action,
-    context::DadkExecuteContext,
+    context::DadkUserExecuteContext,
     executor::{target::Target, Executor},
     parser::task::DADKTask,
 };
@@ -266,7 +266,7 @@ pub struct Scheduler {
     /// 调度实体列表
     target: SchedEntities,
     /// dadk执行的上下文
-    context: Arc<DadkExecuteContext>,
+    context: Arc<DadkUserExecuteContext>,
 }
 
 pub enum SchedulerError {
@@ -304,7 +304,7 @@ impl Debug for SchedulerError {
 
 impl Scheduler {
     pub fn new(
-        context: Arc<DadkExecuteContext>,
+        context: Arc<DadkUserExecuteContext>,
         dragonos_dir: PathBuf,
         action: Action,
         tasks: Vec<(PathBuf, DADKTask)>,

+ 0 - 0
src/scheduler/task_deque.rs → dadk-user/src/scheduler/task_deque.rs


+ 0 - 0
src/scheduler/tests.rs → dadk-user/src/scheduler/tests.rs


+ 0 - 0
src/static_resources/mod.rs → dadk-user/src/static_resources/mod.rs


+ 0 - 0
src/static_resources/targets/rust/x86_64-unknown-dragonos.json → dadk-user/src/static_resources/targets/rust/x86_64-unknown-dragonos.json


+ 0 - 0
src/utils/file.rs → dadk-user/src/utils/file.rs


+ 0 - 0
src/utils/lazy_init.rs → dadk-user/src/utils/lazy_init.rs


+ 0 - 0
src/utils/mod.rs → dadk-user/src/utils/mod.rs


+ 0 - 0
src/utils/stdio.rs → dadk-user/src/utils/stdio.rs


+ 26 - 0
dadk/Cargo.toml

@@ -0,0 +1,26 @@
+[package]
+name = "dadk"
+authors = [
+    "longjin <longjin@DragonOS.org>",
+    "chikejian <chikejian@DragonOS.org>",
+    "xuzihao <xuzihao@DragonOS.org>"
+]
+
+version = "0.1.11"
+edition = "2021"
+description = "DragonOS Application Development Kit\nDragonOS应用开发工具"
+license = "GPL-2.0-only"
+repository = "https://github.com/DragonOS-Community/DADK.git"
+readme = "README.md"
+
+
+[[bin]]
+name = "dadk"
+path = "src/main.rs"
+doc = true
+
+
+[dependencies]
+dadk-user = { path = "../dadk-user" }
+env_logger = "0.11.5"
+log = "0.4.22"

+ 0 - 0
dadk/src/console/mod.rs


+ 5 - 0
dadk/src/lib.rs

@@ -0,0 +1,5 @@
+use dadk_user::dadk_user_main;
+
+pub fn dadk_main() {
+    dadk_user_main();
+}

+ 10 - 0
dadk/src/main.rs

@@ -0,0 +1,10 @@
+use dadk::dadk_main;
+
+fn main() {
+    logger_init();
+    dadk_main();
+}
+
+fn logger_init() {
+    env_logger::init_from_env(env_logger::Env::default().default_filter_or("info"));
+}

+ 0 - 5
src/main.rs

@@ -1,5 +0,0 @@
-use dadk::dadk_main;
-
-fn main() {
-    dadk_main();
-}