Xmake v3.0.6 宣布,原生 Android 应用、Flang、CUDA 13、Qt 打包

新特性介绍 Android 原生应用构建支持 新版本对 Android 原生应用的构建支持进行了进一步改进。我们现在可以在 android.native_app 规则中配置更多参数,包括 android_sdk_version, android_manifest, android_r...

应用介绍

新特点介绍

Android 原生应用构建支撑

新版本对 Android 原生应用的构建支撑进行了进一步改进。我们如今可以在 android.native_app 规矩中设备更多参数,包含 android_sdk_version, android_manifest, android_res, keystore 等。

此外,对于须要自定义进口和事宜轮回的场景(例如游戏引擎集成),我们支撑经由过程设置 native_app_glue = false 来禁用默认的 android_native_app_glue 库。

add_rules("mode.debug", "mode.release")add_requires("raylib 5.5.0")target("raydemo_custom_glue")    set_kind("binary")    set_languages("c++17")    add_files("src/main.cpp", "src/android_native_app_glue.c")    add_syslinks("log")    add_packages("raylib")    add_rules("android.native_app", {        android_sdk_version = "35",        android_manifest = "android/AndroidManifest.xml",        android_res = "android/res",        keystore = "android/debug.jks",        keystore_pass = "123456",        package_name = "com.raylib.custom_glue",        native_app_glue = false, -- 禁用默认 glue        logcat_filters = {"raydemo_custom_glue", "raylib"}    })

bin2obj 规矩

根本用法

新增的 utils.bin2obj 规矩比拟 utils.bin2c 具有极快的构建速度。因为它跳过了 C 代码生成和编译步调,直接生成对象文件(COFF, ELF, Mach-O)介入链接。

机能比较 (120MB 文件):

  • bin2obj: ~1.8s
  • bin2c: ~354s

XPack 打包模块如今支撑生成 Qt 安排包,以及 Linux 下的 AppImage 和 macOS 下的 dmg 格局。这使得分发跨平台 GUI 应用变得加倍简单。

它支撑多种架构(x86, ARM, RISC-V 等)和格局(Windows COFF, Linux/Android ELF, macOS/iOS Mach-O)。

在 C/C++ 中拜访数据

符号名称会根据文件名主动生成(例如 _binary__start  _binary__end)。

这使得编译器仅进行语法分析,不生成目标文件,也不进行链接操作,从而极大年夜地晋升了检测速度。

#include #include extern const uint8_t _binary_data_bin_start[];extern const uint8_t _binary_data_bin_end[];int main() {    // 计算大年夜小    const uint32_t size = (uint32_t)(_binary_data_bin_end - _binary_data_bin_start);        // 拜访数据    printf("Data size: %u bytes\n", size);    for (uint32_t i = 0; i < size; i++) {        printf("x ", _binary_data_bin_start[i]);    }    return 0;}

此外,glsl2spv  hlsl2spv 规矩也新增了对 bin2obj 的支撑,可以直接将编译后的 SPIR-V 文件作为对象文件嵌入。

target("test")    set_kind("binary")    add_rules("utils.glsl2spv", {bin2obj = true})    add_files("src/*.c")    add_files("src/*.vert", "src/*.frag")

Flang 对象链支撑

Xmake 如今支撑 LLVM Flang 编译器,可以更便利地构建 Fortran 项目。平日情况下,Xmake 会主动检测并应用体系中可用的 Flang 编译器。

你也可以手动指定应用 Flang 对象链:

$ xmake f --toolchain=flang$ xmake

或者在 xmake.lua 中设备:

add_rules("mode.debug", "mode.release")target("test")    set_kind("binary")    add_files("src/*.f90")

Qt Pack 与 AppImage/dmg 打包

例如,设备一个 Qt Widget 应用的打包:

includes("@builtin/xpack")target("qtapp")    add_rules("qt.widgetapp")    add_files("src/*.cpp")     -- ... 其他设备xpack("qtapp")    set_formats("nsis", "dmg", "appimage", "zip")    set_title("Qt Widget App")    add_targets("qtapp")        -- 根据格局设置图标   >(function (package)        local scriptdir = os.scriptdir()        if package:format() == "appimage" then            package:set("iconfile", path.join(scriptdir, "src/assets/xmake.png"))        else            package:set("iconfile", path.join(scriptdir, "src/assets/xmake.ico"))        end    end)

履行打包敕令:

$ xmake pack

快速语法检查

新增 xmake check syntax 敕令,用于快速检测工程源代码的语法缺点。

这平日用于在 CI 流程中,快速检测代码的语法合法性,而不须要进行完全的编译链接过程,是以速度异常快。

它的内部道理是:xmake 会向编译器传递 -fsyntax-only (GCC/Clang) 或 /Zs (MSVC) 等语法检测标记。

$ xmake check syntax

假如有语法缺点,它会申报具体的文件和行号。

MSVC C++ 动态调试

target("myapp")    set_kind("binary")    add_rules("utils.bin2obj", {extensions = {".bin", ".ico"}})    add_files("src/*.c")    -- 嵌入 data.bin,并确保以零结尾    add_files("assets/data.bin", {zeroend = true})

我们新增了对 MSVC 的 C++ 动态调试支撑(须要 MSVC 对象集 14.44+,仅支撑 x64)。

它与 LTCG/PGO/OPT-ICF 不兼容。

set_policy("build.c++.dynamic_debugging", true)

二进制对象库

我们新增了 core.base.binutils 模块以及 utils.binary 扩大模块,用于处理二进制文件。

它们供给了 bin2c, bin2obj, readsyms, deplibs, extractlib 等功能接口,可用于从二进制文件生成代码、读取符号、获取依附库以及解压静态库等。

import("utils.binary.deplibs")import("utils.binary.readsyms")import("utils.binary.extractlib")-- 获取依附库local deps = deplibs("/path/to/bin")-- 读取符号local syms = readsyms("/path/to/obj")-- 解压静态库extractlib("/path/to/lib.a", "/path/to/outputdir")

此外,我们还改进了依附库解析,静态库归并用到的对象文件抽取,以及符号导出功能。

CLion 插件更新

比来我们对 CLion 的 xmake-idea 插件做了大年夜量的改进。

尤其是增长了对 lldb/gdb-dap 的调试支撑,如今我们不再须要经由过程生成 CMakeLists.txt 去变相支撑调试了,而是直接支撑调试 xmake 项目。

别的,我们还修复了运行前没有主动保存的问题,以及 Run Configuration 设备面板的一些 bug。

并且,我们还增长了主动更新 compile_commands.json 的支撑,以改进 C++ 代码的主动补全和高亮体验。


更新日记

新特点

  • #7141:支撑在 Android 禁用 native app glue
  • #7139:新增 Android 原生应用构建支撑
  • #7127:binutils 新增 deplibs 支撑
  • #7120:binutils 新增 extractlib 支撑
  • #7106:MSVC 新增 /std:c++23preview 支撑
  • #7105:为 glsl/hlsl2spv 新增 bin2obj 支撑
  • #7103:新增 bin2obj 规矩(快于 bin2c
  • #7096:新增 Flang 对象链支撑
  • #7094:新增 xmake check syntax 支撑
  • #7091:MSVC 新增动态调试支撑
  • #7083:新增对 CUDA 11~13 的支撑
  • #7071:新增 Qt pack 支撑
  • #7064:新增 Linux 应用打包的 AppImage xpack 格局
  • #7062:新增 macOS 应用打包的 dmg xpack 格局

改进

  • #7149:改进 binutils 以优化 rpath 解析
  • #7148:更新 Zig 示例
  • #7145:改进 Clang/LLVM 运行时支撑
  • #7136:改进 clang-cl 依附文件生成
  • #7135:xrepo env 增长 session ID
  • #7155:重构 clang-cl 的 Windows ASan 支撑(运行时链接,链接器标记,PATH/CMAKE_LINKER_TYPE 设置,对象链简化)
  • #7109:binutils 支撑从二进制文件读取符号
  • #7102:改进 bin2c 规矩
  • #7098:重构并改进 Golang 支撑
  • #7095:将 target/package/toolchain:memcache 标记为 public
  • #7093:改进 mirror 仓库 URL
  • #7088:改进 C++/ObjC 规矩
  • #7087:为策略 package.download.http_headers 添加类型束缚
  • #7069:保存 LLVM 对象链的 Qt 规矩
  • #7061:更新 CI 设备
  • #7039:更新 macOS CI

Bug 修复

  • #7132:修复启用 ASan 时的 clang-cl 对象链问题
  • #7125:修复 cosmocc CI
  • #7124:修复 Clang 对象链的默认 MSVC 运行库
  • #7112:修复 Windows 上的目次切换
  • #7104:修复项目生成器的预备阶段问题
  • #7092:修复 Solaris 构建
  • #7086:修复 Qt QML 规矩中的 targetdir 设置
  • #7085:修复针对 Clang 对象链的 CMake 标记
  • #7084:修复 pacman 的 find_package
  • #7082:修复 Clang CUDA 标记检查
  • #7081:修复 get_headerunit_key
  • #7074:修复 libc++ 无法找到 std 模块问题
  • #7067:修复跨对象链的 get_stdmodules

点赞(0) 打赏

立即下载

相关下载

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部