xmake.lua 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430
  1. set_project("luac")
  2. set_xmakever("3.0.4")
  3. set_version("1.0.3", {build = "%Y%m%d%H%M"})
  4. add_rules("mode.debug", "mode.release")
  5. local luatos = "../../"
  6. add_requires("libuv v1.49.2")
  7. add_packages("libuv")
  8. add_requires("gmssl")
  9. add_packages("gmssl")
  10. -- set warning all as error
  11. set_warnings("allextra")
  12. set_optimize("fastest")
  13. -- set language: c11
  14. set_languages("gnu11")
  15. -- 核心宏定义
  16. add_defines("__LUATOS__", "__XMAKE_BUILD__")
  17. -- mbedtls使用本地自定义配置
  18. add_defines("MBEDTLS_CONFIG_FILE=\"mbedtls_config_pc.h\"")
  19. -- coremark配置迭代数量
  20. add_defines("ITERATIONS=300000")
  21. if os.getenv("VM_64bit") == "1" then
  22. add_defines("LUAT_CONF_VM_64bit")
  23. end
  24. if os.getenv("LUAT_USE_GUI") == "y" then
  25. add_defines("LUAT_USE_GUI=1")
  26. add_requires("libsdl2")
  27. add_packages("libsdl2")
  28. -- freetype 用于 PC 端 gtfont 仿真渲染(使用本地freetype)
  29. -- add_requires("freetype")
  30. -- add_packages("freetype")
  31. -- add_requires("libsdl 2.26.2")
  32. -- add_packages("libsdl 2.26.2")
  33. end
  34. if os.getenv("LUAT_USE_LVGL9") == "y" then
  35. add_defines("LUAT_USE_LVGL9=1")
  36. end
  37. if is_host("windows") then
  38. add_defines("LUAT_USE_WINDOWS")
  39. add_defines("_CRT_SECURE_NO_WARNINGS")
  40. add_cflags("/utf-8")
  41. add_includedirs("win32/include")
  42. add_files("win32/src/**.c")
  43. elseif is_host("linux") then
  44. add_defines("LUA_USE_LINUX")
  45. add_cflags("-ffunction-sections -fdata-sections")
  46. add_cflags("-Wno-unused-parameter -Wno-unused-function -Wno-unused-variable")
  47. add_ldflags("-Wl,--gc-sections")
  48. elseif is_host("macos") then
  49. add_defines("LUA_USE_MACOSX")
  50. end
  51. add_includedirs("include",{public = true})
  52. add_includedirs(luatos.."lua/include",{public = true})
  53. add_includedirs(luatos.."luat/include",{public = true})
  54. -- add_includedirs("libuv/include",{public = true})
  55. target("luatos-lua")
  56. -- set kind
  57. set_kind("binary")
  58. set_targetdir("$(builddir)/out")
  59. add_files("src/*.c",{public = true})
  60. add_files("port/**.c")
  61. add_files(luatos.."lua/src/*.c")
  62. -- printf
  63. add_includedirs(luatos.."components/printf",{public = true})
  64. add_files(luatos.."components/printf/*.c")
  65. -- add_files(luatos.."luat/modules/*.c")
  66. if is_plat("linux", "macosx") then
  67. add_links("pthread", "m", "dl")
  68. add_links("avformat", "avcodec", "avutil", "swresample") -- FFmpeg
  69. end
  70. add_files(luatos.."luat/modules/luat_base.c"
  71. ,luatos.."luat/modules/luat_lib_fs.c"
  72. ,luatos.."luat/modules/luat_lib_rtos.c"
  73. ,luatos.."luat/modules/luat_lib_timer.c"
  74. ,luatos.."luat/modules/luat_lib_log.c"
  75. ,luatos.."luat/modules/luat_lib_zbuff.c"
  76. ,luatos.."luat/modules/luat_lib_pack.c"
  77. ,luatos.."luat/modules/luat_lib_crypto.c"
  78. ,luatos.."luat/modules/luat_lib_mcu.c"
  79. ,luatos.."luat/modules/luat_lib_bit64.c"
  80. ,luatos.."luat/modules/luat_lib_uart.c"
  81. ,luatos.."luat/modules/luat_lib_mqttcore.c"
  82. ,luatos.."luat/modules/luat_lib_libcoap.c"
  83. ,luatos.."luat/modules/luat_lib_rtc.c"
  84. ,luatos.."luat/modules/luat_lib_gpio.c"
  85. ,luatos.."luat/modules/luat_lib_spi.c"
  86. ,luatos.."luat/modules/luat_lib_i2c.c"
  87. ,luatos.."luat/modules/luat_lib_i2s.c"
  88. ,luatos.."luat/modules/luat_lib_wdt.c"
  89. ,luatos.."luat/modules/luat_lib_pm.c"
  90. ,luatos.."luat/modules/luat_lib_adc.c"
  91. ,luatos.."luat/modules/luat_lib_pwm.c"
  92. ,luatos.."luat/modules/luat_irq.c"
  93. ,luatos.."luat/modules/luat_lib_can.c"
  94. ,luatos.."luat/modules/luat_lib_otp.c"
  95. ,luatos.."luat/modules/luat_main.c"
  96. )
  97. add_files(luatos.."luat/vfs/*.c")
  98. -- remove_files(luatos .. "luat/vfs/luat_fs_lfs2.c")
  99. -- remove_files(luatos .. "luat/vfs/luat_fs_luadb.c")
  100. -- remove_files(luatos .. "luat/vfs/luat_fs_fatfs.c")
  101. remove_files(luatos .. "luat/vfs/luat_fs_onefile.c")
  102. -- lfs
  103. add_includedirs(luatos.."components/lfs")
  104. add_files(luatos.."components/lfs/*.c")
  105. -- add_files(luatos.."components/sfd/*.c")
  106. -- lua-cjson
  107. add_includedirs(luatos.."components/lua-cjson")
  108. add_files(luatos.."components/lua-cjson/*.c")
  109. -- cjson
  110. add_includedirs(luatos.."components/cjson")
  111. add_files(luatos.."components/cjson/*.c")
  112. -- fft core
  113. add_includedirs(luatos.."components/fft/inc", {public = true})
  114. add_files(luatos.."components/fft/src/*.c")
  115. add_files(luatos.."components/fft/binding/*.c")
  116. -- mbedtls
  117. add_files(luatos.."components/mbedtls3/library/*.c")
  118. add_includedirs(luatos.."components/mbedtls3/include")
  119. -- add_files(luatos.."components/mbedtls/library/*.c")
  120. -- add_includedirs(luatos.."components/mbedtls/include")
  121. -- iotauth
  122. add_includedirs(luatos.."components/iotauth")
  123. add_files(luatos.."components/iotauth/*.c")
  124. -- crypto
  125. add_files(luatos.."components/crypto/**.c")
  126. -- protobuf
  127. add_includedirs(luatos.."components/serialization/protobuf")
  128. add_files(luatos.."components/serialization/protobuf/*.c")
  129. -- libgnss
  130. add_includedirs(luatos.."components/minmea")
  131. add_files(luatos.."components/minmea/*.c")
  132. -- rsa
  133. add_files(luatos.."components/rsa/**.c")
  134. -- gmssl
  135. -- add_includedirs(luatos.."components/gmssl/include")
  136. -- add_files(luatos.."components/gmssl/src/**.c")
  137. add_files(luatos.."components/gmssl/bind/*.c")
  138. -- iconv
  139. add_includedirs(luatos.."components/iconv")
  140. add_files(luatos.."components/iconv/*.c")
  141. -- miniz
  142. add_files(luatos .. "components/miniz/*.c")
  143. add_includedirs(luatos .. "components/miniz")
  144. -- fskv
  145. add_includedirs(luatos.."components/fskv")
  146. add_files(luatos.."components/fskv/luat_lib_fskv.c")
  147. -- ymodem
  148. add_includedirs(luatos.."components/ymodem",{public = true})
  149. add_files(luatos.."components/ymodem/*.c")
  150. -- profiler
  151. add_includedirs(luatos.."components/mempool/profiler/include",{public = true})
  152. add_files(luatos.."components/mempool/profiler/**.c")
  153. -- fastlz
  154. add_includedirs(luatos.."components/fastlz",{public = true})
  155. add_files(luatos.."components/fastlz/*.c")
  156. -- c_common
  157. add_includedirs(luatos.."components/common",{public = true})
  158. add_files(luatos.."components/common/*.c")
  159. -- coremark
  160. add_includedirs(luatos.."components/coremark",{public = true})
  161. add_files(luatos.."components/coremark/*.c")
  162. -- sqlite3
  163. add_includedirs(luatos.."components/sqlite3/include",{public = true})
  164. add_files(luatos.."components/sqlite3/src/*.c")
  165. add_files(luatos.."components/sqlite3/binding/*.c")
  166. --mobile
  167. add_includedirs(luatos.."components/mobile")
  168. add_files(luatos.."components/mobile/*.c")
  169. --ffmpeg
  170. add_includedirs("ffmpeg_x86/include")
  171. add_includedirs("ffmpeg_x86")
  172. add_files("ffmpeg_x86/ffmpeg.c")
  173. -- multimedia
  174. add_includedirs(luatos.."components/multimedia",{public = true})
  175. add_files(luatos.."components/multimedia/luat_lib_multimedia_audio.c")
  176. add_files(luatos.."components/multimedia/luat_audio_tm8211.c")
  177. add_files(luatos.."components/multimedia/luat_audio_es8311.c")
  178. ----------------------------------------------------------------------
  179. -- 网络相关
  180. add_includedirs(luatos .. "components/common", {public = true})
  181. add_includedirs(luatos .. "components/network/adapter", {public = true})
  182. add_includedirs(luatos .. "components/ethernet/common", {public = true})
  183. add_files(luatos .. "components/network/adapter/*.c")
  184. -- 网络上层协议
  185. -- http_parser
  186. add_includedirs(luatos.."components/network/http_parser",{public = true})
  187. add_files(luatos.."components/network/http_parser/*.c")
  188. -- http
  189. add_includedirs(luatos.."components/network/libhttp",{public = true})
  190. add_files(luatos.."components/network/libhttp/*.c")
  191. -- libftp
  192. -- add_includedirs(luatos.."components/network/libftp",{public = true})
  193. -- add_files(luatos.."components/network/libftp/*.c")
  194. -- websocket
  195. add_includedirs(luatos.."components/network/websocket",{public = true})
  196. add_files(luatos.."components/network/websocket/*.c")
  197. -- sntp
  198. add_includedirs(luatos.."components/network/libsntp",{public = true})
  199. add_files(luatos.."components/network/libsntp/*.c")
  200. -- mqtt
  201. add_includedirs(luatos.."components/network/libemqtt",{public = true})
  202. add_files(luatos.."components/network/libemqtt/*.c")
  203. -- errdump
  204. add_includedirs(luatos.."components/network/errdump",{public = true})
  205. add_files(luatos.."components/network/errdump/*.c")
  206. -- ercoap
  207. add_includedirs(luatos.."components/network/ercoap/include",{public = true})
  208. add_files(luatos.."components/network/ercoap/src/*.c")
  209. add_files(luatos.."components/network/ercoap/binding/*.c")
  210. -- ws2812
  211. add_includedirs(luatos.."components/ws2812/include",{public = true})
  212. add_files(luatos.."components/ws2812/src/*.c")
  213. add_files(luatos.."components/ws2812/binding/*.c")
  214. -- onewire
  215. add_includedirs(luatos.."components/onewire/include",{public = true})
  216. -- add_files(luatos.."components/onewire/src/*.c")
  217. -- add_files(luatos.."components/onewire/binding/*.c")
  218. -- xxtea
  219. add_includedirs(luatos.."components/xxtea/include",{public = true})
  220. add_files(luatos.."components/xxtea/src/*.c")
  221. add_files(luatos.."components/xxtea/binding/*.c")
  222. -- fatfs
  223. add_includedirs(luatos.."components/fatfs")
  224. add_files(luatos.."components/fatfs/**.c")
  225. -- vtool
  226. add_includedirs(luatos.."components/multimedia/vtool/include")
  227. add_files(luatos.."components/multimedia/vtool/**.c")
  228. add_includedirs(luatos .. "components/hmeta")
  229. add_files(luatos .. "components/hmeta/**.c")
  230. if is_host("windows") then
  231. -- lwip & zlink
  232. local lwip_path = luatos .. "components/network/lwip22/"
  233. add_includedirs(lwip_path .. "include")
  234. add_files(lwip_path .. "/api/**.c")
  235. add_files(lwip_path .. "/core/**.c")
  236. add_files(lwip_path .. "/netif/**.c")
  237. add_files(lwip_path .. "/port/win32/*.c")
  238. add_defines("NO_SYS=0")
  239. add_includedirs(luatos .. "components/network/ulwip/include")
  240. add_files(luatos .. "components/network/ulwip/**.c")
  241. add_files(luatos .. "components/network/adapter_lwip2/*.c")
  242. add_includedirs(luatos .. "components/network/adapter_lwip2/")
  243. add_files(luatos .. "components/ethernet/common/*.c")
  244. else
  245. add_includedirs(luatos .. "components/network/lwip/include")
  246. add_includedirs("lwip/include")
  247. end
  248. if os.getenv("LUAT_USE_GUI") == "y" then
  249. add_files("ui/*.c")
  250. add_defines("U8G2_USE_LARGE_FONTS=1")
  251. -- sdl2
  252. add_includedirs(luatos.."components/ui/sdl2")
  253. add_files(luatos.."components/ui/sdl2/*.c")
  254. -- u8g2
  255. add_includedirs(luatos.."components/u8g2")
  256. add_files(luatos.."components/u8g2/*.c")
  257. -- lcd
  258. add_includedirs(luatos.."components/lcd")
  259. add_files(luatos.."components/lcd/*.c")
  260. -- LVGL 版本选择
  261. if os.getenv("LUAT_USE_LVGL9") == "y" then
  262. -- LVGL 9.4 + EasyLVGL - 最基础组件编译
  263. -- LVGL 9 源码路径(支持 #include "lvgl9/lvgl.h" 格式)
  264. add_includedirs(luatos.."components/easylvgl")
  265. add_includedirs(luatos.."components/easylvgl/lvgl9")
  266. add_includedirs(luatos.."components/easylvgl/lvgl9/src")
  267. -- 先添加所有源文件
  268. add_files(luatos.."components/easylvgl/lvgl9/src/**.c")
  269. -- 排除不需要的组件(按优先级排序)
  270. -- 1. 硬件驱动(PC 模拟器不需要)
  271. remove_files(luatos.."components/easylvgl/lvgl9/src/drivers/**/*.c")
  272. remove_files(luatos.."components/easylvgl/lvgl9/src/drivers/**/*.cpp")
  273. -- 2. 硬件加速绘制引擎(只保留软件渲染 SW)
  274. remove_files(luatos.."components/easylvgl/lvgl9/src/draw/dma2d/**/*.c")
  275. remove_files(luatos.."components/easylvgl/lvgl9/src/draw/eve/**/*.c")
  276. remove_files(luatos.."components/easylvgl/lvgl9/src/draw/nema_gfx/**/*.c")
  277. remove_files(luatos.."components/easylvgl/lvgl9/src/draw/nxp/**/*.c")
  278. remove_files(luatos.."components/easylvgl/lvgl9/src/draw/opengles/**/*.c")
  279. remove_files(luatos.."components/easylvgl/lvgl9/src/draw/renesas/**/*.c")
  280. remove_files(luatos.."components/easylvgl/lvgl9/src/draw/vg_lite/**/*.c")
  281. remove_files(luatos.."components/easylvgl/lvgl9/src/draw/sdl/**/*.c")
  282. remove_files(luatos.."components/easylvgl/lvgl9/src/draw/espressif/**/*.c")
  283. remove_files(luatos.."components/easylvgl/lvgl9/src/draw/convert/**/*.c")
  284. -- 3. 库:排除所有,然后重新添加 bin_decoder(核心依赖)
  285. -- remove_files(luatos.."components/easylvgl/lvgl9/src/libs/**/*.c")
  286. -- remove_files(luatos.."components/easylvgl/lvgl9/src/libs/**/*.cpp")
  287. -- add_files(luatos.."components/easylvgl/lvgl9/src/libs/bin_decoder/*.c")
  288. -- 4. 其他功能模块(sysmon, translation, xml 等)
  289. -- remove_files(luatos.."components/easylvgl/lvgl9/src/others/**/*.c")
  290. -- remove_files(luatos.."components/easylvgl/lvgl9/src/others/**/*.cpp")
  291. -- 5. 操作系统抽象层(如果使用 LV_OS_NONE)
  292. -- remove_files(luatos.."components/easylvgl/lvgl9/src/osal/**/*.c")
  293. -- 6. 控件:先全部包含,确保编译通过
  294. -- 所有控件都会被编译(没有被排除)
  295. -- 7. 保留主题编译(主题需要控件的类定义)
  296. -- 主题文件会自动编译(没有被排除)
  297. -- EasyLVGL 重构架构配置
  298. -- 1. 公共头文件
  299. add_includedirs(luatos.."components/easylvgl/inc")
  300. -- 2. 包含 src 目录下的所有文件(递归)
  301. add_includedirs(luatos.."components/easylvgl/src")
  302. add_files(luatos.."components/easylvgl/src/**/*.c")
  303. -- 3. Lua 绑定层(binding,不在 src 目录下,需单独处理)
  304. add_includedirs(luatos.."components/easylvgl/binding")
  305. add_files(luatos.."components/easylvgl/binding/*.c")
  306. -- 4. 宏定义:启用 EasyLVGL 和 SDL2 平台
  307. add_defines("LUAT_USE_EASYLVGL=1")
  308. add_defines("LUAT_USE_EASYLVGL_SDL2=1")
  309. else
  310. -- LVGL 7.13 (原有配置)
  311. add_includedirs(luatos.."components/lvgl")
  312. add_includedirs(luatos.."components/lvgl/binding")
  313. add_includedirs(luatos.."components/lvgl/gen")
  314. add_includedirs(luatos.."components/lvgl/src")
  315. add_includedirs(luatos.."components/lvgl/font")
  316. add_includedirs(luatos.."components/lvgl/src/lv_font")
  317. add_includedirs(luatos.."components/lvgl/sdl2")
  318. add_files(luatos.."components/lvgl/**.c")
  319. -- 默认不编译lv的demos, 节省大量的编译时间
  320. remove_files(luatos.."components/lvgl/lv_demos/**.c")
  321. -- tjpgd
  322. add_includedirs(luatos.."components/tjpgd")
  323. add_files(luatos.."components/tjpgd/*.c")
  324. end
  325. -- qrcode 和 tjpgd
  326. add_includedirs(luatos.."components/qrcode")
  327. add_files(luatos.."components/qrcode/*.c")
  328. add_includedirs(luatos.."components/luatfonts")
  329. add_files(luatos.."components/luatfonts/**.c")
  330. -- gtfont PC simulator core
  331. add_includedirs(luatos.."components/gtfont")
  332. add_includedirs(luatos.."components/eink")
  333. add_files(luatos.."components/gtfont/*.c")
  334. -- hzfont component
  335. add_includedirs(luatos.."components/hzfont/inc")
  336. add_files(luatos.."components/hzfont/src/*.c")
  337. add_files(luatos.."components/hzfont/binding/*.c")
  338. -- pinyin component
  339. add_includedirs(luatos.."components/pinyin/inc")
  340. add_files(luatos.."components/pinyin/src/*.c")
  341. add_files(luatos.."components/pinyin/binding/*.c")
  342. -- airui
  343. -- add_includedirs(luatos_exts.."/airui/include")
  344. -- add_files(luatos_exts.."/airui/**.c")
  345. -- tp (touch) core only; exclude hardware drivers on PC
  346. add_includedirs(luatos.."components/tp")
  347. add_files(luatos.."components/tp/luat_lib_tp.c")
  348. add_files(luatos.."components/tp/luat_tp.c")
  349. end
  350. target_end()