Difference between revisions of "How to build VCMI (macOS)"

From VCMI Project Wiki
Jump to: navigation, search
(Replaced content with "{{Template:MovedToWebpage|https://vcmi.eu/developers/Building_macOS/}}")
 
(7 intermediate revisions by one other user not shown)
Line 1: Line 1:
= Installing dependencies =
+
{{Template:MovedToWebpage|https://vcmi.eu/developers/Building_macOS/}}
===== Installing Xcode =====
 
App Store -> Xcode
 
Launch it after the installation to agree with it's license terms.
 
 
 
Alternatively Xcode can be downloaded from Apple Developers website.
 
Registration is easier and every possible version is available: https://developer.apple.com/download/more/
 
 
 
===== Setting Xcode version Xcode =====
 
In case you have some weird CMake errors during generation attempts such as
 
<pre>
 
CMake Error: Xcode 1.5 not supported.
 
</pre>
 
You might need to specify installed version of Xcode:
 
<pre>
 
sudo /usr/bin/xcode-select --switch /Users/admin/Downloads/Xcode.app
 
</pre>
 
After that Cmake will be able to generate projects properly!
 
 
 
===== Installing [https://brew.sh/ Homebrew] =====
 
<pre>
 
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
 
</pre>
 
 
 
===== Installing dependencies using Homebrew =====
 
<pre>
 
brew install git cmake
 
</pre>
 
 
 
= Building VCMI in command line with Makefiles =
 
===== Getting and configuring VCMI =====
 
<pre>
 
# You can choose any directory
 
mkdir ~/DEV && cd ~/DEV
 
# Clone VCMI with all submodules
 
git clone --recursive  https://github.com/vcmi/vcmi.git
 
# Installing dependencies
 
sh ./vcmi/CI/mac/before_install.sh
 
# You might need to add QT to your PATH. Currently it can be done like that (see the end of before_install.sh, it does the same for CI)
 
# echo 'export PATH="/usr/local/opt/qt5:$PATH"' >> ~/.bash_profile
 
# Creating directory for building
 
mkdir cmake && cd cmake
 
cmake ../vcmi -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -Wno-devc
 
</pre>
 
You can as well build VCMI without Qt5 or launcher by disabling it:
 
<pre>
 
# But please don't do that unless you know what you're doing
 
cmake ../vcmi -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DENABLE_LAUNCHER=0 -Wno-devc
 
</pre>
 
 
 
===== Building and packaging VCMI =====
 
<pre>
 
cd ~/DEV/cmake
 
# Start build using cmake
 
cmake --build . -- -j 4
 
# Or you can as well use simple
 
# make -j 4
 
 
 
# When build is completed you can trigger packaging into DMG
 
cpack
 
# After file named such as "vcmi-0.99.dmg" will be created
 
</pre>
 
 
 
= Building VCMI with Xcode =
 
===== Getting and configuring VCMI =====
 
<pre>
 
# You can choose any directory
 
mkdir ~/DEV && cd ~/DEV
 
# Clone VCMI with all submodules
 
git clone --recursive  https://github.com/vcmi/vcmi.git
 
# Installing dependencies
 
sh ./vcmi/CI/mac/before_install.sh
 
# You might need to add QT to your PATH. Currently it can be done like that (see the end of before_install.sh, it does the same for CI)
 
# echo 'export PATH="/usr/local/opt/qt5:$PATH"' >> ~/.bash_profile
 
# Creating directory for building
 
mkdir cmake && cd cmake
 
# Xcode is multi-configuration project so specifying CMAKE_BUILD_TYPE makes no sense
 
cmake ../vcmi -G "Xcode"
 
 
 
# You can as well open project in Xcode using:
 
open VCMI.xcodeproj
 
</pre>
 
 
 
===== Building and packaging VCMI =====
 
<pre>
 
cd ~/DEV/xcode
 
# Start build. Xcode built using multiple processes by default so you don't need to specify it
 
# Since it's multi-configuration project you need to specify if you want Debug build since Release is default
 
cmake --build . --config Debug
 
 
 
# You have to specify build configuration for CPack. Otherwise it's will expect Release as default
 
cpack -C Debug
 
</pre>
 
 
 
= Building VCMI with Qt Creator =
 
First you need to clone repository and install dependencies
 
<pre>
 
# You can choose any directory
 
mkdir ~/DEV && cd ~/DEV
 
# Clone VCMI with all submodules
 
git clone --recursive  https://github.com/vcmi/vcmi.git
 
# Installing dependencies
 
sh ./vcmi/CI/mac/before_install.sh
 
# You might need to add QT to your PATH. Currently it can be done like that (see the end of before_install.sh, it does the same for CI)
 
# echo 'export PATH="/usr/local/opt/qt5:$PATH"' >> ~/.bash_profile
 
</pre>
 
When opening project with Qt Creator installed using online installer you might have a problem with CMake unable to find Qt even if you added it into the $PATH environment variable. In that case try to open it from command line:
 
<pre>
 
open ~/Qt/Qt\ Creator.app
 
</pre>
 
 
 
= Running VCMI =
 
You can run VCMI from DMG, but it's will also work from your IDE be it Xcode or Qt Creator.
 
 
 
Alternatively you can run binaries directly from "bin" directory:
 
<pre>
 
~/DEV/cmake/bin/vcmilauncher
 
~/DEV/cmake/bin/vcmiclient
 
~/DEV/cmake/bin/vcmiserver
 
</pre>
 
CMake include commands to copy all needed assets from source directory into "bin" on each build. They'll work when you build from Xcode too.
 
 
 
'''Be aware you still need directories "Data", "Mp3" and "Maps" from Heroes 3 game assets in VCMI app data directory:'''
 
<pre>
 
~/Library/Application\ Support/vcmi/
 
</pre>
 
 
 
===== Some useful debugging tips =====
 
Anyone who might want to debug builds, but new to macOS could find following commands useful:
 
<pre>
 
# To attach DMG file from command line use
 
hdiutil attach vcmi-0.99.dmg
 
# Detach volume:
 
hdiutil detach /Volumes/vcmi-0.99
 
# To view dependency paths
 
otool -L /Volumes/vcmi-0.99/VCMI.app/Contents/MacOS/vcmiclient
 
# To display load commands such as LC_RPATH
 
otool -l /Volumes/vcmi-0.99/VCMI.app/Contents/MacOS/vcmiclient
 
</pre>
 
 
 
= Troubleshooting =
 
In case of troubles you can always consult our CI build scripts or contact the dev team via slack
 
# While building '''FuzzyLite''' you may get the following error with the most recent clang: ([https://forum.vcmi.eu/t/cant-build-on-macos-sierra-10-12-6/4315/2 credit to SXX's answer on the forum])
 
<syntaxhighlight lang="bash">
 
/tmp/fuzzylite/fuzzylite/./fl/Operation.h:1044:24: error: passing an object that undergoes default argument promotion to 'va_start' has undefined behavior [-Werror,-Wvarargs]
 
va_start(args, first);
 
^
 
</syntaxhighlight>
 
 
 
For the time being, you could bypass it using older version of Xcode like 8.2.1 or adding <code>-Wno-varargs</code> compile option to '''AI/FuzzyLite/fuzzylite/CMakeLists.txt:'''
 
 
 
<syntaxhighlight lang="cmake">
 
if(NOT MSVC)
 
#TODO: Remove -Werror before release.
 
#Add Unix compilation flags
 
    set(CMAKE_CXX_FLAGS "-pedantic -Wall -Wextra -Werror -Wno-varargs ${CMAKE_CXX_FLAGS}")
 
</syntaxhighlight>
 

Latest revision as of 16:08, 16 July 2024

Logo256.png    Page moved to VCMI-Homepage