Makefile 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. # gvisor系统调用测试 Makefile
  2. # 用于DragonOS项目
  3. # Rust工具链配置
  4. TOOLCHAIN="+nightly-2025-08-10-x86_64-unknown-linux-gnu"
  5. RUSTFLAGS+=""
  6. ifdef DADK_CURRENT_BUILD_DIR
  7. # 如果是在dadk中编译,那么安装到dadk的安装目录中
  8. INSTALL_DIR = $(DADK_CURRENT_BUILD_DIR)
  9. else
  10. # 如果是在本地编译,那么安装到当前目录下的install目录中
  11. INSTALL_DIR = ./install
  12. endif
  13. ifeq ($(ARCH), x86_64)
  14. export RUST_TARGET=x86_64-unknown-linux-musl
  15. else ifeq ($(ARCH), riscv64)
  16. export RUST_TARGET=riscv64gc-unknown-linux-gnu
  17. else
  18. # 默认为x86_64,用于本地编译
  19. export RUST_TARGET=x86_64-unknown-linux-musl
  20. endif
  21. .PHONY: all build install download test list run clean help
  22. # 默认目标:构建并安装
  23. all: build install
  24. # 显示帮助信息
  25. help:
  26. @echo "gvisor系统调用测试 Makefile"
  27. @echo ""
  28. @echo "可用目标:"
  29. @echo " all - 构建并安装测试运行器(默认)"
  30. @echo " build - 构建Rust测试运行器"
  31. @echo " install - 安装测试运行器和必要文件"
  32. @echo " download - 下载gvisor测试套件"
  33. @echo " test - 运行白名单中的测试"
  34. @echo " list - 列出所有可用测试"
  35. @echo " run - 运行测试并传递参数(如:make run ARGS=\"-v epoll_test\")"
  36. @echo " clean - 清理测试文件和结果"
  37. @echo " help - 显示此帮助信息"
  38. @echo ""
  39. @echo "环境变量:"
  40. @echo " SYSCALL_TEST_WORKDIR - 测试工作目录(默认: /tmp/gvisor_tests)"
  41. @echo " TEST_TIMEOUT - 单个测试超时时间(默认: 300秒)"
  42. # 构建Rust测试运行器
  43. build:
  44. @echo "构建gvisor测试运行器..."
  45. @cd runner && RUSTFLAGS=$(RUSTFLAGS) cargo $(TOOLCHAIN) build --target $(RUST_TARGET) --release
  46. # 下载测试套件
  47. download:
  48. @echo "下载gvisor测试套件..."
  49. @./download_tests.sh --skip-if-exists
  50. # 获取blocklists目录下的所有文件
  51. BLOCKLIST_FILES := $(shell find blocklists -type f 2>/dev/null)
  52. # 安装到目标目录
  53. install: build download whitelist.txt $(BLOCKLIST_FILES)
  54. @echo "安装gvisor测试套件到 $(INSTALL_DIR)"
  55. @mkdir -p $(INSTALL_DIR)
  56. # 安装Rust测试运行器二进制文件
  57. @cp -f runner/target/$(RUST_TARGET)/release/runner $(INSTALL_DIR)/gvisor-test-runner
  58. @chmod +x $(INSTALL_DIR)/gvisor-test-runner
  59. # 安装测试配置文件
  60. @cp -f whitelist.txt $(INSTALL_DIR)/
  61. @cp -rf blocklists $(INSTALL_DIR)/
  62. @cp -rf tests $(INSTALL_DIR)/
  63. @cp -f run_tests.sh $(INSTALL_DIR)/
  64. @echo "安装完成"
  65. # 运行测试
  66. test: build
  67. @echo "运行gvisor系统调用测试..."
  68. @if [ ! -d tests ]; then \
  69. echo "测试套件不存在,正在下载..."; \
  70. ./download_tests.sh; \
  71. fi
  72. @./runner/target/$(RUST_TARGET)/release/runner
  73. # 列出所有测试
  74. list: build
  75. @if [ ! -d tests ]; then \
  76. echo "测试套件不存在,正在下载..."; \
  77. ./download_tests.sh; \
  78. fi
  79. @./runner/target/$(RUST_TARGET)/release/runner --list
  80. # 运行测试并传递参数
  81. run: build
  82. @if [ ! -d tests ]; then \
  83. echo "测试套件不存在,正在下载..."; \
  84. ./download_tests.sh; \
  85. fi
  86. @./runner/target/$(RUST_TARGET)/release/runner $(ARGS)
  87. # 清理
  88. clean:
  89. @echo "清理测试文件和结果..."
  90. @rm -rf results/
  91. @rm -f gvisor-syscalls-tests.tar.xz
  92. @cd runner && cargo clean
  93. @echo "清理完成"