docker_build_aws_sdk.sh 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. #!/bin/bash
  2. #
  3. # Copyright (c) Contributors to the Open 3D Engine Project.
  4. # For complete copyright and license terms please see the LICENSE at the root of this distribution.
  5. #
  6. # SPDX-License-Identifier: Apache-2.0 OR MIT
  7. #
  8. # Validate the bld path input
  9. BUILD_FOLDER=${DOCKER_BUILD_PATH}
  10. if [ "${BUILD_FOLDER}" == "" ]
  11. then
  12. echo "Missing required build target folder environment"
  13. exit 1
  14. elif [ "${BUILD_FOLDER}" == "temp" ]
  15. then
  16. echo "Build target folder environment cannot be 'temp'"
  17. exit 1
  18. fi
  19. # Locate the dependent OpenSSL package
  20. OPENSSL_REGEX='(OpenSSL-([A-Za-z0-9\.\-]+)-(linux|linux-aarch64))'
  21. [[ $DOWNLOADED_PACKAGE_FOLDERS =~ $OPENSSL_REGEX ]]
  22. DEPENDENT_OPENSSL=${BASH_REMATCH[1]}
  23. if [ $DEPENDENT_OPENSSL == "" ]
  24. then
  25. echo "Unable to detect dependent OpenSSL package"
  26. exit 1
  27. fi
  28. DEPENDENT_OPENSSL_BASE=$WORKSPACE/temp/${DEPENDENT_OPENSSL}/OpenSSL
  29. if [ ! -d ${DEPENDENT_OPENSSL_BASE} ]
  30. then
  31. echo "Unable to detect dependent OpenSSL package at ${DEPENDENT_OPENSSL_BASE}"
  32. exit 1
  33. fi
  34. echo "Detected dependent OpenSSL package at ${DEPENDENT_OPENSSL_BASE}"
  35. # Locate the dependent ZLIB package
  36. OPENZLIB_REGEX='(zlib-([A-Za-z0-9\.\-]+)-(linux|linux-aarch64))'
  37. [[ $DOWNLOADED_PACKAGE_FOLDERS =~ $OPENZLIB_REGEX ]]
  38. DEPENDENT_ZLIB=${BASH_REMATCH[1]}
  39. if [ $DEPENDENT_ZLIB == "" ]
  40. then
  41. echo "Unable to detect dependent zlib package"
  42. exit 1
  43. fi
  44. DEPENDENT_ZLIB_BASE=$WORKSPACE/temp/${DEPENDENT_ZLIB}/zlib
  45. if [ ! -d ${DEPENDENT_ZLIB_BASE} ]
  46. then
  47. echo "Unable to detect dependent zlib package at ${DEPENDENT_ZLIB_BASE}"
  48. exit 1
  49. fi
  50. echo "Detected dependent zlib package at ${DEPENDENT_ZLIB_BASE}"
  51. # Prepare curl
  52. CURL_BASE=/data/workspace/curl
  53. CURL_SRC=${CURL_BASE}/src
  54. CURL_INSTALL=${CURL_BASE}/install
  55. if [ ! -d $CURL_BASE ]
  56. then
  57. echo "Unable to find source curl library ($CURL_SRC) from this docker image"
  58. exit 1
  59. fi
  60. # Build curl from source
  61. pushd $CURL_BASE/src
  62. CMD="autoreconf -fi"
  63. echo ${CMD}
  64. eval ${CMD}
  65. if [ $? -ne 0 ]
  66. then
  67. echo "Failed generating configuration for curl"
  68. exit 1
  69. fi
  70. CMD="./configure --with-ssl=${DEPENDENT_OPENSSL_BASE}/ --with-zlib=${DEPENDENT_ZLIB_BASE} --prefix=${CURL_INSTALL} --enable-proxy"
  71. echo ${CMD}
  72. eval ${CMD}
  73. if [ $? -ne 0 ]
  74. then
  75. echo "Failed configuring curl"
  76. exit 1
  77. fi
  78. CMD="make"
  79. echo ${CMD}
  80. eval ${CMD}
  81. if [ $? -ne 0 ]
  82. then
  83. echo "Failed building curl"
  84. exit 1
  85. fi
  86. CMD="make install"
  87. echo ${CMD}
  88. eval ${CMD}
  89. if [ $? -ne 0 ]
  90. then
  91. echo "Failed installing curl"
  92. exit 1
  93. fi
  94. popd
  95. # Copy the source folder from the read-only $WORKSPACE/temp/src to $WORKSPACE/src
  96. # since the build process will write/modify the source path
  97. echo "Preparing source folder '$WORKSPACE/src'"
  98. cp -r $WORKSPACE/temp/src $WORKSPACE/ || (echo "Error copying src from $WORKSPACE/temp" && exit 1)
  99. SRC_PATH=$WORKSPACE/src
  100. if [ ! -d ${SRC_PATH} ]
  101. then
  102. echo "Missing expected source path at ${SRC_PATH}"
  103. exit 1
  104. fi
  105. BUILD_PATH=$WORKSPACE/aws/build
  106. if [ -d ${BUILD_PATH} ]
  107. then
  108. rm -rf ${BUILD_PATH}
  109. fi
  110. INSTALL_PATH=${BUILD_FOLDER}
  111. if [ -d ${INSTALL_PATH} ]
  112. then
  113. rm -rf ${INSTALL_PATH}
  114. fi
  115. configure_and_build() {
  116. lib_type=$1
  117. dep_curl_lib=${CURL_INSTALL}/lib/libcurl.a
  118. if [ "$lib_type" == "Shared" ]
  119. then
  120. build_shared=ON
  121. else
  122. build_shared=OFF
  123. fi
  124. echo "CMake Configure $build_type $lib_type"
  125. CMD="cmake -S ${SRC_PATH} -B ${BUILD_PATH}/${lib_type} \
  126. -G Ninja \
  127. -DTARGET_ARCH=LINUX \
  128. -DCMAKE_C_COMPILER=/usr/lib/llvm-12/bin/clang \
  129. -DCMAKE_CXX_COMPILER=/usr/lib/llvm-12/bin/clang++ \
  130. -DCMAKE_CXX_STANDARD=17 \
  131. -DCPP_STANDARD=17 \
  132. -DCMAKE_C_FLAGS=\"-fPIC -Wno-option-ignored\" \
  133. -DCMAKE_CXX_FLAGS=\"-fPIC -Wno-option-ignored\" \
  134. -DENABLE_TESTING=OFF \
  135. -DENABLE_RTTI=ON \
  136. -DCUSTOM_MEMORY_MANAGEMENT=ON \
  137. -DBUILD_ONLY=\"access-management;bedrock-runtime;cognito-identity;cognito-idp;core;devicefarm;dynamodb;gamelift;identity-management;kinesis;lambda;queues;s3;sns;sqs;sts;transfer\" \
  138. -DBUILD_SHARED_LIBS=$build_shared \
  139. -DCMAKE_BUILD_TYPE=Release \
  140. -DCMAKE_INSTALL_BINDIR=\"bin\" \
  141. -DCMAKE_INSTALL_LIBDIR=\"lib\" \
  142. -DCURL_INCLUDE_DIR=${CURL_INSTALL}/include \
  143. -DCURL_LIBRARY=${dep_curl_lib} \
  144. -Dcrypto_INCLUDE_DIR=${DEPENDENT_OPENSSL_BASE}/include \
  145. -Dcrypto_LIBRARY=${DEPENDENT_OPENSSL_BASE}/lib/libcrypto.a \
  146. -DOPENSSL_CRYPTO_LIBRARY=${DEPENDENT_OPENSSL_BASE}/lib/libssl.a \
  147. -DOPENSSL_INCLUDE_DIR=${DEPENDENT_OPENSSL_BASE}/include \
  148. -DZLIB_LIBRARY=${DEPENDENT_ZLIB_BASE}/lib/libz.a \
  149. -DZLIB_INCLUDE_DIR=${DEPENDENT_ZLIB_BASE}/include \
  150. -DLEGACY_BUILD=ON"
  151. echo ${CMD}
  152. eval ${CMD}
  153. if [ $? -ne 0 ]
  154. then
  155. echo "Error generating AWS Native SDK build"
  156. exit 1
  157. fi
  158. CMD="cmake --build \"${BUILD_PATH}/${lib_type}\" "
  159. echo ${CMD}
  160. eval ${CMD}
  161. if [ $? -ne 0 ]
  162. then
  163. echo "Error building the ${lib_type} AWS Native SDK libraries"
  164. exit 1
  165. fi
  166. CMD="cmake --install \"${BUILD_PATH}/${lib_type}\" --prefix \"${INSTALL_PATH}/${lib_type}\" "
  167. echo ${CMD}
  168. eval ${CMD}
  169. if [ $? -ne 0 ]
  170. then
  171. echo "Error installing the ${lib_type} AWS Native SDK libraries"
  172. exit 1
  173. fi
  174. cp ${dep_curl_lib} ${INSTALL_PATH}/${lib_type}/lib/
  175. }
  176. # Static
  177. configure_and_build Static
  178. # Shared
  179. configure_and_build Shared
  180. # Copy the curl-related copyright and readme
  181. cp ${CURL_SRC}/README ${INSTALL_PATH}/README.CURL
  182. cp ${CURL_SRC}/COPYING ${INSTALL_PATH}/COPYING.CURL
  183. echo "Custom Build for AWSNativeSDK finished successfully"
  184. exit 0