From e648096137bc864beb39a52f6ee540fe8e1541e5 Mon Sep 17 00:00:00 2001 From: Martin Valgur Date: Thu, 16 Nov 2023 13:42:12 +0200 Subject: [PATCH 1/8] aws-cdi-sdk: migrate to Conan v2 --- recipes/aws-cdi-sdk/all/CMakeLists.txt | 53 +++++- recipes/aws-cdi-sdk/all/conandata.yml | 11 +- recipes/aws-cdi-sdk/all/conanfile.py | 166 +++++++----------- .../all/patches/001-Makefile.patch | 100 ----------- .../all/test_package/CMakeLists.txt | 7 +- .../aws-cdi-sdk/all/test_package/conanfile.py | 21 ++- .../all/test_v1_package/CMakeLists.txt | 8 + .../all/test_v1_package/conanfile.py | 17 ++ recipes/aws-cdi-sdk/config.yml | 2 + 9 files changed, 159 insertions(+), 226 deletions(-) delete mode 100644 recipes/aws-cdi-sdk/all/patches/001-Makefile.patch create mode 100644 recipes/aws-cdi-sdk/all/test_v1_package/CMakeLists.txt create mode 100644 recipes/aws-cdi-sdk/all/test_v1_package/conanfile.py diff --git a/recipes/aws-cdi-sdk/all/CMakeLists.txt b/recipes/aws-cdi-sdk/all/CMakeLists.txt index 19f6430ae56b6..414137d91e791 100644 --- a/recipes/aws-cdi-sdk/all/CMakeLists.txt +++ b/recipes/aws-cdi-sdk/all/CMakeLists.txt @@ -1,10 +1,49 @@ -cmake_minimum_required(VERSION 3.5) -project(cmake_wrapper) +cmake_minimum_required(VERSION 3.15) +project(cdisdk LANGUAGES C CXX) -include(conanbuildinfo.cmake) -conan_basic_setup(TARGETS) - -find_package(AWSSDK REQUIRED) +find_package(AWSSDK REQUIRED CONFIG) add_library(aws-cpp-sdk-core ALIAS AWS::aws-sdk-cpp-core) +add_subdirectory(aws-cpp-sdk-cdi) + +find_package(aws-libfabric REQUIRED CONFIG) +find_package(Threads REQUIRED) + +file(GLOB_RECURSE CDI_SOURCES "src/cdi/*.c*" "src/common/src/*.c" ) +if(NOT WIN32) + list(FILTER CDI_SOURCES EXCLUDE REGEX "src/common/src/os_windows.c") +endif() +add_library(cdisdk ${CDI_SOURCES}) +target_include_directories(cdisdk PRIVATE include src/common/include src/cdi) +target_link_libraries(cdisdk PRIVATE + AWS::aws-cpp-sdk-cdi + AWS::aws-sdk-cpp-monitoring + aws-libfabric::aws-libfabric + Threads::Threads +) +set_target_properties(cdisdk PROPERTIES + SOVERSION ${PRODUCT_VERSION} + VERSION ${MAJOR_MINOR_VERSION} + C_STANDARD 99 + CXX_STANDARD 11 +) +# https://github.com/aws/aws-cdi-sdk/blob/v2.4.1/Makefile#L214-L232 +target_compile_definitions(cdisdk PRIVATE _LINUX _POSIX_C_SOURCE=200112L) +if (NOT MSVC) + target_compile_options(cdisdk PRIVATE + -Wall -Wextra + "$<$:-O0;-g;-DDEBUG>" + "$<$:-O3;-DNDEBUG>" + ) + # https://github.com/aws/aws-cdi-sdk/blob/v2.4.1/Makefile#L376-L379 + target_link_options(cdisdk PRIVATE -z defs --version-script ${CMAKE_SOURCE_DIR}/libcdisdk.vers) +endif() +if (UNIX) + target_link_libraries(cdisdk PRIVATE dl rt m) +endif() -add_subdirectory(source_subfolder/aws-cpp-sdk-cdi) +install(TARGETS cdisdk + RUNTIME DESTINATION bin + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib +) +install(DIRECTORY include/ DESTINATION include) diff --git a/recipes/aws-cdi-sdk/all/conandata.yml b/recipes/aws-cdi-sdk/all/conandata.yml index c926a59a5cbb7..38acc43294b16 100644 --- a/recipes/aws-cdi-sdk/all/conandata.yml +++ b/recipes/aws-cdi-sdk/all/conandata.yml @@ -1,8 +1,7 @@ sources: + "2.4.1": + url: "https://github.com/aws/aws-cdi-sdk/archive/refs/tags/v2.4.1.tar.gz" + sha256: "360a8eeaf741a1e6b7c9d3971d0d0b4098e4c76092330684816b62d5e8400045" "2.2.0": - url: https://github.com/aws/aws-cdi-sdk/archive/refs/tags/v2.2.0.tar.gz - sha256: 4ee109b7fa2f683b4b0cd03028d0946857f09f34da4e89fe69a5c297cdaeb689 -patches: - "2.2.0": - - base_path: source_subfolder - patch_file: patches/001-Makefile.patch + url: "https://github.com/aws/aws-cdi-sdk/archive/refs/tags/v2.2.0.tar.gz" + sha256: "4ee109b7fa2f683b4b0cd03028d0946857f09f34da4e89fe69a5c297cdaeb689" diff --git a/recipes/aws-cdi-sdk/all/conanfile.py b/recipes/aws-cdi-sdk/all/conanfile.py index 5fba77e00e10a..61f7fca72555d 100644 --- a/recipes/aws-cdi-sdk/all/conanfile.py +++ b/recipes/aws-cdi-sdk/all/conanfile.py @@ -1,144 +1,106 @@ import os -import re -from conans import AutoToolsBuildEnvironment, CMake, ConanFile, tools -from conans.errors import ConanInvalidConfiguration +from conan import ConanFile +from conan.errors import ConanInvalidConfiguration +from conan.tools.build import check_min_cppstd +from conan.tools.cmake import CMake, CMakeDeps, CMakeToolchain, cmake_layout +from conan.tools.files import copy, get, rmdir + +required_conan_version = ">=1.53.0" -required_conan_version = ">=1.35.0" class AwsCdiSdkConan(ConanFile): name = "aws-cdi-sdk" description = "AWS Cloud Digital Interface (CDI) SDK" - topics = ("aws", "communication", "framework", "service") + license = "BSD-2-Clause" url = "https://github.com/conan-io/conan-center-index" homepage = "https://github.com/aws/aws-cdi-sdk" - license = "BSD-2-Clause" + topics = ("aws", "communication", "framework", "service") + + package_type = "library" settings = "os", "arch", "compiler", "build_type" - exports_sources = ["CMakeLists.txt", "patches/**"] - generators = "cmake", "cmake_find_package" + options = { + "shared": [True, False], + "fPIC": [True, False], + } + default_options = { + "shared": False, + "fPIC": True, + } + + def export_sources(self): + copy(self, "CMakeLists.txt", self.recipe_folder, os.path.join(self.export_sources_folder, "src")) - @property - def _source_subfolder(self): - return "source_subfolder" + def configure(self): + self.options["aws-libfabric"].shared = True + self.options["aws-sdk-cpp"].shared = True - _autotools = None - _cmake = None + def layout(self): + cmake_layout(self, src_folder="src") def requirements(self): self.requires("aws-libfabric/1.9.1amzncdi1.0") - self.requires("aws-sdk-cpp/1.8.130") - - def configure(self): - self.options["aws-libfabric"].shared = True - self.options["aws-sdk-cpp"].shared = True + self.requires("aws-sdk-cpp/1.9.234") def validate(self): - if self.settings.os != "Linux": - raise ConanInvalidConfiguration("This recipe currently only supports Linux. Feel free to contribute other platforms!") - if not self.options["aws-libfabric"].shared or not self.options["aws-sdk-cpp"].shared: + if not self.dependencies["aws-libfabric"].options.shared or not self.dependencies["aws-sdk-cpp"].options.shared: raise ConanInvalidConfiguration("Cannot build with static dependencies") - if not getattr(self.options["aws-sdk-cpp"], "monitoring"): + if not self.dependencies["aws-sdk-cpp"].options.get_safe("monitoring"): raise ConanInvalidConfiguration("This package requires the monitoring AWS SDK") if self.settings.compiler.get_safe("cppstd"): - tools.check_min_cppstd(self, 11) + check_min_cppstd(self, 11) def source(self): - tools.get(**self.conan_data["sources"][self.version], - destination=self._source_subfolder, strip_root=True) - - def _configure_autotools(self): - if self._autotools: - return self._autotools - self._autotools = AutoToolsBuildEnvironment(self) - return self._autotools - - def _configure_cmake(self): - if self._cmake: - return self._cmake - self._cmake = CMake(self) - self._cmake.configure() - return self._cmake - - def _detect_compilers(self): - cmake_cache = tools.load(os.path.join(self.build_folder, "CMakeCache.txt")) - cc = re.search("CMAKE_C_COMPILER:FILEPATH=(.*)", cmake_cache)[1] - cxx = re.search("CMAKE_CXX_COMPILER:FILEPATH=(.*)", cmake_cache)[1] - return cc, cxx - - def build(self): - for patch in self.conan_data.get("patches", {}).get(self.version, []): - tools.patch(**patch) - - # build aws-cpp-sdk-cdi - cmake = self._configure_cmake() + get(self, **self.conan_data["sources"][self.version], strip_root=True) + + def generate(self): + tc = CMakeToolchain(self) + # https://github.com/aws/aws-cdi-sdk/blob/v2.4.1/Makefile#L23-L34 + # https://github.com/aws/aws-cdi-sdk/blob/v2.4.1/include/cdi_core_api.h#L67-L74 + product, major, minor = self.version.split(".")[:3] + tc.variables["PRODUCT_VERSION"] = product + tc.variables["MAJOR_MINOR_VERSION"] = f"{major}.{minor}" + tc.generate() + deps = CMakeDeps(self) + deps.generate() + + def build(self): + cmake = CMake(self) + cmake.configure() cmake.build() - autotools = self._configure_autotools() - with tools.chdir(self._source_subfolder): - # configure autotools to find aws-cpp-sdk-cdi - autotools.include_paths.append(os.path.join(self.build_folder, self._source_subfolder, "aws-cpp-sdk-cdi", "include")) - autotools.library_paths.append(os.path.join(self.build_folder, "lib")) - autotools.libs.append("aws-cpp-sdk-cdi") - - vars = autotools.vars - cc, cxx = self._detect_compilers() - vars["CC"] = cc - vars["CXX"] = cxx - if self.settings.build_type == "Debug": - vars["DEBUG"] = "y" - - args = ["require_aws_sdk=no"] - - autotools.make(target="libsdk", vars=vars, args=args) - def package(self): - cmake = self._configure_cmake() + copy(self, "LICENSE", self.source_folder, os.path.join(self.package_folder, "licenses")) + cmake = CMake(self) cmake.install() + rmdir(self, os.path.join(self.package_folder, "lib", "cmake")) + rmdir(self, os.path.join(self.package_folder, "lib", "pkgconfig")) - self.copy(pattern="LICENSE", dst="licenses", src=self._source_subfolder) - self.copy(pattern="*", dst="include", src=os.path.join(self._source_subfolder, "include")) - config = "debug" if self.settings.build_type == "Debug" else "release" - self.copy(pattern="*", dst="lib", src=os.path.join(self._source_subfolder, "build", config, "lib")) - - tools.rmdir(os.path.join(self.package_folder, "lib", "cmake")) - tools.rmdir(os.path.join(self.package_folder, "lib", "pkgconfig")) - - def package_info(self): + def package_info(self): self.cpp_info.set_property("cmake_file_name", "aws-cdi-sdk") - - # TODO: to remove in conan v2 once cmake_find_package_* generators removed - # TODO: Remove the namespace on CMake targets - self.cpp_info.names["cmake_find_package"] = "AWS" - self.cpp_info.names["cmake_find_package_multi"] = "AWS" - self.cpp_info.filenames["cmake_find_package"] = "aws-cdi-sdk" - self.cpp_info.filenames["cmake_find_package_multi"] = "aws-cdi-sdk" + self.cpp_info.set_property("cmake_target_aliases", ["aws-cdi-sdk"]) cppSdk = self.cpp_info.components["aws-cpp-sdk-cdi"] - cppSdk.libs = ["aws-cpp-sdk-cdi"] - - cppSdk.requires = ["aws-sdk-cpp::monitoring", "aws-libfabric::aws-libfabric"] - cppSdk.set_property("cmake_target_name", "AWS::aws-cpp-sdk-cdi") cppSdk.set_property("pkg_config_name", "aws-cpp-sdk-cdi") - - # TODO: to remove in conan v2 once cmake_find_package_* generators removed - # TODO: Remove the namespace on CMake targets - cppSdk.names["cmake_find_package"] = "aws-cpp-sdk-cdi" - cppSdk.names["cmake_find_package_multi"] = "aws-cpp-sdk-cdi" - cppSdk.names["pkg_config"] = "aws-cpp-sdk-cdi" + cppSdk.libs = ["aws-cpp-sdk-cdi"] + cppSdk.requires = ["aws-sdk-cpp::monitoring", "aws-libfabric::aws-libfabric"] cSdk = self.cpp_info.components["cdisdk"] + cSdk.set_property("cmake_target_name", "AWS::aws-cdi-sdk") + cSdk.set_property("pkg_config_name", "aws-cdi-sdk") cSdk.libs = ["cdisdk"] cSdk.requires = ["aws-cpp-sdk-cdi"] - if self.settings.os == "Linux": + if self.settings.os in ["Linux", "FreeBSD"]: cSdk.defines = ["_LINUX"] - cSdk.set_property("cmake_target_name", "AWS::aws-cdi-sdk") - cSdk.set_property("pkg_config_name", "aws-cdi-sdk") - # TODO: to remove in conan v2 once cmake_find_package_* generators removed # TODO: Remove the namespace on CMake targets + self.cpp_info.names["cmake_find_package"] = "AWS" + self.cpp_info.names["cmake_find_package_multi"] = "AWS" + self.cpp_info.filenames["cmake_find_package"] = "aws-cdi-sdk" + self.cpp_info.filenames["cmake_find_package_multi"] = "aws-cdi-sdk" + cppSdk.names["cmake_find_package"] = "aws-cpp-sdk-cdi" + cppSdk.names["cmake_find_package_multi"] = "aws-cpp-sdk-cdi" cSdk.names["cmake_find_package"] = "aws-cdi-sdk" cSdk.names["cmake_find_package_multi"] = "aws-cdi-sdk" - cSdk.names["pkg_config"] = "aws-cdi-sdk" - diff --git a/recipes/aws-cdi-sdk/all/patches/001-Makefile.patch b/recipes/aws-cdi-sdk/all/patches/001-Makefile.patch deleted file mode 100644 index 7462ee93a50e9..0000000000000 --- a/recipes/aws-cdi-sdk/all/patches/001-Makefile.patch +++ /dev/null @@ -1,100 +0,0 @@ -commit dfff3ca2bd52df35be52ec104d1f31f1e4aeef0e -Author: dvirtz -Date: Tue Aug 3 16:48:41 2021 +0300 - - build with external sdk - -diff --git a/Makefile b/Makefile -index 6929dee..74194b5 100644 ---- a/Makefile -+++ b/Makefile -@@ -98,9 +98,6 @@ endif - # makefile.[name].vars.mk. - -include makefile.*.vars.mk - --ifeq ($(top.libfabric),) -- $(error libfabric source tree not found) --endif - # Build artifacts for libfabric go into a debug or release directory under top.libfabric - build_dir.libfabric := $(top.libfabric)/build/$(config_libfabric) - -@@ -127,7 +124,7 @@ srcs.cdi := $(foreach ext,c cpp,$(wildcard $(src_dir.cdi)/*.$(ext))) - srcs.cdi += queue.c fifo.c list.c logger.c os_linux.c pool.c - objs.cdi := $(addprefix $(build_dir.obj)/,$(patsubst %.cpp,%.o,$(patsubst %.c,%.o,$(notdir $(srcs.cdi))))) - headers.cdi := $(foreach dir,$(include_dirs.cdi),$(wildcard $(dir)/*.h)) --include_opts.cdi := $(foreach proj,cdi libfabric,$(addprefix -I,$(include_dirs.$(proj)))) -+include_opts.cdi := $(foreach proj,cdi,$(addprefix -I,$(include_dirs.$(proj)))) - depends.cdi := $(patsubst %.o,%.d,$(objs.cdi)) - - # the end goal of building the SDK library -@@ -186,24 +183,24 @@ headers.all := $(foreach dir,cdi test test_common test_min_tx test_min_rx test_u - # augment compiler flags - COMMON_COMPILER_FLAG_ADDITIONS := \ - $(include_opts.cdi) $(include_opts.test) \ -- $(EXTRA_COMPILER_FLAG_ADDITIONS) \ -- -Wall -Wextra -Werror -pthread -fPIC \ -+ -Wall -Wextra -pthread -fPIC \ - -D_LINUX -D_POSIX_C_SOURCE=200112L \ -- $(sanitize_opts) -+ $(sanitize_opts) \ -+ $(EXTRA_COMPILER_FLAG_ADDITIONS) - ifeq ($(config), debug) - COMMON_COMPILER_FLAG_ADDITIONS += -O0 -g -DDEBUG - else - COMMON_COMPILER_FLAG_ADDITIONS += -O3 -DNDEBUG - endif - --CFLAGS += $(COMMON_COMPILER_FLAG_ADDITIONS) --std=c99 --CXXFLAGS += $(COMMON_COMPILER_FLAG_ADDITIONS) --std=c++11 -+CFLAGS += $(CPPFLAGS) $(COMMON_COMPILER_FLAG_ADDITIONS) --std=c99 -+CXXFLAGS += $(CPPFLAGS) $(COMMON_COMPILER_FLAG_ADDITIONS) --std=c++11 - - # additional flags to pass to the linker to create cdi_test* programs - # The only libraries needed here are those that present new dependencies beyond what libcdisdk.so already requires. - # An rpath is specified so cdi_test can find libcdisdk.so.2 in the same directory as cdi_test or in a sibling directory - # named lib. --CDI_LDFLAGS = $(LDFLAGS) -L$(build_dir.lib) -lcdisdk -lfabric $(EXTRA_LD_LIBS) -lncurses -lm $(aws_sdk_library_flags) \ -+CDI_LDFLAGS = $(LDFLAGS) -L$(build_dir.lib) -lcdisdk -lfabric $(EXTRA_LD_LIBS) -lncurses -lm \ - -Wl,-rpath,\$$ORIGIN:\$$ORIGIN/../lib64:\$$ORIGIN/../lib - - # docs go into the build directory but are not specific to release/debug -@@ -284,7 +281,7 @@ vpath %.c $(foreach proj,cdi common test test_common test_minimal test_unit,$(sr - vpath %.cpp $(src_dir.cdi) - - # rule to create the various build output directories --$(foreach d,obj lib bin doc packages libfabric results image libaws,$(build_dir.$(d))) : -+$(foreach d,obj lib bin doc packages results image libaws,$(build_dir.$(d))) : - $(Q)mkdir -p $@ - - # Setup flags for libfabric depending on debug/release build target. -@@ -321,12 +318,10 @@ $(libfabric) : $(libfabric_config_h) | $(build_dir.lib) - # rule to create the SDK library file - .PHONY : libsdk - libsdk : $(libsdk) --$(libsdk) : $(libfabric_config_h) $(objs.cdi) $(libfabric) $(libaws) | $(build_dir.lib) -+$(libsdk) : $(objs.cdi) | $(build_dir.lib) - @echo "GCC version is" $(GCCVERSION) - $(Q)$(CC) -shared -o $@ -Wl,-z,defs,-soname=$(basename $(notdir $@)),--version-script,libcdisdk.vers \ -- $(objs.cdi) -L$(build_dir.lib) $(aws_sdk_library_flags) \ -- -lfabric -ldl -lrt $(EXTRA_CC_LIBS) -lnl-3 -lm $(EXTRA_LD_LIBS) -lpthread -lc \ -- $(ASAN_LIBS) -Wl,-rpath,\$$ORIGIN:\$$ORIGIN/../lib -+ $(objs.cdi) $(LDFLAGS) $(LIBS) - $(Q)ln -fs $@ $(basename $@) - $(Q)ln -fs $@ $(basename $(basename $@)) - -@@ -432,13 +427,12 @@ clean :: - $(Q)$(RM) -r $(top.build) - - cleanall :: clean -- $(Q)$(RM) -r $(top.libfabric)/build $(libfabric_config_h) - --$(depends.cdi) : $(libfabric_config_h) $(aws_h) -+$(depends.cdi) : $(aws_h) - - # include dependency rules from generated files; this is conditional so .d files are only created if needed. - ifneq ($(real_build_goals),) ---include $(foreach proj,cdi test test_min_tx test_min_rx test_unit,$(depends.$(proj))) -+-include $(foreach proj,$(real_build_goals),$(depends.$(proj))) - endif - - # Users can add their own rules to this makefile by creating a makefile in this directory called diff --git a/recipes/aws-cdi-sdk/all/test_package/CMakeLists.txt b/recipes/aws-cdi-sdk/all/test_package/CMakeLists.txt index d207864c9df26..2d8d5f7498d4e 100644 --- a/recipes/aws-cdi-sdk/all/test_package/CMakeLists.txt +++ b/recipes/aws-cdi-sdk/all/test_package/CMakeLists.txt @@ -1,10 +1,7 @@ -cmake_minimum_required(VERSION 3.1) +cmake_minimum_required(VERSION 3.15) project(test_package C) -include("${CMAKE_BINARY_DIR}/conanbuildinfo.cmake") -conan_basic_setup(TARGETS) - -find_package(aws-cdi-sdk REQUIRED) +find_package(aws-cdi-sdk REQUIRED CONFIG) add_executable(${PROJECT_NAME} test_package.c) target_link_libraries(${PROJECT_NAME} AWS::aws-cdi-sdk) diff --git a/recipes/aws-cdi-sdk/all/test_package/conanfile.py b/recipes/aws-cdi-sdk/all/test_package/conanfile.py index 49a3a66ea5bad..ef5d7042163ec 100644 --- a/recipes/aws-cdi-sdk/all/test_package/conanfile.py +++ b/recipes/aws-cdi-sdk/all/test_package/conanfile.py @@ -1,10 +1,19 @@ -from conans import ConanFile, CMake, tools +from conan import ConanFile +from conan.tools.build import can_run +from conan.tools.cmake import cmake_layout, CMake import os class TestPackageConan(ConanFile): - settings = "os", "compiler", "build_type", "arch" - generators = "cmake", "cmake_find_package_multi" + settings = "os", "arch", "compiler", "build_type" + generators = "CMakeDeps", "CMakeToolchain", "VirtualRunEnv" + test_type = "explicit" + + def requirements(self): + self.requires(self.tested_reference_str) + + def layout(self): + cmake_layout(self) def build(self): cmake = CMake(self) @@ -12,6 +21,6 @@ def build(self): cmake.build() def test(self): - if not tools.cross_building(self): - bin_path = os.path.join("bin", "test_package") - self.run(bin_path, run_environment=True) + if can_run(self): + bin_path = os.path.join(self.cpp.build.bindir, "test_package") + self.run(bin_path, env="conanrun") diff --git a/recipes/aws-cdi-sdk/all/test_v1_package/CMakeLists.txt b/recipes/aws-cdi-sdk/all/test_v1_package/CMakeLists.txt new file mode 100644 index 0000000000000..91630d79f4abb --- /dev/null +++ b/recipes/aws-cdi-sdk/all/test_v1_package/CMakeLists.txt @@ -0,0 +1,8 @@ +cmake_minimum_required(VERSION 3.15) +project(test_package) + +include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) +conan_basic_setup(TARGETS) + +add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../test_package/ + ${CMAKE_CURRENT_BINARY_DIR}/test_package/) diff --git a/recipes/aws-cdi-sdk/all/test_v1_package/conanfile.py b/recipes/aws-cdi-sdk/all/test_v1_package/conanfile.py new file mode 100644 index 0000000000000..49a3a66ea5bad --- /dev/null +++ b/recipes/aws-cdi-sdk/all/test_v1_package/conanfile.py @@ -0,0 +1,17 @@ +from conans import ConanFile, CMake, tools +import os + + +class TestPackageConan(ConanFile): + settings = "os", "compiler", "build_type", "arch" + generators = "cmake", "cmake_find_package_multi" + + def build(self): + cmake = CMake(self) + cmake.configure() + cmake.build() + + def test(self): + if not tools.cross_building(self): + bin_path = os.path.join("bin", "test_package") + self.run(bin_path, run_environment=True) diff --git a/recipes/aws-cdi-sdk/config.yml b/recipes/aws-cdi-sdk/config.yml index 1979b3114ab95..81f1d75f1c6cd 100644 --- a/recipes/aws-cdi-sdk/config.yml +++ b/recipes/aws-cdi-sdk/config.yml @@ -1,3 +1,5 @@ versions: + "2.4.1": + folder: all "2.2.0": folder: all From f4769533af8df9b1b07d4e6b17122f02ccf796ce Mon Sep 17 00:00:00 2001 From: Martin Valgur Date: Thu, 16 Nov 2023 16:12:24 +0200 Subject: [PATCH 2/8] aws-cdi-sdk: fix -fPIC handling --- recipes/aws-cdi-sdk/all/conanfile.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/recipes/aws-cdi-sdk/all/conanfile.py b/recipes/aws-cdi-sdk/all/conanfile.py index 61f7fca72555d..4528e4efc4fd3 100644 --- a/recipes/aws-cdi-sdk/all/conanfile.py +++ b/recipes/aws-cdi-sdk/all/conanfile.py @@ -31,7 +31,13 @@ class AwsCdiSdkConan(ConanFile): def export_sources(self): copy(self, "CMakeLists.txt", self.recipe_folder, os.path.join(self.export_sources_folder, "src")) + def config_options(self): + if self.settings.os == "Windows": + del self.options.fPIC + def configure(self): + if self.options.shared: + self.options.rm_safe("fPIC") self.options["aws-libfabric"].shared = True self.options["aws-sdk-cpp"].shared = True From b24c8cf27f6585ecb46faa94125c78338920b618 Mon Sep 17 00:00:00 2001 From: Martin Valgur Date: Tue, 21 Nov 2023 17:09:12 +0200 Subject: [PATCH 3/8] aws-cdi-sdk: fix compilation --- recipes/aws-cdi-sdk/all/CMakeLists.txt | 3 +-- recipes/aws-cdi-sdk/all/conanfile.py | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/recipes/aws-cdi-sdk/all/CMakeLists.txt b/recipes/aws-cdi-sdk/all/CMakeLists.txt index 414137d91e791..c6e4ef603d484 100644 --- a/recipes/aws-cdi-sdk/all/CMakeLists.txt +++ b/recipes/aws-cdi-sdk/all/CMakeLists.txt @@ -2,7 +2,6 @@ cmake_minimum_required(VERSION 3.15) project(cdisdk LANGUAGES C CXX) find_package(AWSSDK REQUIRED CONFIG) -add_library(aws-cpp-sdk-core ALIAS AWS::aws-sdk-cpp-core) add_subdirectory(aws-cpp-sdk-cdi) find_package(aws-libfabric REQUIRED CONFIG) @@ -35,7 +34,7 @@ if (NOT MSVC) "$<$:-O3;-DNDEBUG>" ) # https://github.com/aws/aws-cdi-sdk/blob/v2.4.1/Makefile#L376-L379 - target_link_options(cdisdk PRIVATE -z defs --version-script ${CMAKE_SOURCE_DIR}/libcdisdk.vers) + target_link_options(cdisdk PRIVATE -z defs -Wl,--version-script ${CMAKE_SOURCE_DIR}/libcdisdk.vers) endif() if (UNIX) target_link_libraries(cdisdk PRIVATE dl rt m) diff --git a/recipes/aws-cdi-sdk/all/conanfile.py b/recipes/aws-cdi-sdk/all/conanfile.py index 4528e4efc4fd3..ea2a96d1b076b 100644 --- a/recipes/aws-cdi-sdk/all/conanfile.py +++ b/recipes/aws-cdi-sdk/all/conanfile.py @@ -68,6 +68,7 @@ def generate(self): tc.variables["MAJOR_MINOR_VERSION"] = f"{major}.{minor}" tc.generate() deps = CMakeDeps(self) + deps.set_property("aws-sdk-cpp", "cmake_target_name", "aws-cpp-sdk-core") deps.generate() def build(self): From 23dfe2ef2f6b682b2f5b645a4abc0c64101efe49 Mon Sep 17 00:00:00 2001 From: Martin Valgur Date: Wed, 20 Dec 2023 09:52:20 +0200 Subject: [PATCH 4/8] aws-cdi-sdk: fix test_package segfault with static s2n --- recipes/aws-cdi-sdk/all/conanfile.py | 38 ++++++++++--------- .../all/test_package/test_package.c | 2 +- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/recipes/aws-cdi-sdk/all/conanfile.py b/recipes/aws-cdi-sdk/all/conanfile.py index ea2a96d1b076b..e540d6b1cdba8 100644 --- a/recipes/aws-cdi-sdk/all/conanfile.py +++ b/recipes/aws-cdi-sdk/all/conanfile.py @@ -2,7 +2,7 @@ from conan import ConanFile from conan.errors import ConanInvalidConfiguration -from conan.tools.build import check_min_cppstd +from conan.tools.build import check_min_cppstd, stdcpp_library from conan.tools.cmake import CMake, CMakeDeps, CMakeToolchain, cmake_layout from conan.tools.files import copy, get, rmdir @@ -40,6 +40,7 @@ def configure(self): self.options.rm_safe("fPIC") self.options["aws-libfabric"].shared = True self.options["aws-sdk-cpp"].shared = True + self.options["s2n"].shared = True def layout(self): cmake_layout(self, src_folder="src") @@ -87,19 +88,22 @@ def package_info(self): self.cpp_info.set_property("cmake_file_name", "aws-cdi-sdk") self.cpp_info.set_property("cmake_target_aliases", ["aws-cdi-sdk"]) - cppSdk = self.cpp_info.components["aws-cpp-sdk-cdi"] - cppSdk.set_property("cmake_target_name", "AWS::aws-cpp-sdk-cdi") - cppSdk.set_property("pkg_config_name", "aws-cpp-sdk-cdi") - cppSdk.libs = ["aws-cpp-sdk-cdi"] - cppSdk.requires = ["aws-sdk-cpp::monitoring", "aws-libfabric::aws-libfabric"] - - cSdk = self.cpp_info.components["cdisdk"] - cSdk.set_property("cmake_target_name", "AWS::aws-cdi-sdk") - cSdk.set_property("pkg_config_name", "aws-cdi-sdk") - cSdk.libs = ["cdisdk"] - cSdk.requires = ["aws-cpp-sdk-cdi"] + cpp_sdk = self.cpp_info.components["aws-cpp-sdk-cdi"] + cpp_sdk.set_property("cmake_target_name", "AWS::aws-cpp-sdk-cdi") + cpp_sdk.set_property("pkg_config_name", "aws-cpp-sdk-cdi") + cpp_sdk.libs = ["aws-cpp-sdk-cdi"] + cpp_sdk.requires = ["aws-sdk-cpp::monitoring", "aws-libfabric::aws-libfabric"] + + c_sdk = self.cpp_info.components["cdisdk"] + c_sdk.set_property("cmake_target_name", "AWS::aws-cdi-sdk") + c_sdk.set_property("pkg_config_name", "aws-cdi-sdk") + c_sdk.libs = ["cdisdk"] + c_sdk.requires = ["aws-cpp-sdk-cdi"] if self.settings.os in ["Linux", "FreeBSD"]: - cSdk.defines = ["_LINUX"] + c_sdk.defines = ["_LINUX"] + libcxx = stdcpp_library(self) + if libcxx: + c_sdk.system_libs.append(libcxx) # TODO: to remove in conan v2 once cmake_find_package_* generators removed # TODO: Remove the namespace on CMake targets @@ -107,7 +111,7 @@ def package_info(self): self.cpp_info.names["cmake_find_package_multi"] = "AWS" self.cpp_info.filenames["cmake_find_package"] = "aws-cdi-sdk" self.cpp_info.filenames["cmake_find_package_multi"] = "aws-cdi-sdk" - cppSdk.names["cmake_find_package"] = "aws-cpp-sdk-cdi" - cppSdk.names["cmake_find_package_multi"] = "aws-cpp-sdk-cdi" - cSdk.names["cmake_find_package"] = "aws-cdi-sdk" - cSdk.names["cmake_find_package_multi"] = "aws-cdi-sdk" + cpp_sdk.names["cmake_find_package"] = "aws-cpp-sdk-cdi" + cpp_sdk.names["cmake_find_package_multi"] = "aws-cpp-sdk-cdi" + c_sdk.names["cmake_find_package"] = "aws-cdi-sdk" + c_sdk.names["cmake_find_package_multi"] = "aws-cdi-sdk" diff --git a/recipes/aws-cdi-sdk/all/test_package/test_package.c b/recipes/aws-cdi-sdk/all/test_package/test_package.c index e6b8b0eada16b..65de7c4e52e67 100644 --- a/recipes/aws-cdi-sdk/all/test_package/test_package.c +++ b/recipes/aws-cdi-sdk/all/test_package/test_package.c @@ -5,7 +5,7 @@ #include int main () { - CdiLoggerInitialize(); // Intialize logger so we can use the CDI_LOG_THREAD() macro to generate console messages. + CdiLoggerInitialize(); // Initialize logger so we can use the CDI_LOG_THREAD() macro to generate console messages. CDI_LOG_THREAD(kLogInfo, "CDI SDK Version: %d.%d.%d\n", CDI_SDK_VERSION, CDI_SDK_MAJOR_VERSION, CDI_SDK_MINOR_VERSION); From 50bc62fe2993d7df783fe71be40c3c0d3ed9330f Mon Sep 17 00:00:00 2001 From: Martin Valgur Date: Sat, 23 Dec 2023 16:16:35 +0200 Subject: [PATCH 5/8] aws-cdi-sdk: macOS is not supported --- recipes/aws-cdi-sdk/all/conanfile.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/recipes/aws-cdi-sdk/all/conanfile.py b/recipes/aws-cdi-sdk/all/conanfile.py index e540d6b1cdba8..2538371878ba3 100644 --- a/recipes/aws-cdi-sdk/all/conanfile.py +++ b/recipes/aws-cdi-sdk/all/conanfile.py @@ -50,6 +50,10 @@ def requirements(self): self.requires("aws-sdk-cpp/1.9.234") def validate(self): + if self.settings.os not in ["Linux", "FreeBSD", "Windows"]: + # The code compiles either `os_linux.c` or `os_windows.c` depending on the OS, but `os_linux.c` is not compatible with macOS. + # https://github.com/aws/aws-cdi-sdk/tree/mainline/src/common/src + raise ConanInvalidConfiguration(f"{self.settings.os} is not supported") if not self.dependencies["aws-libfabric"].options.shared or not self.dependencies["aws-sdk-cpp"].options.shared: raise ConanInvalidConfiguration("Cannot build with static dependencies") if not self.dependencies["aws-sdk-cpp"].options.get_safe("monitoring"): From cf6f4343dd8f0af5a689b2ae5b93544de3fd3426 Mon Sep 17 00:00:00 2001 From: Martin Valgur Date: Tue, 1 Oct 2024 14:42:47 +0300 Subject: [PATCH 6/8] aws-cdi-sdk: bump aws-sdk-cpp version --- recipes/aws-cdi-sdk/all/conanfile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/recipes/aws-cdi-sdk/all/conanfile.py b/recipes/aws-cdi-sdk/all/conanfile.py index 2538371878ba3..fcbb9a48c7fef 100644 --- a/recipes/aws-cdi-sdk/all/conanfile.py +++ b/recipes/aws-cdi-sdk/all/conanfile.py @@ -47,7 +47,7 @@ def layout(self): def requirements(self): self.requires("aws-libfabric/1.9.1amzncdi1.0") - self.requires("aws-sdk-cpp/1.9.234") + self.requires("aws-sdk-cpp/1.11.352") def validate(self): if self.settings.os not in ["Linux", "FreeBSD", "Windows"]: From ee2576087ef06a903558864d49d1721f7bfd226c Mon Sep 17 00:00:00 2001 From: Martin Valgur Date: Wed, 13 Nov 2024 14:08:16 +0200 Subject: [PATCH 7/8] aws-cdi-sdk: drop test_v1_package --- .../all/test_v1_package/CMakeLists.txt | 8 -------- .../all/test_v1_package/conanfile.py | 17 ----------------- 2 files changed, 25 deletions(-) delete mode 100644 recipes/aws-cdi-sdk/all/test_v1_package/CMakeLists.txt delete mode 100644 recipes/aws-cdi-sdk/all/test_v1_package/conanfile.py diff --git a/recipes/aws-cdi-sdk/all/test_v1_package/CMakeLists.txt b/recipes/aws-cdi-sdk/all/test_v1_package/CMakeLists.txt deleted file mode 100644 index 91630d79f4abb..0000000000000 --- a/recipes/aws-cdi-sdk/all/test_v1_package/CMakeLists.txt +++ /dev/null @@ -1,8 +0,0 @@ -cmake_minimum_required(VERSION 3.15) -project(test_package) - -include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) -conan_basic_setup(TARGETS) - -add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../test_package/ - ${CMAKE_CURRENT_BINARY_DIR}/test_package/) diff --git a/recipes/aws-cdi-sdk/all/test_v1_package/conanfile.py b/recipes/aws-cdi-sdk/all/test_v1_package/conanfile.py deleted file mode 100644 index 49a3a66ea5bad..0000000000000 --- a/recipes/aws-cdi-sdk/all/test_v1_package/conanfile.py +++ /dev/null @@ -1,17 +0,0 @@ -from conans import ConanFile, CMake, tools -import os - - -class TestPackageConan(ConanFile): - settings = "os", "compiler", "build_type", "arch" - generators = "cmake", "cmake_find_package_multi" - - def build(self): - cmake = CMake(self) - cmake.configure() - cmake.build() - - def test(self): - if not tools.cross_building(self): - bin_path = os.path.join("bin", "test_package") - self.run(bin_path, run_environment=True) From 71f2e5907cb6805f715c742cd645caa31af96986 Mon Sep 17 00:00:00 2001 From: Martin Valgur Date: Wed, 13 Nov 2024 14:24:57 +0200 Subject: [PATCH 8/8] aws-cdi-sdk: remove Conan v1 backwards compatibility --- recipes/aws-cdi-sdk/all/conanfile.py | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/recipes/aws-cdi-sdk/all/conanfile.py b/recipes/aws-cdi-sdk/all/conanfile.py index fcbb9a48c7fef..8940ecfa11225 100644 --- a/recipes/aws-cdi-sdk/all/conanfile.py +++ b/recipes/aws-cdi-sdk/all/conanfile.py @@ -6,7 +6,7 @@ from conan.tools.cmake import CMake, CMakeDeps, CMakeToolchain, cmake_layout from conan.tools.files import copy, get, rmdir -required_conan_version = ">=1.53.0" +required_conan_version = ">=2.0.0" class AwsCdiSdkConan(ConanFile): @@ -58,8 +58,7 @@ def validate(self): raise ConanInvalidConfiguration("Cannot build with static dependencies") if not self.dependencies["aws-sdk-cpp"].options.get_safe("monitoring"): raise ConanInvalidConfiguration("This package requires the monitoring AWS SDK") - if self.settings.compiler.get_safe("cppstd"): - check_min_cppstd(self, 11) + check_min_cppstd(self, 11) def source(self): get(self, **self.conan_data["sources"][self.version], strip_root=True) @@ -108,14 +107,3 @@ def package_info(self): libcxx = stdcpp_library(self) if libcxx: c_sdk.system_libs.append(libcxx) - - # TODO: to remove in conan v2 once cmake_find_package_* generators removed - # TODO: Remove the namespace on CMake targets - self.cpp_info.names["cmake_find_package"] = "AWS" - self.cpp_info.names["cmake_find_package_multi"] = "AWS" - self.cpp_info.filenames["cmake_find_package"] = "aws-cdi-sdk" - self.cpp_info.filenames["cmake_find_package_multi"] = "aws-cdi-sdk" - cpp_sdk.names["cmake_find_package"] = "aws-cpp-sdk-cdi" - cpp_sdk.names["cmake_find_package_multi"] = "aws-cpp-sdk-cdi" - c_sdk.names["cmake_find_package"] = "aws-cdi-sdk" - c_sdk.names["cmake_find_package_multi"] = "aws-cdi-sdk"