-
Notifications
You must be signed in to change notification settings - Fork 1.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Improvement to build, install, and distribution mechanisms #1888
Comments
First preparation PR: #1886 |
I'm trying to use DynamoDB Streams and Kinesis within Unreal Engine, and the process is extremely complex and painful. Of course, part of it is also due to UE's fault, but that's another story. Anyway, to use a third party library within Unreal Engine, I have to package the library as a Unreal Engine "plugin" that contains a "third party library" folder which includes compiled and source code for Windows, Mac, etc. Like many people, I could not figure out how to make this work. Fortunately, I was able to purchase a plugin for a fee from the UE marketplace, and the plugin's sole value proposition is enabling users to use the AWS SDK (but only dynamodb submodule) within UE. While I'm sure this represents a niche and rare use case of AWS SDK, this is one area which would benefit largely from easier integration of AWS. |
I run into two difficulties with building and linking to the AWS SDK for C++: Background I need to build past and current versions of my software product, as well as current and past versions of the AWS SDK for C++ on which it depends. My build PC runs on older version of Ubuntu (18.04 Bionic) intentionally to ensure my customers can run my program on their older Linux systems. Issue 1: CMake builds don't let you specify paths for all dependencies So I cannot ever rely on system LIB and INCLUDE paths for transitive dependencies such as OpenSSL, zlib, libCURL, liblzma, libuuid, etc. These would all be too old in the Ubuntu 18 system directories. Version 1.11 of the AWS SDK for C++ allows you to explicitly specify the path to the CURL library, i.e. by defining Issue 2: AWS SDK for C++ header include files are spread across multiple subdirectories I have built the AWS SDK for C++ libraries successfully multiple times, only to find that when I run the S3-Crt demo project I get SEGFAULTS. Turns out I had not copied all of the header include files from the CMake build tree to my own header include directory. So there was a mix of AWS SDK headers from a previous build as well as updated headers from the latest build. While this is a novice mistake to make, the AWS SDK for C++ makes it easier to mess this up, specifically: The AWS SDK for C++ often includes API changes between two tags, even when the major and minor version number have not changed. This should be highlighted in build documentation, as some libraries follow semantic versioning practices and will bump the minor version if there is an API change. The CMake and vcpkg builds of the AWS SDK for C++ place header include files in several directories. vcpkg does a decent job of this:
But the CMake build places headers is many far-flung directories. And these directories can change from tag to tag:
Enhancing the CMake build so it prepares a consolidated set of header directories (similar to what vcpkg does) would be a handy way to ensure the entire set of headers could be easily found and copied elsewhere. The S3 Crt demo project will log an API version mismatch error if it detects that the version in |
The AWS SDK online documentation still shows that building the AWS SDK for C++ on Linux requires CMake - minimum version 3.13, maximum version 3.21. Is this maximum CMake version still valid? Ideally the SDK could be built with the latest CMake. |
there is no maximum version and it will buid on latest, i routinely use latest. let me see if i can track down the documentation to update that wording to remove maximum. |
There is another documentation page stating that the CMake maximum version is 3.21. This one is for Windows: |
Any updates? |
Describe the issue
Feedback from our customers show that AWS SDK for C++ complexity to build is high. Our customers come from very diverse disciplines and backgrounds, that requires AWS SDK for C++ to build under a vast set of constraints. These constraints usually come from using different operating systems, toolchains, memory management processes, and domain specific practices to mention a few.
Since AWS SDK for C++ was first released, we extended our cmake scripts to fulfill needs from new platforms, new uses cases we identified, and new tooling mostly as a collection of small individual changes with no significant impact on the build as a whole. However, as the collection of them grew, the build as a whole became a very complex piece of code to work with. This building complexity many times translates in time spent for developers who want to install the AWS SDK for C++ to work in their projects, for contributors and reviewers wanting to implement changes to fix issues with it, for package managers to release distributions, for release managers to distribute it as a dependency of their projects.
We are working in a redesign of our cmake scripts to be released at v1.10. We expect to provide a simpler and idiomatic modern cmake experience based in standard industry patterns.
Here is a list of some of the changes we will introduce:
We will develop these changes in branch build-dev-1.10 until ready for release. We are going to publish PRs in each step of the way and link them to this Issue. We encourage everyone interested to participate in this Issue discussion thread, and the PRs.
Steps to Reproduce
No response
Current behavior
No response
AWS CPP SDK version used
1.9
compiler and version used
any
Operating System and version
any
The text was updated successfully, but these errors were encountered: