From 7be9039f5374fc282e4f449b7d57ae5017423656 Mon Sep 17 00:00:00 2001 From: Siarhei Fedartsou Date: Thu, 6 Oct 2022 14:13:12 +0200 Subject: [PATCH] Get rid of Mason (#6387) --- .github/workflows/osrm-backend.yml | 27 +--- .gitignore | 5 - CHANGELOG.md | 1 + cmake/mason.cmake | 215 ----------------------------- scripts/mason.sh | 3 - src/nodejs/CMakeLists.txt | 2 +- 6 files changed, 8 insertions(+), 245 deletions(-) delete mode 100644 cmake/mason.cmake delete mode 100755 scripts/mason.sh diff --git a/.github/workflows/osrm-backend.yml b/.github/workflows/osrm-backend.yml index 5232e31a849..6f85b511837 100644 --- a/.github/workflows/osrm-backend.yml +++ b/.github/workflows/osrm-backend.yml @@ -568,40 +568,25 @@ jobs: if [[ "${RUNNER_OS}" == "Linux" ]]; then echo "JOBS=$((`nproc` + 1))" >> $GITHUB_ENV - export MASON_OS=linux elif [[ "${RUNNER_OS}" == "macOS" ]]; then echo "JOBS=$((`sysctl -n hw.ncpu` + 1))" >> $GITHUB_ENV - sudo mdutil -i off / - export MASON_OS=osx fi - echo "MASON=${GITHUB_WORKSPACE}/scripts/mason.sh" >> $GITHUB_ENV - echo "CMAKE_URL=https://mason-binaries.s3.amazonaws.com/${MASON_OS}-x86_64/cmake/${CMAKE_VERSION}.tar.gz" >> $GITHUB_ENV - echo "CMAKE_DIR=mason_packages/${MASON_OS}-x86_64/cmake/${CMAKE_VERSION}" >> $GITHUB_ENV - name: Install dev dependencies run: | python3 -m pip install conan==1.51.3 - # CMake - mkdir -p ${CMAKE_DIR} - wget --quiet -O - ${CMAKE_URL} | tar --strip-components=1 -xz -C ${CMAKE_DIR} - echo "${CMAKE_DIR}/bin" >> $GITHUB_PATH - # ccache - ${MASON} install ccache ${CCACHE_VERSION} - echo "$(${MASON} prefix ccache ${CCACHE_VERSION})/bin" >> $GITHUB_PATH - + if [[ "${RUNNER_OS}" == "Linux" ]]; then + sudo apt-get update -y && sudo apt-get install ccache + elif [[ "${RUNNER_OS}" == "macOS" ]]; then + brew install ccache + fi + # clang if [[ "${CCOMPILER}" == "clang-6.0" ]]; then sudo apt-get update -y && sudo apt-get install clang++-6 fi - # we only enable lto for release builds - # and therefore don't need to us ld.gold or llvm tools for linking - # for debug builds - if [[ "${CCOMPILER}" == clang-* ]] && [[ ${BUILD_TYPE} == 'Release' ]]; then - ${MASON} install binutils 2.27 - echo "$(${MASON} prefix binutils 2.27)/bin" >> $GITHUB_PATH - fi # Linux dev packages if [ "${TARGET_ARCH}" != "i686" ] && [ "${ENABLE_CONAN}" != "ON" ]; then diff --git a/.gitignore b/.gitignore index a821eef523d..3b443d06d05 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,3 @@ -# mason # -######### -/.mason -/mason_packages - # pre compiled dependencies # ############################# osrm-deps diff --git a/CHANGELOG.md b/CHANGELOG.md index 878c40b423f..20809baaed0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,7 @@ - FIXED: Internal refactoring of identifier types used in data facade [#6044](https://github.com/Project-OSRM/osrm-backend/pull/6044) - CHANGED: Update docs to reflect recent build and dependency changes [#6383](https://github.com/Project-OSRM/osrm-backend/issues/6383) - Build: + - REMOVED: Get rid of Mason. [#6387](https://github.com/Project-OSRM/osrm-backend/pull/6387) - CHANGED: Use clang-format from CI base image. [#6391](https://github.com/Project-OSRM/osrm-backend/pull/6391) - ADDED: Build Node bindings on Windows. [#6334](https://github.com/Project-OSRM/osrm-backend/pull/6334) - ADDED: Configure cross-compilation for Apple Silicon. [#6360](https://github.com/Project-OSRM/osrm-backend/pull/6360) diff --git a/cmake/mason.cmake b/cmake/mason.cmake deleted file mode 100644 index d33c3439f7b..00000000000 --- a/cmake/mason.cmake +++ /dev/null @@ -1,215 +0,0 @@ -# Mason CMake - -include(CMakeParseArguments) - -function(mason_detect_platform) - # Determine platform - if(NOT MASON_PLATFORM) - # we call uname -s manually here since - # CMAKE_HOST_SYSTEM_NAME will not be defined before the project() call - execute_process( - COMMAND uname -s - OUTPUT_VARIABLE UNAME - OUTPUT_STRIP_TRAILING_WHITESPACE) - - if (UNAME STREQUAL "Darwin") - set(MASON_PLATFORM "osx" PARENT_SCOPE) - else() - set(MASON_PLATFORM "linux" PARENT_SCOPE) - endif() - endif() - - # Determine platform version string - if(NOT MASON_PLATFORM_VERSION) - execute_process( - COMMAND uname -m - OUTPUT_VARIABLE MASON_PLATFORM_VERSION - OUTPUT_STRIP_TRAILING_WHITESPACE) - set(MASON_PLATFORM_VERSION "${MASON_PLATFORM_VERSION}" PARENT_SCOPE) - endif() -endfunction() - -function(mason_use _PACKAGE) - if(NOT _PACKAGE) - message(FATAL_ERROR "[Mason] No package name given") - endif() - - cmake_parse_arguments("" "HEADER_ONLY" "VERSION" "" ${ARGN}) - - if(_UNPARSED_ARGUMENTS) - message(FATAL_ERROR "[Mason] mason_use() called with unrecognized arguments: ${_UNPARSED_ARGUMENTS}") - endif() - - if(NOT _VERSION) - message(FATAL_ERROR "[Mason] Specifying a version is required") - endif() - - if(MASON_PACKAGE_${_PACKAGE}_INVOCATION STREQUAL "${MASON_INVOCATION}") - # Check that the previous invocation of mason_use didn't select another version of this package - if(NOT MASON_PACKAGE_${_PACKAGE}_VERSION STREQUAL ${_VERSION}) - message(FATAL_ERROR "[Mason] Already using ${_PACKAGE} ${MASON_PACKAGE_${_PACKAGE}_VERSION}. Cannot select version ${_VERSION}.") - endif() - else() - if(_HEADER_ONLY) - set(_PLATFORM_ID "headers") - else() - set(_PLATFORM_ID "${MASON_PLATFORM}-${MASON_PLATFORM_VERSION}") - endif() - - set(_SLUG "${_PLATFORM_ID}/${_PACKAGE}/${_VERSION}") - set(_INSTALL_PATH "${MASON_PACKAGE_DIR}/${_SLUG}") - file(RELATIVE_PATH _INSTALL_PATH_RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "${_INSTALL_PATH}") - - if(NOT EXISTS "${_INSTALL_PATH}") - set(_CACHE_PATH "${MASON_PACKAGE_DIR}/.binaries/${_SLUG}.tar.gz") - if (NOT EXISTS "${_CACHE_PATH}") - # Download the package - set(_URL "${MASON_REPOSITORY}/${_SLUG}.tar.gz") - message("[Mason] Downloading package ${_URL}...") - - set(_FAILED) - set(_ERROR) - # Note: some CMake versions are compiled without SSL support - get_filename_component(_CACHE_DIR "${_CACHE_PATH}" DIRECTORY) - file(MAKE_DIRECTORY "${_CACHE_DIR}") - execute_process( - COMMAND curl --retry 3 -s -f -S -L "${_URL}" -o "${_CACHE_PATH}.tmp" - RESULT_VARIABLE _FAILED - ERROR_VARIABLE _ERROR) - if(_FAILED) - message(FATAL_ERROR "[Mason] Failed to download ${_URL}: ${_ERROR}") - else() - # We downloaded to a temporary file to prevent half-finished downloads - file(RENAME "${_CACHE_PATH}.tmp" "${_CACHE_PATH}") - endif() - endif() - - # Unpack the package - message("[Mason] Unpacking package to ${_INSTALL_PATH_RELATIVE}...") - file(MAKE_DIRECTORY "${_INSTALL_PATH}") - execute_process( - COMMAND ${CMAKE_COMMAND} -E tar xzf "${_CACHE_PATH}" - WORKING_DIRECTORY "${_INSTALL_PATH}") - endif() - - # Error out if there is no config file. - if(NOT EXISTS "${_INSTALL_PATH}/mason.ini") - message(FATAL_ERROR "[Mason] Could not find mason.ini for package ${_PACKAGE} ${_VERSION}") - endif() - - set(MASON_PACKAGE_${_PACKAGE}_PREFIX "${_INSTALL_PATH}" CACHE STRING "${_PACKAGE} ${_INSTALL_PATH}" FORCE) - mark_as_advanced(MASON_PACKAGE_${_PACKAGE}_PREFIX) - - # Load the configuration from the ini file - file(STRINGS "${_INSTALL_PATH}/mason.ini" _CONFIG_FILE) - foreach(_LINE IN LISTS _CONFIG_FILE) - string(REGEX MATCH "^([a-z_]+) *= *" _KEY "${_LINE}") - if (_KEY) - string(LENGTH "${_KEY}" _KEY_LENGTH) - string(SUBSTRING "${_LINE}" ${_KEY_LENGTH} -1 _VALUE) - string(REGEX REPLACE ";.*$" "" _VALUE "${_VALUE}") # Trim trailing commas - string(REPLACE "{prefix}" "${_INSTALL_PATH}" _VALUE "${_VALUE}") - string(STRIP "${_VALUE}" _VALUE) - string(REPLACE "=" "" _KEY "${_KEY}") - string(STRIP "${_KEY}" _KEY) - string(TOUPPER "${_KEY}" _KEY) - if(_KEY STREQUAL "INCLUDE_DIRS" OR _KEY STREQUAL "STATIC_LIBS" ) - separate_arguments(_VALUE) - endif() - set(MASON_PACKAGE_${_PACKAGE}_${_KEY} "${_VALUE}" CACHE STRING "${_PACKAGE} ${_KEY}" FORCE) - mark_as_advanced(MASON_PACKAGE_${_PACKAGE}_${_KEY}) - endif() - endforeach() - - # Compare version in the package to catch errors early on - if(NOT _VERSION STREQUAL MASON_PACKAGE_${_PACKAGE}_VERSION) - message(FATAL_ERROR "[Mason] Package at ${_INSTALL_PATH_RELATIVE} has version '${MASON_PACKAGE_${_PACKAGE}_VERSION}', but required '${_VERSION}'") - endif() - - if(NOT _PACKAGE STREQUAL MASON_PACKAGE_${_PACKAGE}_NAME) - message(FATAL_ERROR "[Mason] Package at ${_INSTALL_PATH_RELATIVE} has name '${MASON_PACKAGE_${_PACKAGE}_NAME}', but required '${_NAME}'") - endif() - - if(NOT _HEADER_ONLY) - if(NOT MASON_PLATFORM STREQUAL MASON_PACKAGE_${_PACKAGE}_PLATFORM) - message(FATAL_ERROR "[Mason] Package at ${_INSTALL_PATH_RELATIVE} has platform '${MASON_PACKAGE_${_PACKAGE}_PLATFORM}', but required '${MASON_PLATFORM}'") - endif() - - if(NOT MASON_PLATFORM_VERSION STREQUAL MASON_PACKAGE_${_PACKAGE}_PLATFORM_VERSION) - message(FATAL_ERROR "[Mason] Package at ${_INSTALL_PATH_RELATIVE} has platform version '${MASON_PACKAGE_${_PACKAGE}_PLATFORM_VERSION}', but required '${MASON_PLATFORM_VERSION}'") - endif() - endif() - - # Concatenate the static libs and libraries - set(_LIBRARIES) - list(APPEND _LIBRARIES ${MASON_PACKAGE_${_PACKAGE}_STATIC_LIBS} ${MASON_PACKAGE_${_PACKAGE}_LDFLAGS}) - set(MASON_PACKAGE_${_PACKAGE}_LIBRARIES "${_LIBRARIES}" CACHE STRING "${_PACKAGE} _LIBRARIES" FORCE) - mark_as_advanced(MASON_PACKAGE_${_PACKAGE}_LIBRARIES) - - if(NOT _HEADER_ONLY) - string(REGEX MATCHALL "(^| +)-L *([^ ]+)" MASON_PACKAGE_${_PACKAGE}_LIBRARY_DIRS "${MASON_PACKAGE_${_PACKAGE}_LDFLAGS}") - string(REGEX REPLACE "(^| +)-L *" "\\1" MASON_PACKAGE_${_PACKAGE}_LIBRARY_DIRS "${MASON_PACKAGE_${_PACKAGE}_LIBRARY_DIRS}") - set(MASON_PACKAGE_${_PACKAGE}_LIBRARY_DIRS "${MASON_PACKAGE_${_PACKAGE}_LIBRARY_DIRS}" CACHE STRING "${_PACKAGE} ${MASON_PACKAGE_${_PACKAGE}_LIBRARY_DIRS}" FORCE) - mark_as_advanced(MASON_PACKAGE_${_PACKAGE}_LIBRARY_DIRS) - endif() - - # Store invocation ID to prevent different versions of the same package in one invocation - set(MASON_PACKAGE_${_PACKAGE}_INVOCATION "${MASON_INVOCATION}" CACHE INTERNAL "${_PACKAGE} invocation ID" FORCE) - endif() -endfunction() - -macro(target_add_mason_package _TARGET _VISIBILITY _PACKAGE) - if (NOT MASON_PACKAGE_${_PACKAGE}_INVOCATION) - message(FATAL_ERROR "[Mason] Package ${_PACKAGE} has not been initialized yet") - endif() - - target_include_directories(${_TARGET} ${_VISIBILITY} "${MASON_PACKAGE_${_PACKAGE}_INCLUDE_DIRS}") - target_compile_definitions(${_TARGET} ${_VISIBILITY} "${MASON_PACKAGE_${_PACKAGE}_DEFINITIONS}") - target_compile_options(${_TARGET} ${_VISIBILITY} "${MASON_PACKAGE_${_PACKAGE}_OPTIONS}") - target_link_libraries(${_TARGET} ${_VISIBILITY} "${MASON_PACKAGE_${_PACKAGE}_LIBRARIES}") -endmacro() - -# Setup - -string(RANDOM LENGTH 16 MASON_INVOCATION) - -# Read environment variables if CMake is run in command mode -if (CMAKE_ARGC) - set(MASON_PLATFORM "$ENV{MASON_PLATFORM}") - set(MASON_PLATFORM_VERSION "$ENV{MASON_PLATFORM_VERSION}") - set(MASON_PACKAGE_DIR "$ENV{MASON_PACKAGE_DIR}") - set(MASON_REPOSITORY "$ENV{MASON_REPOSITORY}") -endif() - -# Directory where Mason packages are located; typically ends with mason_packages -if (NOT MASON_PACKAGE_DIR) - set(MASON_PACKAGE_DIR "${CMAKE_SOURCE_DIR}/mason_packages") -endif() - -# URL prefix of where packages are located. -if (NOT MASON_REPOSITORY) - set(MASON_REPOSITORY "https://mason-binaries.s3.amazonaws.com") -endif() - -mason_detect_platform() - -# Execute commands if CMake is run in command mode -if (CMAKE_ARGC) - # Collect remaining arguments for passing to mason_use - set(_MASON_ARGS) - if (${CMAKE_ARGC} LESS 5) - message(FATAL_ERROR "Usage: mason.sh [install|prefix] PACKAGE VERSION") - endif() - - if (${CMAKE_ARGV3} STREQUAL "install") - # Install the package - mason_use(${CMAKE_ARGV4} VERSION ${CMAKE_ARGV5}) - elseif (${CMAKE_ARGV3} STREQUAL "prefix") - set(PKG_PREFIX "${MASON_PACKAGE_DIR}/${MASON_PLATFORM}-${MASON_PLATFORM_VERSION}/${CMAKE_ARGV4}/${CMAKE_ARGV5}") - # CMake can't write to stdout with message() - execute_process(COMMAND ${CMAKE_COMMAND} -E echo "${PKG_PREFIX}") - else() - message(FATAL_ERROR "Usage: mason.sh [install|prefix] PACKAGE VERSION") - endif() - -endif() diff --git a/scripts/mason.sh b/scripts/mason.sh deleted file mode 100755 index 696ad26adbe..00000000000 --- a/scripts/mason.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash - -cmake -P cmake/mason.cmake "$@" diff --git a/src/nodejs/CMakeLists.txt b/src/nodejs/CMakeLists.txt index 30f4128ff98..7d93a09b691 100644 --- a/src/nodejs/CMakeLists.txt +++ b/src/nodejs/CMakeLists.txt @@ -34,7 +34,7 @@ foreach(binary ${OSRM_BINARIES}) list(APPEND ARTIFACTS "${BINDING_DIR}/${binary}") endforeach(binary) -# For mason-enabled builds we copy over tbb's shared objects for packaging. +# For Conan-enabled builds we copy over tbb's shared objects for packaging. # TODO: consider using statically linked tbb library (for node_osrm only!) if (ENABLE_CONAN) foreach(libpath ${CONAN_LIB_DIRS_ONETBB})