Skip to content
mercury233 edited this page Apr 3, 2022 · 1 revision

注意:实验性,HELP WANTED

笔者无意深究macOS的具体开发流程,所以只是粗略的跑通了编译步骤


准备工作

下载

  • YGOPro发行版

    用以获取卡片数据库和卡图和app,其中数据库和app是必备的

  • git

    并且拥有github账号和SSH的key

  • homebrew

  • Xcode

  • premake5

    项目有两种描述文件premake和cmake,但cmake近期无人维护

  • irrKlang

    下载64位版,可在premake5.lua中修改USE_IRRKLANG来禁用,结果就是没有声音

依赖库

通过brew安装:

  • freetype
  • libevent
  • libx11
  • sqlite
  • zlib
  • gpatch

以下两个依赖库需要手工下载源代码并静态编译

  • Irrlicht-1.8.5

    只有这个版本被测试过,而且需要打中文支持的补丁才能用

  • Lua-5.4

    不支持5.2及更早的版本,需要C++编译而不是默认的C编译,所以在此静态编译

下载代码库

使用git clone即可,clone时加--recursive来同时克隆子模块,或者完成后运行git submodule update --init

clone完成后需要分别进入ocgcorescript两个子模块文件夹checkout到master分支

具体命令:

git clone git@github.com:Fluorohydride/ygopro.git
cd ygopro
git submodule update --init
cd ocgcore/
git checkout master 
cd ..
cd script/
git checkout master 
cd ..

安装依赖库

  • 将下载的irrlicht解压到项目文件夹,重命名为irrlicht

  • 将下载的irrKlang解压到项目文件夹,重命名为irrklang注意k是小写

  • 将下载的lua解压到项目文件夹,重命名为lua

  • 将premake文件夹内irrlichtlua文件夹复制到项目文件夹,其中包含了各个依赖库的premake描述文件,可以自行修改完善

cp -r ./premake/irrlicht .
cp -r ./premake/lua .

把irrKlang的dylib安装到系统

cp ./irrklang/bin/macosx-gcc/libirrklang.dylib /usr/local/lib/

为irrlicht打中文补丁

原版irrlicht不支持中文,需要打补丁,进入irrlicht文件夹运行

patch -p1 < irrlicht.patch

也可以直接使用修改好的版本

编译irrlicht,安装到系统

cd irrlicht
cp -r include /usr/local/include/irrlicht
cd source/Irrlicht/MacOSX
xcodebuild -project MacOSX.xcodeproj
cp build/Release/libIrrlicht.a /usr/local/lib/
cd ../../../..

生成项目文件并编译

解压premake5程序放到项目文件夹,然后运行

./premake5 gmake --cc=clang

就可以进入build文件夹并make

此时目录结构省略多余文件后应该看起来是这样:

├── bin
├── build
├── cmake
├── gframe
├── irrklang
│   └── include
├── irrlicht
│   └── include
├── lua
│   └── src
├── obj
├── ocgcore
├── premake
├── script
├── sound
└── textures

调试运行

从发行版里把cards.cdbpics文件夹和deck文件夹和replay文件夹ln到项目根目录

复制一个从其他地方下载的ygopro.app到项目根目录,把我们编译的主程序替换进去

cp ./bin/release/ygopro.app ./ygopro.app/Contents/MacOS/ygopro

然后可以双击ygopro.app的图标运行,或者 ./ygopro.app/Contents/MacOS/ygopro运行

(TODO:生成个正常的包,像macOS上其他软件一样把静态文件都放到.app里面而不是外面)