xmake.lua 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. add_rules("plugin.compile_commands.autoupdate", {outputdir = ".vscode"})
  2. target("RyanMqtt",function()
  3. set_kind("binary")
  4. add_syslinks("pthread","rt")
  5. set_toolchains("gcc") -- 确保使用 GCC
  6. -- set_toolchains("clang-20")
  7. set_languages("gnu99") -- 启用 GNU 扩展
  8. add_defines("PKG_USING_RYANMQTT_IS_ENABLE_ASSERT") -- 开启assert
  9. add_defines("RyanMqttLinuxTestEnable") -- linux测试
  10. -- set_optimize("smallest") -- -Os
  11. -- set_optimize("faster") -- -O2
  12. -- set_optimize("fastest") -- -O3
  13. set_optimize("aggressive") -- -Ofast
  14. -- 启用全部警告
  15. set_warnings("everything") -- -Wall -Wextra -Weffc++ / -Weverything
  16. -- 链接器选项:生成 map 文件
  17. add_ldflags("-Wl,-Map=$(buildir)/RyanMqtt.map")
  18. -- Sanitizer 检测项(运行时错误)
  19. add_ldflags(
  20. "-fsanitize=address", -- 内存越界、释放后使用
  21. "-fsanitize=leak", -- 内存泄漏
  22. "-fsanitize=undefined", -- 未定义行为(除零、溢出、无效移位等)
  23. "-fsanitize=pointer-compare", -- 无效指针比较
  24. "-fsanitize=pointer-subtract", -- 无效指针相减
  25. "-fsanitize=bounds", -- 数组越界
  26. "-fsanitize=float-divide-by-zero", -- 浮点除零
  27. "-fsanitize=float-cast-overflow", -- 浮点转整数溢出
  28. -- "-fsanitize=alignment", -- 检测未对齐的内存访问
  29. "-fno-sanitize=alignment", -- 某些平台不兼容
  30. {force = true}
  31. )
  32. -- 编译器警告与静态分析(开发期错误检测)
  33. add_cxflags(
  34. "-flto", -- 链接时优化(可选)
  35. "-pedantic", -- 强制遵循 ISO C/C++ 标准
  36. "-Wall", -- 启用大多数常见警告
  37. "-Wextra", -- 启用额外警告
  38. "-fanalyzer", -- 启用 gcc 静态分析器
  39. "-Wno-unused-parameter",
  40. "-Wfloat-equal", -- 浮点直接比较
  41. "-Wshadow", -- 局部变量遮蔽
  42. "-Wcast-align", -- 类型转换对齐问题
  43. "-Wpointer-arith", -- 指针运算
  44. "-Warray-bounds=2", -- 数组越界访问(编译期可分析到的)
  45. "-Wstringop-overflow=2", -- memcpy / strcpy 等可能的溢出
  46. "-Wstringop-truncation", -- 字符串截断风险
  47. "-Walloc-zero", -- malloc(0) 等分配 0 字节的情况
  48. "-Wfree-nonheap-object", -- 释放非堆对象
  49. -- "-Wconversion", -- 隐式类型转换可能导致精度丢失/溢出
  50. "-Wnull-dereference", -- 空指针解引用
  51. "-Wlogical-op", -- 逻辑运算符误用
  52. "-Wstrict-overflow=5", -- 有符号溢出优化假设
  53. "-Wmissing-prototypes", -- 未在头文件声明的全局函数
  54. "-Wmissing-declarations", -- 未声明的全局变量/函数
  55. "-Wredundant-decls", -- 重复声明
  56. "-Wunreachable-code", -- 不可达代码
  57. "-Wunsafe-loop-optimizations", -- 循环优化可能引入的问题
  58. "-Wtype-limits", -- 比较恒真/恒假的表达式(如 unsigned < 0)
  59. "-Wshift-overflow=2", -- 移位导致的溢出
  60. "-Wshift-negative-value", -- 对负数进行移位
  61. "-Wdiv-by-zero", -- 除以零(编译期可分析到的)
  62. "-Wformat-security", -- 格式化字符串安全问题
  63. "-Wdisabled-optimization", -- 被禁用的优化
  64. -- "-Wwrite-strings", -- 将字符串字面量视为 const char[],防止被修改
  65. "-Wreturn-local-addr", -- 返回局部变量地址
  66. "-Wuse-after-free", -- 释放后使用(编译期可分析到的)
  67. "-Wdangling-pointer=2", -- 悬空指针(GCC 12+)
  68. "-fstack-protector-strong", -- 栈保护
  69. -- clang 的兼容项(可选)
  70. -- "-Wno-gnu-zero-variadic-macro-arguments",
  71. -- "-Wno-c23-extensions",
  72. {force = true}
  73. )
  74. --加入代码和头文件
  75. add_includedirs('./common', {public = true})
  76. add_includedirs('./coreMqtt', {public = true})
  77. add_includedirs('./mqttclient/include', {public = true})
  78. add_includedirs('./platform/linux', {public = true})
  79. add_includedirs('./platform/linux/valloc', {public = true})
  80. add_files('./common/*.c', {public = true})
  81. add_files('./coreMqtt/*.c', {public = true})
  82. add_files('./mqttclient/*.c', {public = true})
  83. add_files('./platform/linux/*.c', {public = true})
  84. add_files('./platform/linux/valloc/*.c', {public = true})
  85. add_includedirs('./test', {public = true})
  86. add_files('./test/*.c', {public = true})
  87. end)