XBuild: 一个跨平台跨语言的构建系统

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tomicyo/article/details/80625828

背景

现代的游戏引擎都支持多平台,既然要支持多平台的话,自定义的构建系统在引擎工具链上就必不可少了。比如Unity需要同时支持C#,C++语言的编译,由此引入了Jamplus以及后来自己基于Jam和C#改造的UnityBuildSystem构建系统,Unreal则基于自己的需求(UHT生成)开发了UBTCryEngine则是基于CMake修改了一套构建系统。

游戏引擎涉及的编程语言也会比较多,一般会用C++/C/ObjC/ObjC++写核心代码,其他语言写工具链和框架。

Kaleido3D 是一个笔者业余时间写的跨平台的3D图形库,由于要同时支持Android、iOS平台,开发过程中不停的电脑切换容易打断工作,影响开发效率,所以突发奇想想到了在Windows上开发iOS程序,那也需要在Windows上构建iOS代码,因此开了个新坑:XBuild


现状

现有跨平台构建工具主要有:

  • CMake (市场份额最大)
  • Premake
  • GN (Chrome浏览器)
  • GYP (Chrome浏览器)

如何在Windows上开发iOS程序?

iOS程序的构建主要基于Clang-LLVM体系,由于这套CFamily的工具链开源,因此网友开发了iOS Build Environment套件用于在Windows系统构建iOS应用(虽然违反了苹果的规定)。

说到开发,少不了一个好用的IDE用于代码编辑。这里考虑使用VSCode用于Windows下ObjC的代码编辑,VSCode支持微软开发的Language Server Protocol提供的代码提示补全高亮的协议,而相应的LLVM下也正在实现基于LSP的ClangD用于跨平台跨编辑器的代码编辑。


XBuild的需求

笔者曾有幸参与UE4的引擎优化开发,在开发过程中尝尽了漫长的编译时间等待以及资源打包带来的痛苦,为此如何提高引擎/游戏开发和迭代效率成为了XBuild的目标。

  • 支持分布式虚拟进程,类似Incredibuild
  • iOS、Android同主机平台构建
  • Visual Studio & Visual Studio Code & XCode 项目文件支持
  • 支持Rust、C++/C/ObjC/ObjC++、C#、Java、HLSL/DXIL、Metal、SPIRV编译

经过几个月的开发,Xbuild套件有了雏形,其中借鉴了Google家的Ninja以及GN的特性,在此基础上简化了不少功能,形成了现在的语法。

构建前端 XBGN (GN, Xbuild Version)

solution("IBLToolchain") {
    cproj("RuntimeIBL") {
        type = "shared_lib"
        srcs = [
            "src/**.h",
            "src/**.cpp",
            "src/**.c"
        ]
        srcs = list_files(srcs)
        inc_dirs = ["src"]
        defines = ["GLEW_BUILD=1", "BUILD_LIB=1"]
        link_libs = ["opengl32.lib"]
        on_prebuild = () {
            srcs += file_to_bytes(["src/cubemap_filter.vs","src/cubemap_filter.fs"])
        }
        dest_dir = "../UnityProject/Assets/Plugins/X86"
    }
    cproj("test") {
        type = "executable"
        srcs = ["tests/test.cpp"]
        inc_dirs = [ "src" ]
        link_targets = [ "RuntimeIBL" ]
    }
}

这是简单的一个示例工程脚本,相比GN的语法描述更清晰和简洁,XBGN同样提供不少内置函数。

他相比于GN以及其他工具对跨平台开发的支持更方便和完善。
右键

生成VS工程目录
Solution

Android Native 代码开发
这里写图片描述

猜你喜欢

转载自blog.csdn.net/tomicyo/article/details/80625828
今日推荐