agent/native/building/cmake/elastic_conan_installer.cmake (91 lines of code) (raw):

include(CMakeParseArguments) set(python "python3") set(python_pip "pip3") # Detect Alpine/MUSLC build if(EXISTS /etc/alpine-release) set(MUSL_BUILD true) endif() message(STATUS "Enabling python virtual environment") set(VENV_PATH ${CMAKE_BINARY_DIR}/python_venv) if(NOT EXISTS ${VENV_PATH}) execute_process( COMMAND ${python} -m venv ${VENV_PATH} COMMAND_ERROR_IS_FATAL ANY ) file(COPY ${CMAKE_SOURCE_DIR}/building/cmake/test_venv.py DESTINATION ${CMAKE_BINARY_DIR}/) set(_VENV_CREATED TRUE) endif() set(ENV{VIRTUAL_ENV} ${VENV_PATH}) set(ENV{PATH} $ENV{VIRTUAL_ENV}/bin:$ENV{PATH}) set(python "${VENV_PATH}/bin/python3") set(python_pip "${VENV_PATH}/bin/pip3") message(STATUS PATH="$ENV{PATH}") # Testing if venv is detected propely by python execute_process( COMMAND ${python} ${CMAKE_BINARY_DIR}/test_venv.py COMMAND_ERROR_IS_FATAL ANY ) set(_PRV_CONAN_PROFILE_OS ${CMAKE_SYSTEM_NAME}) if (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "aarch64") set(_PRV_CONAN_PROFILE_ARCH "arch=armv8") set(_PRV_CONAN_PROFILE_ARCH_BUILD "arch_build=armv8") elseif (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86_64") set(_PRV_CONAN_PROFILE_ARCH "arch=x86_64") set(_PRV_CONAN_PROFILE_ARCH_BUILD "arch_build=x86_64") else() message(FATAL_ERROR "CPU Architecure not supported ${CMAKE_SYSTEM_PROCESSOR}") endif() if (MUSL_BUILD) #this is workaround to force build from souce on musl - this will prevent from installing libc binaries set(_PRV_CONAN_PROFILE_OS_DISTRO "os.distro=Alpine") set(_PRV_COMPILER_LIBC_IMPLEMENTATION "compiler.libc=musl") elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Linux") set(_PRV_CONAN_PROFILE_OS_DISTRO "os.distro=Centos7") set(_PRV_COMPILER_LIBC_IMPLEMENTATION "compiler.libc=glibc") endif() if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux") message(STATUS "Linux ${_PRV_CONAN_PROFILE_OS_DISTRO}, ${_PRV_COMPILER_LIBC_IMPLEMENTATION}, ${_PRV_CONAN_PROFILE_ARCH_BUILD}") endif() # setting up paths used to configure compiler profile set(_PRV_CONAN_PROFILE_CC ${CMAKE_C_COMPILER}) set(_PRV_CONAN_PROFILE_CXX ${CMAKE_CXX_COMPILER}) # some recipes doesn't use profile compiler, it is a workaround if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") list(APPEND CMAKE_PROGRAM_PATH "$ENV{COMPILER_HOME_PATH}/bin/") set(ENV{PATH} $ENV{COMPILER_HOME_PATH}/bin:$ENV{PATH}) endif() # Prepare conan profile set(_PRV_COMPILER_NAME gcc) string(REPLACE "." ";" _PRV_COMPILER_VERSION_TOKENIZED ${CMAKE_CXX_COMPILER_VERSION}) list(GET _PRV_COMPILER_VERSION_TOKENIZED 0 _PRV_COMPILER_VERSION_MAJOR) list(GET _PRV_COMPILER_VERSION_TOKENIZED 1 _PRV_COMPILER_VERSION_MINOR) set(_PRV_COMPILER_VERSION_SHORT "${_PRV_COMPILER_VERSION_MAJOR}.${_PRV_COMPILER_VERSION_MINOR}") set(_CONAN_PROFILE "${CMAKE_BINARY_DIR}/conan_compiler") configure_file("${CMAKE_SOURCE_DIR}/building/conan/conan_profile.in" "${_CONAN_PROFILE}" @ONLY) if(_VENV_CREATED) # Installing conan and required dependencies execute_process( COMMAND ${python_pip} install -U pip COMMAND_ERROR_IS_FATAL ANY ) execute_process( COMMAND ${python_pip} install -U "pyyaml==3.11" COMMAND_ERROR_IS_FATAL ANY ) execute_process( COMMAND ${python_pip} install -U conan==1.62.0 COMMAND_ERROR_IS_FATAL ANY ) endif() message(STATUS "Installing conan configuration from ${CMAKE_SOURCE_DIR}/building/conan/settings.yml") execute_process( COMMAND conan config install ${CMAKE_SOURCE_DIR}/building/conan/settings.yml COMMAND_ERROR_IS_FATAL ANY ) message(STATUS "Conan installation done") include(conan) conan_check() include(elastic_conan_export) # attach Elastic conan remote and make it default conan_add_remote(NAME ElasticConan URL https://artifactory.elastic.dev/artifactory/api/conan/apm-agent-php-dev INDEX 0) conan_update_remote(NAME conancenter URL https://center.conan.io INDEX 1)