Download and Install CMake v3.21 Some versions of aws-sdk-cpp have a known issue compiling with CMake 3.22 or later.
For the build steps of the dependencies and the SDK to work properly on Windows, you will have to enable long path support.
Run the following command in an Administrator level Powershell terminal:
Set-ItemProperty `
-Path HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem `
-Name LongPathsEnabled -Value 1Install the dependencies in the following order:
- AWS SDK C++
- yaml-cpp
- GTest
- Boost
- Pybind
iOS Toolchain file: Get the toolchain file from https://github.com/leetal/ios-cmake.
cURL, OpenSSL, nghttp: Get the script that will build cURL, OpenSSL, and nghttp for iOS from: https://github.com/jasonacox/Build-OpenSSL-cURL
- Needs Xcode 13.1 or above
- If multiple Xcode versions are installed,
run:
sudo xcode-select -s <YOUR_XCODE13_APP>/Contents/Developerexample:sudo xcode-select -s /Applications/Xcode13.app/Contents/Developer
- If multiple Xcode versions are installed,
run:
- Run:
./build.sh- If needed the '-e' flag can be used to compile with OpenSSL engine support although this may cause some 'undefined symbols for architecture' depending on your OS version.
Boost: Get the shell script that will download, bootstrap, and build Boost for iOS from: https://github.com/faithfracture/Apple-Boost-BuildScript/blob/master/boost.sh.
- The variables in boost.sh should be replaced with the following to avoid building unecessary libraries
- BOOST_LIBS=("regex" "filesystem" "iostreams")
- ALL_BOOST_LIBS_1_68=("regex" "filesystem" "iostreams")
- ALL_BOOST_LIBS_1_69=("regex" "filesystem" "iostreams")
Ninja: Available as part of Visual Studio 2019
Developer Command Prompt for VS 2019: Available as part of Visual Studio 2019. Note: all Android build commands should be executed from this console. Usually located at "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\Tools\VsDevCmd.bat"
- For Ninja build tool, you may need to use the dev command prompt from VS Build Tools instead of VS Community edition, if you do not have VS Professional installed. This is especially important when using an EC2 instance instead of your local machine.
- You can launch the dev cmd prompt using the
LaunchDevCmd.batin the above path.
Android NDK r21d for Unreal: Use Unreal's NDK, follow these steps to install: https://docs.unrealengine.com/4.27/en-US/SharingAndReleasing/Mobile/Android/Setup/AndroidStudio/
Android NDK with Unity: (API Level 24, NDK version 21), you can use the NDK supplied by Unity. To do this, set the following (replace with the Unity version you are using):
set ndkroot=C:\Program Files\Unity\Hub\Editor\<UNITY VERSION>\Editor\Data\PlaybackEngines\AndroidPlayer\NDKAndroid Studio Version 4: Follow these steps to install: https://docs.unrealengine.com/4.27/en-US/SharingAndReleasing/Mobile/Android/Setup/AndroidStudio/
After following the steps to install Android Studio 4.0 and downloaded the NDK using Unreal´s script, open Android Studio again and make the following modifications:
- Install Android SDK Build Tools 30.0.3 in Configure > Appeareance and Behavior > System Settings > Android SDK > SDK Tools. You might need to uncheck "Hide obsolete packages"
- This may also be accessed from the startup screen: Configure → SDK Manager → SDK Tools
- You may need to check
Show Package Detailsto see all the versions of theAndroid SDK Build Tools
- Uninstall newer versions of the SDK Build Tools
Note: BUILD_TYPE is either Debug or Release
Note: Make sure your development path is absolute, not relative, the install might silently fail otherwise.
-
Clone the AWS SDK C++:
git clone --recurse-submodules https://github.com/aws/aws-sdk-cpp(make sure you're on tag 1.9.162 or later) -
Install CMake 3.21: https://github.com/Kitware/CMake/releases/tag/v3.21.6
-
Use the Windows Command Prompt (or the Legacy command prompt in Windows Terminal) for the following:
-
Create a build directory called AWSSDK in a separate directory than where you cloned the SDK.
mkdir AWSSDK -
Change directory into AWSSDK:
cd AWSSDK -
Generate the SDK Project files (~5 min):
cmake <YOUR_DEVELOPMENT_PATH>\aws-sdk-cpp -G "Visual Studio 16 2019" -DCMAKE_BUILD_TYPE=<BUILD_TYPE> -DFORCE_SHARED_CRT=ON -DBUILD_SHARED_LIBS=ON -DMINIMIZE_SIZE=ON -DCMAKE_INSTALL_PREFIX=<YOUR_DEVELOPMENT_PATH>\AWSSDK\install\x86_64\windows\<BUILD_TYPE>
-
Build the SDK (~10 min depends on your workstation specs):
"C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\msbuild.exe" ALL_BUILD.vcxproj /p:Configuration=<BUILD_TYPE> -maxcpucount
-
Install the SDK to the <YOUR_DEVELOPMENT_PATH>\AWSSDK\install location
"C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\msbuild.exe" INSTALL.vcxproj /p:Configuration=<BUILD_TYPE> -maxcpucount
- Clone the AWS SDK C++:
git clone --recurse-submodules https://github.com/aws/aws-sdk-cppinside~/<YOUR_DEVELOPMENT_PATH>(make sure you're on tag 1.9.188 for macOS)- Make sure to use the same tag for
aws-sdk-cppfor all builds (macOS and iOS)
- Make sure to use the same tag for
- Install CMake: https://cmake.org/download/
- For both macOS and iOS, you will need to pull in the tag
v0.17.13forcrt/aws-crt-cppsubmodule ofaws-sdk-cpp. This fixes a bug for iOS builds related toSetKeychainPath. Make sure toinitand recursiveupdatefurther submodules ofaws-crt-cpp.
-
Create a build directory called AWSSDK_mac e.g.,
~/development/AWSSDK_macmkdir AWSSDK_mac -
Change directory into AWSSDK_mac:
cd AWSSDK_mac -
Run CMake
rm -rf CMakeFiles/; rm -rf CMakeScripts/; rm CMakeCache.txt; rm -rf crt/aws-crt-cpp/CMakeFiles/; rm -rf crt/aws-crt-cpp/CMakeScripts/; cmake ~/development/aws-sdk-cpp -G Xcode -DCMAKE_BUILD_TYPE=<BUILD_TYPE> -DBUILD_ONLY="core;apigateway;cloudformation;cognito-idp;lambda;s3;ssm;secretsmanager;sts" -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX=<YOUR_DEVELOPMENT_PATH>/AWSSDK_mac/install/x86_64/macos/<BUILD_TYPE> -DTARGET_ARCH="APPLE" -DCMAKE_OSX_DEPLOYMENT_TARGET=10.15
-
Build and install
xcodebuild -parallelizeTargets -configuration <BUILD_TYPE> -target ALL_BUILD xcodebuild -parallelizeTargets -target install
-
Create a build directory called AWSSDK_ios e.g.,
~/development/AWSSDK_iosmkdir AWSSDK_ios -
Change directory into AWSSDK_ios:
cd AWSSDK_ios -
Run CMake Use XCode 12 to compile for iOS 14.0 which is the highest version supported by Unreal 4.27.
- If multiple Xcode versions are installed,
Run:
sudo xcode-select -s <YOUR_XCODE12_APP>/Contents/DeveloperExample:sudo xcode-select -s /Applications/Xcode12.app/Contents/Developercmake ~/development/aws-sdk-cpp -G Xcode -DCMAKE_TOOLCHAIN_FILE=<YOUR_DEVELOPMENT_PATH>/ios-cmake/ios.toolchain.cmake -DPLATFORM=OS64 -DCMAKE_BUILD_TYPE=<BUILD_TYPE> -DBUILD_ONLY="core;apigateway;cloudformation;cognito-idp;lambda;s3;ssm;secretsmanager;sts" -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=<YOUR_DEVELOPMENT_PATH>/AWSSDK_ios/install/arm64/ios/<BUILD_TYPE> -DENABLE_TESTING=NO -DCURL_LIBRARY=<YOUR_DEVELOPMENT_PATH>/Build-OpenSSL-cURL/curl/lib/libcurl.a -DCURL_INCLUDE_DIR=<YOUR_DEVELOPMENT_PATH>/Build-OpenSSL-cURL/curl/include -DUSE_OPENSSL=ON -DENABLE_PROXY_INTEGRATION_TESTS=OFF -DENABLE_COMMONCRYPTO_ENCRYPTION=OFF -DENABLE_OPENSSL_ENCRYPTION=ON -DOPENSSL_ROOT_DIR=<YOUR_DEVELOPMENT_PATH>/Build-OpenSSL-cURL/openssl/iOS -DCMAKE_CXX_FLAGS="-Wno-shorten-64-to-32" -DENABLE_CURL_CLIENT=ON -DENABLE_CURL_LOGGING=OFF
-
Build and install
xcodebuild -parallelizeTargets -configuration <BUILD_TYPE> -target ALL_BUILD
xcodebuild -parallelizeTargets -target install
-
Set these environment variables inside a Developer Command Prompt for VS 2019.
set ANDROID_API_LEVEL=24 set BUILD_TYPE=Debug set ARCH=arm set PLATFORM=android set ANDROID_ABI=armeabi-v7a
- For Unreal, set:
set BUILD_SHARED=OFF set STL_TYPE=c++_static
- For Unity, set:
set BUILD_SHARED=ON set STL_TYPE=c++_shared
-
Create a build directory called AWSSDK_android
mkdir AWSSDK_android -
Change directory into AWSSDK_android:
cd AWSSDK_android -
Run CMake
cmake <YOUR_DEVELOPMENT_PATH>\aws-sdk-cpp -DNDK_DIR=%NDKROOT% -DBUILD_ONLY="core;apigateway;cloudformation;cognito-idp;lambda;s3;ssm;secretsmanager;sts" -DBUILD_SHARED_LIBS=%BUILD_SHARED% -DCMAKE_BUILD_TYPE=%BUILD_TYPE% -DCUSTOM_MEMORY_MANAGEMENT=ON -DTARGET_ARCH=ANDROID -DANDROID_ABI=%ANDROID_ABI% -DANDROID_NATIVE_API_LEVEL=%ANDROID_API_LEVEL% -DANDROID_BUILD_CURL=1 -DANDROID_BUILD_OPENSSL=1 -DANDROID_BUILD_ZLIB=1 -DBUILD_ZLIB=1 -DCMAKE_INSTALL_PREFIX=<YOUR_DEVELOPMENT_PATH>\AWSSDK_android\install\%ARCH%\%PLATFORM%\%BUILD_TYPE% -G "Ninja" -DANDROID_STL=%STL_TYPE% -DANDROID_PLATFORM=android-%ANDROID_API_LEVEL% -DENABLE_TESTING=NO
-
Build and install
cmake --build . cmake --build . --target install
-
Before building
Releaseafter you have builtDebug, make sure to delete allCMakeCachefiles and also the folderexternal-buildinAWSSDK_androidroot path.
AWS GameKit uses a fixed version of yaml-cpp: commit 2f899756
git clone https://github.com/jbeder/yaml-cpp/cd yaml-cppgit checkout -b gamekit_fixed_version 2f899756mkdir buildcd buildcmake -DYAML_BUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=<DIRECTORY_IN_STEP_TWO>\install\<BUILD_TYPE> .."C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\msbuild.exe" INSTALL.vcxproj /p:Configuration=<BUILD_TYPE> -maxcpucount
git clone https://github.com/jbeder/yaml-cpp/cd yaml-cppgit checkout -b gamekit_fixed_version 2f899756mkdir build_maccd build_maccmake -G Xcode -DYAML_BUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=install/x86_64/<BUILD_TYPE> ..xcodebuild -parallelizeTargets -configuration <BUILD_TYPE> -target ALL_BUILDxcodebuild -parallelizeTargets -target install
git clone https://github.com/jbeder/yaml-cpp/(if not already cloned formacos)cd yaml-cppgit checkout -b gamekit_fixed_version 2f899756mkdir build_ios(same level asmacos)cd build_ioscmake -G Xcode -DCMAKE_TOOLCHAIN_FILE=<YOUR_DEVELOPMENT_PATH>/ios-cmake/ios.toolchain.cmake -DPLATFORM=OS64 -DCMAKE_BUILD_TYPE=<BUILD_TYPE> -DCMAKE_INSTALL_PREFIX=install/arm64/<BUILD_TYPE> ..xcodebuild -parallelizeTargets -configuration <BUILD_TYPE> -target ALL_BUILDxcodebuild -parallelizeTargets -target install
-
Set these environment variables inside a Developer Command Prompt for VS 2019.
set ANDROID_API_LEVEL=24 set BUILD_TYPE=Debug set ARCH=arm set PLATFORM=android set ANDROID_ABI=armeabi-v7a
- For Unreal, set:
set BUILD_SHARED=OFF set STL_TYPE=c++_static
- For Unity, set:
set BUILD_SHARED=ON set STL_TYPE=c++_shared
-
git clone https://github.com/jbeder/yaml-cpp/ -
cd yaml-cpp -
git checkout -b gamekit_fixed_version 2f899756 -
mkdir build_android -
cd build_androidcmake .. -DCMAKE_TOOLCHAIN_FILE=%NDKROOT%\build\cmake\android.toolchain.cmake -DYAML_BUILD_SHARED_LIBS=%BUILD_SHARED% -DANDROID_ABI=%ANDROID_ABI% -DANDROID_NATIVE_API_LEVEL=%ANDROID_API_LEVEL% -DCMAKE_INSTALL_PREFIX=install\%BUILD_TYPE% -G "Ninja" -DANDROID_STL=%STL_TYPE% -DBUILD_TESTING=OFF cmake --build . cmake --build . --target install
- Create a directory to contain the Google test repo (example:
D:\development), navigate into it and clone:git clone https://github.com/google/googletest. You should end up having a directory tree likeD:\development\googletest. - Navigate into the googletest directory inside newly cloned googletest repo, your cwd should look like
D:\development\googletest\googletest. - Run CMake to generate the configuration files:
cmake -DBUILD_SHARED_LIBS=ON -Dgtest_force_shared_crt=ON -DCMAKE_INSTALL_PREFIX=<path to gtest repo>\build\install -DGTEST_CREATE_SHARED_LIBRARY=1 .. - Build with
"C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\msbuild.exe" INSTALL.vcxproj /p:Configuration=Debug -maxcpucount
- Clone https://github.com/google/googletest
cdinto the directory where you cloned googletestmkdir build_maccd build_maccmake -G Xcode -DBUILD_SHARED_LIBS=ON -Dgtest_force_shared_crt=ON -DCMAKE_INSTALL_PREFIX=install/x86_64 -DGTEST_CREATE_SHARED_LIBRARY=1 ..xcodebuild -parallelizeTargets -target ALL_BUILDxcodebuild -parallelizeTargets -target install
- Not needed.
-
Set these environment variables inside a Developer Command Prompt for VS 2019.
set ANDROID_API_LEVEL=24 set BUILD_TYPE=Debug set ARCH=arm set PLATFORM=android set ANDROID_ABI=armeabi-v7a
- For Unreal, set:
set STL_TYPE=c++_static
- For Unity, set:
set STL_TYPE=c++_shared
-
cdinto the directory where you cloned googletest -
mkdir build_android -
cd build_androidcmake .. -DBUILD_SHARED_LIBS=ON -Dgtest_force_shared_crt=ON -DCMAKE_INSTALL_PREFIX=install\%BUILD_TYPE% -DGTEST_CREATE_SHARED_LIBRARY=1 -DCMAKE_TOOLCHAIN_FILE=%NDKROOT%\build\cmake\android.toolchain.cmake -DANDROID_ABI=%ANDROID_ABI% -DANDROID_NATIVE_API_LEVEL=%ANDROID_API_LEVEL% -G "Ninja" -DANDROID_STL=%STL_TYPE% cmake --build . cmake --build . --target install
- Download and extract https://www.boost.org/users/history/version_1_76_0.html
cdinto the directory you extracted Boost- Run
bootstrap.bat - Run
.\b2 link=static
- Download and extract https://www.boost.org/users/history/version_1_76_0.html
cdinto the directory you extracted Boost- Run
./bootstrap.sh - Run
./b2 link=static
- Make the following updates to the script from https://gist.github.com/faithfracture/c629ae4c7168216a9856#file-boost-sh :
- Make sure it's in a separate folder from the boost folder for win64 and macos, for example:
~/development/ios-boost. - May need to give
r+wpermissions to all files in this folder withchmod. - Update boost version in to
1.76.0(or whichever one we are currently using for win64 and macos). - Change BOOST_LIBS to
BOOST_LIBS="regex filesystem iostreams"
- Make sure it's in a separate folder from the boost folder for win64 and macos, for example:
- Run the script using
./boost.sh -ios. - Note: You can continue to use the other boost folder (ex:
<BOOST_PARENT_DIR>\boost_1_76_0) when asked for the boost path in thescripts/aws_gamekit_cpp_build.pybuild script since the build needs boost source/includes. Use theios-boostdirectory when prompted for the boost path in thescripts/refresh_plugin.pyscript that copies ios static libs.
-
Set these environment variables inside a Developer Command Prompt for VS 2019.
set ANDROID_API_LEVEL=24 set BUILD_TYPE=Debug set ARCH=arm set PLATFORM=android set CLANGPATH=%NDKROOT%\toolchains\llvm\prebuilt\windows-x86_64\bin set PATH=%PATH%;%CLANGPATH%
- For Unreal, set:
set STL_TYPE=c++_static
- For Unity, set:
set STL_TYPE=c++_shared
-
Copy the
scripts\Android\sample-android-user-config.jamto your User directory with the nameuser-config.jame.g.C:\users\<your username>\user-config.jam.Note: Remember to remove or rename this file after building Boost for Android, otherwise all future Boost builds will use this configuration.
-
Download and extract https://www.boost.org/users/history/version_1_76_0.html. Make sure it's in a separate folder from the boost folder for win64 and macos, for example:
~/development/android-boost. -
cdinto the directory you extracted Boost -
Run
bootstrap.bat --with-libraries=regex,filesystem,iostreams -
Build boost:
- For Unreal, run
.\b2 toolset=clang-armeabiv7a target-os=android architecture=arm --without-python threading=multi link=static --layout=tagged variant=debug,release
- For Unity:
Openboostcpp.jamin your boost dir and addandroidto the platforms on line 210, so it ends up asThen, run in the Command Prompt! [ $(property-set).get <target-os> ] in windows cygwin darwin aix android &&.\b2 toolset=clang-armeabiv7a target-os=android architecture=arm --without-python link=shared --layout=system variant=debug,release stage
- Make sure
python3is on yourPATH
- Clone https://github.com/pybind/pybind11/
cdinto the directory where you cloned pybind11cmake -DBoost_INCLUDE_DIR=<BOOST_PARENT_DIR>\boost_1_76_0 -DCMAKE_INSTALL_PREFIX=<PYBIND_PARENT_DIR>\pybind11\install\<BUILD_TYPE> ."C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\msbuild.exe" INSTALL.vcxproj /p:Configuration=<BUILD_TYPE> -maxcpucount
- Clone https://github.com/pybind/pybind11/
cdinto the directory where you cloned pybind11cmake -DBOOST_ROOT=<BOOST_PARENT_DIR>/boost_1_76_0 .makesudo make install
Not supported.
Not supported.
Use the scripts/aws_gamekit_cpp_build.py utility to generate project files and compile for the specified platform.
- Usage:
python scripts/aws_gamekit_cpp_build.py <Platform> <Platform specific arguments> <BUILD_TYPE> - Example:
python scripts/aws_gamekit_cpp_build.py Windows --test Debug - Use
--helpto see all arguments and directions. If used after supplying a platform it will list and explain platform sepecific arguments.
- For Android support in Unity, call the command as follows (replacing <BUILD_TYPE> with Release or Debug):
python scripts/aws_gamekit_cpp_build.py Android --shared <BUILD_TYPE>
The script will first search your environment variables for dependency path variables. If they are not present there, it will search in
the .env file at the root of this repository (created by running this script), else it will prompt you for input on where the dependencies
are located and save those locations in the .env file.
cdintotests\<BUILD_TYPE>directory- Run
aws-gamekit-cpp-tests.exe
- cd into the
tests/Debugdirectory - Run
./aws-gamekit-cpp-tests
Use the scripts/refresh_plugin.py script to update your game engine plugin with the new libraries and header files.
- Usage:
python scripts/refresh_plugin.py --platform <target_platform> <BuildType> <GameEngine> <game engine specific arguments> - Example:
python scripts/refresh_plugin.py --platform Windows Debug Unreal --unreal_plugin_path D:\development\MyUnrealGame\Plugins\AwsGameKit - Example:
python scripts/refresh_plugin.py --platform Windows Debug Unity --unity_plugin_path D:\development\MyUnityGame\Packages\com.amazonaws.gamekit - Use
--helpwith the script to see argument options, and using--helpafter supplying aGameEngineargument, it will list and explain game engine specific arguments. - If refreshing MacOS or iOS binaries you will have to codesign them to distribute them to other developers, supply the
--certificate_nameargument and give a Developer ID Application certificate common name.