2
0
Эх сурвалжийг харах

Script updates for AWSGameLiftServerSDK-3.4.2 on Linux aarch64 (ARM64) (#139)

Signed-off-by: Steve Pham <[email protected]>
Steve Pham 2 жил өмнө
parent
commit
047cf03a07

+ 81 - 0
package-system/AWSGameLiftServerSDK/AWSGameLiftServerSDK-3.4.2-linux-aarch64.patch

@@ -0,0 +1,81 @@
+diff --git a/cmake/External_boost.cmake b/cmake/External_boost.cmake
+index 6fc990b..17f99d7 100644
+--- a/cmake/External_boost.cmake
++++ b/cmake/External_boost.cmake
+@@ -66,8 +66,14 @@ if(use_bat)
+     BUILD_COMMAND b2 address-model=${am} ${boost_with_args}
+   )
+ else()
++  if(CMAKE_BUILD_TYPE STREQUAL "Debug")
++    set(_build_variant "debug")
++  else()
++    set(_build_variant  "release")
++  endif()
++
+   list(APPEND boost_with_args
+-    "cxxflags=-fPIC")
++    "cflags=-fPIC" "cxxflags=-fPIC" "toolset=clang-12.0" "variant=${_build_variant}")
+   set(boost_cmds
+     CONFIGURE_COMMAND ./bootstrap.sh --prefix=<INSTALL_DIR>
+     BUILD_COMMAND ./b2 address-model=${am} ${boost_with_args}
+diff --git a/cmake/External_sioclient.cmake b/cmake/External_sioclient.cmake
+index 3333da3..6233d98 100644
+--- a/cmake/External_sioclient.cmake
++++ b/cmake/External_sioclient.cmake
+@@ -4,23 +4,41 @@ add_optional_deps(_deps "boost")
+ get_filename_component(_self_dir ${CMAKE_CURRENT_LIST_FILE} PATH)
+ 
+ if(UNIX)
+-    ExternalProject_Add(sioclient
+-      GIT_REPOSITORY https://github.com/socketio/socket.io-client-cpp.git
+-      GIT_TAG 1.6.1
+-      GIT_SUBMODULES
++    ExternalProject_Add(sioclient-src
++        GIT_REPOSITORY https://github.com/socketio/socket.io-client-cpp.git
++        GIT_TAG 1.6.1
++        GIT_SUBMODULES
+         lib/websocketpp
+         lib/rapidjson
+-      SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/sioclient"
+-      INSTALL_DIR "${GameLiftServerSdk_INSTALL_PREFIX}"
+-      PATCH_COMMAND ${CMAKE_COMMAND} -E copy_if_different
+-        "${_self_dir}/sioclient.CMakeLists.txt"
+-        "<SOURCE_DIR>/CMakeLists.txt"
+-      CMAKE_CACHE_ARGS
+-        ${GameLiftServerSdk_DEFAULT_ARGS}
+-        ${GameLiftServerSdk_THIRDPARTYLIBS_ARGS}
+-        "-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=true"
+-      DEPENDS
+-        ${_deps}
++        SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/sioclient"
++        UPDATE_COMMAND ""
++        PATCH_COMMAND ""
++        INSTALL_COMMAND ""
++        CONFIGURE_COMMAND ""
++        BUILD_COMMAND ""
++    )
++
++    ExternalProject_Add(sioclient
++        DEPENDS sioclient-src
++        DOWNLOAD_COMMAND ""
++        SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/sioclient"
++        INSTALL_DIR "${GameLiftServerSdk_INSTALL_PREFIX}"
++        PATCH_COMMAND ${CMAKE_COMMAND} -E copy_if_different
++            "${_self_dir}/sioclient.CMakeLists.txt"
++            "<SOURCE_DIR>/CMakeLists.txt"
++        CMAKE_CACHE_ARGS
++            ${GameLiftServerSdk_DEFAULT_ARGS}
++            ${GameLiftServerSdk_THIRDPARTYLIBS_ARGS}
++            "-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=true"
++        DEPENDS
++            ${_deps}
++    )
++
++    add_custom_command(
++        TARGET sioclient-src POST_BUILD
++        COMMAND git fetch origin
++        COMMAND git merge 56123c87598f8b1dd471be83ca841ceae07f95ba # keep build dependency consistent
++        WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/sioclient/lib/websocketpp"
+     )
+ elseif(WIN32)
+     ExternalProject_Add(sioclient-src

+ 14 - 6
package-system/AWSGameLiftServerSDK/build_package_image.py

@@ -33,7 +33,14 @@ PACKAGE_BASE_PATH: pathlib.Path = pathlib.Path(os.path.dirname(__file__))
 PACKAGE_ROOT_PATH: pathlib.Path = PACKAGE_BASE_PATH.parent
 PACKAGE_BUILD_TYPES: List[str] = ["Debug", "Release"]
 PACKAGE_LIB_TYPES: List[str] = ["Shared", "Static"]
-PACKAGE_PLATFORM_OPTIONS: List[str] = ["windows", "linux"]
+PACKAGE_PLATFORM_OPTIONS: List[str] = ["windows", "linux", "linux-aarch64"]
+
+# Lookup table for the Find{PACKAGE_NAME}.cmake.{platform} source file to copy in case there are shared files across different platforms
+FIND_CMAKE_PLATFORM_SUFFIX_BY_PLATFORM = {
+    'Windows': 'Windows',
+    'Linux': 'Linux',
+    'Linux-Aarch64': 'Linux'
+}
 
 # utils
 class WorkingDirectoryInfo(object):
@@ -138,7 +145,7 @@ def apply_patch_on_sdk_source(working_directory: WorkingDirectoryInfo) -> None:
 
 # get required custom environment for package build
 def get_custom_build_env():
-    if PACKAGE_PLATFORM == PACKAGE_PLATFORM_OPTIONS[1]:
+    if PACKAGE_PLATFORM in (PACKAGE_PLATFORM_OPTIONS[1], PACKAGE_PLATFORM_OPTIONS[2]):
         custom_env = os.environ.copy()
         custom_env["CC"] = "clang"
         custom_env["CXX"] = "clang++"
@@ -155,7 +162,7 @@ def configure_sdk_project(source_folder: str,
     build_shared: str = "ON" if lib_type == "Shared" else "OFF"
     if PACKAGE_PLATFORM == PACKAGE_PLATFORM_OPTIONS[0]:
         generator: str = "-G \"Visual Studio 15 2017\" -A x64"
-    elif PACKAGE_PLATFORM == PACKAGE_PLATFORM_OPTIONS[1]:
+    elif PACKAGE_PLATFORM in (PACKAGE_PLATFORM_OPTIONS[1], PACKAGE_PLATFORM_OPTIONS[2]):
         generator: str = "-G \"Unix Makefiles\""
     else:
         raise Exception(f"Error unsupported platform: {PACKAGE_PLATFORM}")
@@ -178,7 +185,7 @@ def build_sdk_project(source_folder: str,
                       build_type: str) -> None:
     if PACKAGE_PLATFORM == PACKAGE_PLATFORM_OPTIONS[0]:
         target: str = "--target ALL_BUILD"
-    elif PACKAGE_PLATFORM == PACKAGE_PLATFORM_OPTIONS[1]:
+    elif PACKAGE_PLATFORM in (PACKAGE_PLATFORM_OPTIONS[1], PACKAGE_PLATFORM_OPTIONS[2]):
         target: str = ""
     else:
         raise Exception(f"Error unsupported platform: {PACKAGE_PLATFORM}")
@@ -218,7 +225,7 @@ def copy_sdk_libs(libs_output_path: pathlib.Path,
 
         for file in glob.glob(static_libs_pattern):
             copy_file_to_destination(file, str(destination.resolve()))
-    elif PACKAGE_PLATFORM == PACKAGE_PLATFORM_OPTIONS[1]:
+    elif PACKAGE_PLATFORM in (PACKAGE_PLATFORM_OPTIONS[1], PACKAGE_PLATFORM_OPTIONS[2]):
         shared_libs_pattern: str = str(install_folder.joinpath("lib/*.so*"))
         static_libs_pattern: str = str(install_folder.joinpath("lib/*.a"))
         
@@ -260,7 +267,8 @@ def generate_packageInfo(working_directory: WorkingDirectoryInfo) -> None:
 
 # generate required cmake file which is used to find package libs
 def generate_cmake_file(working_directory: WorkingDirectoryInfo) -> None:
-    cmake_file_source: pathlib.Path = PACKAGE_BASE_PATH.joinpath(f"Find{PACKAGE_NAME}.cmake.{PACKAGE_PLATFORM.title()}")
+    cmake_file_source_suffix = FIND_CMAKE_PLATFORM_SUFFIX_BY_PLATFORM[PACKAGE_PLATFORM.title()]
+    cmake_file_source: pathlib.Path = PACKAGE_BASE_PATH.joinpath(f"Find{PACKAGE_NAME}.cmake.{cmake_file_source_suffix}")
     if cmake_file_source.is_file():
         find_cmake_content = cmake_file_source.read_text("UTF-8", "ignore")
 

+ 2 - 0
package_build_list_host_linux-aarch64.json

@@ -4,6 +4,7 @@
     "comment3" : "build_from_folder is package name --> folder containing built image of package",
     "comment4" : "Note:  Build from source occurs before build_from_folder",
     "build_from_source": {
+        "AWSGameLiftServerSDK-3.4.2-rev1-linux-aarch64": "package-system/AWSGameLiftServerSDK/build_package_image.py --platform-name linux-aarch64",
         "AwsIotDeviceSdkCpp-1.15.2-rev1-linux-aarch64": "Scripts/extras/pull_and_build_from_git.py ../../package-system/AwsIotDeviceSdkCpp --platform-name Linux-aarch64 --clean",
         "AWSNativeSDK-1.9.50-rev2-linux-openssl-1-aarch64": "Scripts/extras/pull_and_build_from_git.py ../../package-system/AWSNativeSDK --platform-name Linux-OpenSSL-1-aarch64 --clean",
         "AWSNativeSDK-1.9.50-rev2-linux-openssl-3-aarch64": "Scripts/extras/pull_and_build_from_git.py ../../package-system/AWSNativeSDK --platform-name Linux-OpenSSL-3-aarch64 --clean",
@@ -20,6 +21,7 @@
         "zlib-1.2.11-rev5-linux-aarch64": "Scripts/extras/pull_and_build_from_git.py ../../package-system/zlib --platform-name Linux-aarch64 --clean"
     },
     "build_from_folder": {
+        "AWSGameLiftServerSDK-3.4.2-rev1-linux-aarch64": "package-system/AWSGameLiftServerSDK-linux-aarch64",
         "AwsIotDeviceSdkCpp-1.15.2-rev1-linux-aarch64": "package-system/AwsIotDeviceSdkCpp/temp/AwsIotDeviceSdkCpp-linux-aarch64",
         "AWSNativeSDK-1.9.50-rev2-linux-openssl-1-aarch64": "package-system/AWSNativeSDK/temp/AWSNativeSDK-linux-openssl-1-aarch64",
         "AWSNativeSDK-1.9.50-rev2-linux-openssl-3-aarch64": "package-system/AWSNativeSDK/temp/AWSNativeSDK-linux-openssl-3-aarch64",