Building TPT with Meson/zh

From The Powder Toy
Jump to: navigation, search
Language: English  • 한국어 • 中文

本文将指导你编译The Powder Toy. 如果你有任何疑问,请在TPT论坛中的开发协助板块提问。

编辑注记:请勿在未经咨询TPT开发者的情况下修改本指南。否则你的修改有可能在没有事先通知的情况下被无情地退回。 译者注记:该部分翻译未经验证,如有问题请遵照英文原版。

Windows

在Windows 10上测试。

环境搭建

  • 安装Git (下载链接)
    • 安装时不要改动选项
  • 安装Python 下载链接)
    • 建议允许安装程序将Python添加到PATH中,并禁用路径长度限制(该选项在安装过程结束时出现)
  • 打开一个管理员命令提示符(在开始菜单中搜索 "cmd",右击它,点击 "以管理员身份运行")并执行以下命令
python -m pip install --upgrade pip
pip install --upgrade meson ninja
  • 安装Visual Studio (下载链接)
    • 选择桌面开发的安装组件
    • 你只需要 "MSVC "和 "Windows 10 SDK",所以你可以在右边的列表中取消勾选其他选项
  • 在开始菜单中找到 "x64 Native Tools Command Prompt for VS"(或类似的应用,以下简称 "VS提示符")并执行以下命令
    • 建议将生成的窗口固定到你的任务栏上;你将经常使用它来构建TPT
cd /d [你保存源码仓库的路径]
git clone https://github.com/The-Powder-Toy/The-Powder-Toy

第一次构建

  • 打开VS提示符(见上文)并执行以下命令
cd /d [你保存源码仓库的路径]
cd The-Powder-Toy
meson build-debug
cd build-debug
ninja
  • 你可能会在所有这些过程中看到一些警告,但应该没有错误(如果你在任何阶段看到警告,不要跳过它;而是记录下来,在论坛向我们询问)
    • 如果你不确定是否成功,再次运行ninja;如果显示 "no work to do",说明一切正常。
  • 现在,可以从提示符下运行TPT
powder.exe

使用Visual Studio IDE

上面的方法不能让你使用Visual Studio的 "Visual "部分,即IDE。尽管Meson对这种使用情况的支持有限,但如果由于某种原因你希望使用IDE,你可以要求Meson生成一个使用Visual Studio而不是Ninja的构建项目。

  • 打开VS提示符(见上文),执行以下命令
cd /d [你保存源码仓库的路径]
cd The-Powder-Toy
meson --backend=vs -Dbackend_startup_project=powder build-debug-vs
  • 在这之后,你不再需要使用VS提示符。

这将生成一个包含Visual Studio解决方案的构建项目(the-powder-toy.sln)。你可以像其他解决方案一样使用它,但有几个关键的区别。

  • 集成开发环境只能用于更舒适的编辑和调试,而不能用于其他方面,包括改变项目结构;你必须熟悉Meson并使用meson.build文件才能做到这一点。
  • 一旦你真正改变了meson.build文件,Meson就会在你下次试图构建它时自动重新生成解决方案;Visual Studio会给你一个关于解决方案被改变的可怕的弹出窗口,这是很正常的,只要点击 "重新加载解决方案 "即可。
  • 你目前看到的配置(很可能是debug|x64,如果你完全按照这个指南来做的话)是解决方案的唯一配置,不建议添加其他配置,因为Meson在下次重新生成解决方案时只会覆盖它们;相反,你必须用Meson生成单独的构建项目。

MacOS

在MacOS 10.15和11.5上测试。

环境搭建

在下一步,会使用xcode-select;注意,你不需要安装Xcode来运行该命令

  • 在终端中,执行以下命令
xcode-select --install # 征求你的确认,安装编译器
sudo -H python -m pip install --upgrade pip # 如果你得到 "没有名为pip的模块",尝试python3
sudo -H pip install --upgrade meson ninja
brew install pkg-config luajit fftw sdl2
cd [你保存代码仓库的路径]
git clone https://github.com/The-Powder-Toy/The-Powder-Toy

第一次构建

  • cd到版本库根目录并执行以下命令
meson build-debug
cd build-debug
ninja
  • 在整个过程中,你可能会看到一些警告,但应该没有错误(如果你在任何阶段看到,不要试图跳过它;而是记录下来,在论坛上向我们询问 。
    • 如果你不确定,再次运行Ninja;如果它说 "no work to do",说明一切正常。
  • 现在,可以从提示符中运行TPT
./powder

Linux

在Ubuntu 20.04和Raspbian 10上测试。

所需的环境设置

  • 确保你的软件包列表是最新的(命令,sudo apt update)。
  • 安装git (命令,sudo apt install git)
  • 安装python(命令,sudo apt install python3)。
  • 安装pip,如果不存在的话(参考他们的教程)。
  • 升级pip (命令:sudo -H python3 -m pip install --upgrade pip)
  • 安装MesonNinja,如果不存在的话(命令,sudo -H pip install --upgrade meson ninja)。
  • 可以选择安装ccache(命令,sudo apt install ccache)。
  • 安装一个库工具(命令,sudo apt install pkg-config)
  • 安装所需的库(命令:sudo apt install libluajit-5.1-dev libcurl4-openssl-dev libfftw3-dev zlib1g-dev libsdl2-dev)
    • 你的软件包管理器可能会用完全不同的名字打包这些东西
  • 下载源代码(命令,git clone https://github.com/The-Powder-Toy/The-Powder-Toy)。

初次构建

  • cd到版本库根目录并执行以下命令
meson build-debug
cd build-debug
ninja
  • 在整个过程中,你可能会看到一些警告,但应该没有错误(如果你在任何阶段看到,不要试图跳过它;而是记录下来并在论坛上向我们询问
    • 如果你不确定,再次运行Ninja;如果它说 "no work to do",说明一切正常。
  • 现在,从提示符中运行TPT应该是可行的
./powder

接下来的步骤(所有平台)

更新二进制文件

现在你已经成功地第一次构建了TPT,你可能会想改变代码中的一些东西。要更新二进制文件,请通过执行以下命令再次构建它

ninja

在你上次执行的相同提示下再次构建。每当你改变一些东西,并希望二进制文件反映这些改变时,你都必须这样做。

构建release版

到目前为止,你一直在构建 "调试 "二进制文件。这些二进制文件比 "发布 "版本的调试要容易得多,但它们的性能也较差。你可以建立一个 "release"版本二进制文件,它的性能要好得多,但很难调试。只有当你确定你没有更多的bug需要处理时才使用这些构建。如果以后确实出现了一个bug,再去构建debug二进制文件。

要构建release版二进制文件,请在提示符中导航回到版本库的根目录,用Meson创建一个新的构建站点,然后再次用Ninja构建

cd /d [你存放软件库的地方]
cd The-Powder-Toy
meson -Dbuildtype=release build-release
cd build-release
ninja

注意,build-debug和build-release目录是独立的 "构建项目",当你把它们设置为你的当前目录时(通过使用cd,见上面的命令列表),你可以用Ninja更新它们。

构建static版

上面的debug和release配置都会产生 "动态 "二进制文件,这意味着它们依赖于你系统的某些组件(你用apt在linux上安装的库或用brew在macos上安装的库)或powder.exe以外的文件(在windows上与powder.exe在同一目录的DLLs)。如果你是一个MOD作者,请确保你不发送这样的二进制文件,因为你的用户已经习惯了TPT不依赖任何东西,因此不太可能有自己安装这些库的经验。

你可以通过建立一个 "static"(静态)二进制文件来摆脱这些依赖性。这样,二进制文件将依赖于你系统中很可能存在的非常基本的组件。它也会增加几兆字节,并且链接它需要更长的时间,这就是为什么你只有在即将向公众发布时才会这样做。

要构建静态二进制文件,请在提示符中导航到版本库的根目录,用Meson创建一个新的构建站点(见下面的注释!),然后再次用Ninja构建

meson -Dbuildtype=release -Dstatic=prebuilt build-release-static
cd build-release-static
ninja

注意:在Windows上,你还需要在上面的Meson调用中添加-Db_vscrt=static_from_buildtype选项,否则生成的二进制文件将与MSVC运行时(vcruntime.dll和类似的)动态链接。

meson -Dbuildtype=release -Dstatic=prebuilt -Db_vscrt=static_from_buildtype build-release-static
cd build-release-static
ninja

曾经有用的方法

每个平台都有自己的一套怪癖,需要加以解决(主要是看你,微软和苹果)。幸运的是,我们的构建系统已经解决了其中的大部分问题。不幸的是,这些解决方法是以升级构建系统的形式出现的,而这些系统并不是自动安装的,即使是自动安装,受影响的构建站点也可能需要手动重新配置。如果你曾在某个时候让TPT成功构建,但从那时起,你的构建站点不知怎么就坏了,你可以尝试以下方法来修复它们。

修复单个构建站点的最直接的方法是重新配置它。要检查这个方法是否有效,请尝试运行Ninja。

cd /d [你存放软件库的地方]
cd The-Powder-Toy
meson --reconfigure --wipe build-debug # 或者你给你的构建站点起的任何名字
ninja

你必须对每一个被破坏的构建站点进行这样的操作。

如果这没有帮助,你可以升级pip、Meson和Ninja。就像第一次设置它们时一样,在linux和macos上添加sudo -H,在windows上在高位命令提示符下运行这个。

python -m pip install --upgrade pip # 如果你得到 "没有名为pip的模块",试试python3
pip install --upgrade meson ninja

一旦你完成了这些,重新配置你的构建站点(见上文)。

如果这都没有帮助,那就是你从头开始的提示,就像你第一次构建TPT一样,按照指南进行,只不过你已经有了版本库,所以你不需要再克隆了。事实上,这是你对TPT所做修改的地方,所以你不应该删除它。'删除你的本地克隆版本库永远不会解决任何问题,它只会导致代码的丢失。甚至不要考虑这样做。

作为最后的手段,你可以在论坛上问我们 。

构建选项

构建选项在你建立一个构建站点时被传递给Meson(见上面的例子),或者在以后的任何时候,当这个构建站点已经被使用时被传递。在这两种情况下,它们都是以-D[name]=[value]的形式作为命令行参数传递。例如,要建立一个用Lua 5.1而不是LuaJIT编译TPT的构建站点,你可以发出以下命令

meson -Dlua=lua5.1 build-debug-lua5.1

但你也可以使用一个现有的构建站点,并改变相关的构建选项来做同样的事情

cd build-debug
meson configure -Dlua=lua5.1

下次你运行Ninja时,由于这个改变而需要重建的东西都会被重建。关于配置构建站点的更多信息,请参见the Meson quick guide

下面是我们的Meson设置支持的构建选项列表

Name Type Description
static one of 'none', 'system', 'prebuilt' Build statically using libraries present on the system ('system') or using prebuilt libraries official builds use ('prebuilt')
beta boolean Beta build
ignore_updates boolean Don't show notifications about available updates
install_check boolean Do install check on startup
http boolean Enable HTTP via libcurl
gravfft boolean Enable FFT gravity via libfftw3
snapshot boolean Snapshot build
snapshot_id integer Snapshot ID, only relevant if 'snapshot' is true
mod_id integer Mod ID, used on the Starcatcher build server; the build server will compile for all platforms for you and send updates in-game, see jacob1 to get a mod ID
lua one of 'none', 'lua5.1', 'lua5.2', 'luajit' Lua library to use
ssl currently only 'openssl' SSL library to use
x86_sse one of 'none', 'sse', 'sse2', 'sse3', 'auto' Enable SSE (available only on x86)
native boolean Build with optimizations specific to the local machine, may not run on other machines, overrides 'x86_sse'
ogli boolean Enable OpenGL interface rendering (currently defunct)
oglr boolean Enable OpenGL particle rendering (currently defunct)
build_powder boolean Build the game
build_render boolean Build the thumbnail renderer
build_font boolean Build the font editor
server string Simulation server
static_server string Static simulation server
update_server string Update server, only used by snapshots and mods, see 'snapshot_id' and 'mod_id'
workaround_gcc_no_pie boolean Pass -no-pie to gcc manually to work around meson's -Db_pie=false doing nothing