diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index abe6c34..e4ba0d1 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -30,7 +30,7 @@ jobs: CMAKE_ARGS: -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang -DCMAKE_OSX_DEPLOYMENT_TARGET=10.9 - os: windows-latest CMAKE_ARGS: -G"Visual Studio 17 2022" -A"x64" - - os: ubuntu-22.04-arm + - os: ubuntu-24.04-arm CMAKE_ARGS: "" steps: @@ -44,13 +44,13 @@ jobs: path: contrib - name: Setup cmake - if: matrix.os != 'ubuntu-22.04-arm' + if: ${{ !endsWith(matrix.os, '-arm') }} uses: jwlawson/actions-setup-cmake@v2 with: cmake-version: '3.29.x' - name: Install CMake (Ubuntu arm64) - if: matrix.os == 'ubuntu-22.04-arm' + if: ${{ endsWith(matrix.os, '-arm') }} run: | sudo apt-get update sudo apt-get install -y cmake @@ -59,12 +59,12 @@ jobs: shell: bash run: | if [ "$RUNNER_OS" == "Linux" ]; then - sudo apt-get -y install make autoconf automake tar patch libtool gcc + sudo apt-get -y install make autoconf automake tar patch libtool gcc libthrift-dev elif [ "$RUNNER_OS" == "Windows" ]; then # choco install important_windows_software echo "Nothing to install" elif [ "$RUNNER_OS" == "macOS" ]; then - brew install autoconf automake libtool + brew install autoconf automake libtool thrift else echo "$RUNNER_OS not supported" exit 1 @@ -85,11 +85,25 @@ jobs: arch: x64 - name: Build contrib + shell: bash run: | - mkdir "${{ github.workspace }}/contrib-build" - cd "${{ github.workspace }}/contrib-build" - cmake ${{ matrix.CMAKE_ARGS }} -DBUILD_TYPE=ALL -DNUMBER_OF_JOBS=4 ${{ github.workspace }}/contrib - cmake ${{ matrix.CMAKE_ARGS }} -DBUILD_TYPE=OPENMP -DNUMBER_OF_JOBS=4 ${{ github.workspace }}/contrib + if [ "$RUNNER_OS" == "Windows" ]; then + NPROC=$NUMBER_OF_PROCESSORS + WORKSPACE="${GITHUB_WORKSPACE//\\//}" + elif [ "$RUNNER_OS" == "macOS" ]; then + NPROC=$(sysctl -n hw.ncpu) + WORKSPACE="$GITHUB_WORKSPACE" + else + NPROC=$(nproc) + WORKSPACE="$GITHUB_WORKSPACE" + fi + export CMAKE_BUILD_PARALLEL_LEVEL=${NPROC:-4} + mkdir "$WORKSPACE/contrib-build" + cd "$WORKSPACE/contrib-build" + cmake ${{ matrix.CMAKE_ARGS }} -DBUILD_TYPE=ALL -DNUMBER_OF_JOBS=$CMAKE_BUILD_PARALLEL_LEVEL "$WORKSPACE/contrib" + mkdir -p "$WORKSPACE/contrib-build-openmp" + cd "$WORKSPACE/contrib-build-openmp" + cmake ${{ matrix.CMAKE_ARGS }} -DBUILD_TYPE=OPENMP -DNUMBER_OF_JOBS=$CMAKE_BUILD_PARALLEL_LEVEL "$WORKSPACE/contrib" - name: Configure Git for Tagging if: github.event_name == 'workflow_dispatch' diff --git a/CMakeLists.txt b/CMakeLists.txt index c26f9f1..d3c7b4d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -91,8 +91,8 @@ ## - however: exec_process seems to handle our arguments incorrectly (at least on Windows). Check functionality before you commit! # Determine what to build (all or single library) -set( BUILD_TYPE LIST CACHE STRING "Can be used to restrict building to a single library: ALL,LIBSVM,XERCESC,BOOST,COINOR,BZIP2,ZLIB,GLPK,KISSFFT,OPENMP") -set( VALID_BUILD_TYPES "ALL" "LIBSVM" "XERCESC" "BOOST" "COINOR" "BZIP2" "ZLIB" "GLPK" "EIGEN" "KISSFFT" "HDF5" "OPENMP") +set( BUILD_TYPE LIST CACHE STRING "Can be used to restrict building to a single library: ALL,LIBSVM,XERCESC,BOOST,COINOR,BZIP2,ZLIB,GLPK,KISSFFT,OPENMP,ARROW") +set( VALID_BUILD_TYPES "ALL" "LIBSVM" "XERCESC" "BOOST" "COINOR" "BZIP2" "ZLIB" "GLPK" "EIGEN" "KISSFFT" "HDF5" "OPENMP" "ARROW") # check build type if (BUILD_TYPE STREQUAL "HELP" OR BUILD_TYPE STREQUAL "LIST") @@ -187,7 +187,7 @@ set (PATCH_DIR "${PROJECT_SOURCE_DIR}/patches/" CACHE STRING "Directory containi ## Warning: ensure these are all upper-case names! set(BZIP2_DIR ${CONTRIB_BIN_SOURCE_DIR}/bzip2-1.0.5) set(ZLIB_DIR ${CONTRIB_BIN_SOURCE_DIR}/zlib-1.3.1) -set(BOOST_DIR ${CONTRIB_BIN_SOURCE_DIR}/boost_1_78_0) +set(BOOST_DIR ${CONTRIB_BIN_SOURCE_DIR}/boost-1.81.0) set(XERCES_DIR ${CONTRIB_BIN_SOURCE_DIR}/Xerces-C_3_2_0) set(LIBSVM_DIR ${CONTRIB_BIN_SOURCE_DIR}/libsvm-3.12) set(GLPK_DIR ${CONTRIB_BIN_SOURCE_DIR}/glpk-4.46) @@ -196,64 +196,70 @@ set(EIGEN_DIR ${CONTRIB_BIN_SOURCE_DIR}/eigen-3.4.0) set(KISSFFT_DIR ${CONTRIB_BIN_SOURCE_DIR}/kissfft) set(HDF5_DIR ${CONTRIB_BIN_SOURCE_DIR}/hdfsrc) set(OPENMP_DIR ${CONTRIB_BIN_SOURCE_DIR}/openmp-12.0.1.src) +set(ARROW_DIR ${CONTRIB_BIN_SOURCE_DIR}/arrow-apache-arrow-22.0.0/cpp) ## source(archive) paths ## PLEASE upload all source archives to -## https://abibuilder.cs.uni-tuebingen.de/archive/openms/contrib/source_packages/ -## and provide the necessary information below +## https://github.com/OpenMS/contrib-sources/ +## and provide the necessary information below ## ARCHIVE_ the name of the archive as it was uploaded ## ARCHIVE__TAR the name of the tar in the tar.gz -## ARCHIVE__SHA1 the sha1 of the file uploaded to sourceforge +## ARCHIVE__SHA256 the sha256 of the file uploaded ## e.g. ## set(ARCHIVE_ZLIB zlib.tar.gz) ## set(ARCHIVE_ZLIB_TAR zlib.tar) -## set(ARCHIVE_ZLIB_SHA1 "8e8b93fa5eb80df1afe5422309dca42964562d7e") +## set(ARCHIVE_ZLIB_SHA256 "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855") ## NOTE: for local development you can simply place the *.tar.gz in the binary -## directory to prevent the download and sha1 verification +## directory to prevent the download and sha256 verification +## LIBRARIES: BZIP2, ZLIB, BOOST, XERCES, LIBSVM, GLPK, COINOR, EIGEN, KISSFFT, HDF5, OPENMP, ARROW set(ARCHIVE_BZIP2 bzip2-1.0.5.tar.gz) set(ARCHIVE_BZIP2_TAR bzip2-1.0.5.tar) -set(ARCHIVE_BZIP2_SHA1 "8b02713ea0c8eb501cc8bdac4432d7f29700f767") +set(ARCHIVE_BZIP2_SHA256 "f7bf5368309d76e5daf3a89d4d1bea688dac7780742e7a0ae1af19be9316fe22") set(ARCHIVE_ZLIB zlib-1.3.1.tar.gz) set(ARCHIVE_ZLIB_TAR zlib-1.3.1.tar) -set(ARCHIVE_ZLIB_SHA1 "f535367b1a11e2f9ac3bec723fb007fbc0d189e5") +set(ARCHIVE_ZLIB_SHA256 "9a93b2b7dfdac77ceba5a558a580e74667dd6fede4585b91eefb60f03b72df23") -set(ARCHIVE_BOOST boost_1_78_0.tar.gz) -set(ARCHIVE_BOOST_TAR boost_1_78_0.tar) -set(ARCHIVE_BOOST_SHA1 "ff717ea23af2900e0ad3cae616b3e4ae43e68ad7") +set(ARCHIVE_BOOST boost-1.81.0.tar.gz) +set(ARCHIVE_BOOST_TAR boost-1.81.0.tar) +set(ARCHIVE_BOOST_SHA256 "121da556b718fd7bd700b5f2e734f8004f1cfa78b7d30145471c526ba75a151c") set(ARCHIVE_XERCES Xerces-C_3_2_0.tar.gz) set(ARCHIVE_XERCES_TAR Xerces-C_3_2_0.tar) -set(ARCHIVE_XERCES_SHA1 "da64ed4065694a88378cad340c8382d15a614837") +set(ARCHIVE_XERCES_SHA256 "68cca38aa0db168fa8ccce1f470a89d91104c4586e2635e0cd6602baf55e4eb8") set(ARCHIVE_LIBSVM libsvm-3.12.tar.gz) set(ARCHIVE_LIBSVM_TAR libsvm-3.12.tar) -set(ARCHIVE_LIBSVM_SHA1 "6ee77eb3d89af07fe48058dba0dcc24c85020b85") +set(ARCHIVE_LIBSVM_SHA256 "9dcd7a301665d2cbd8c109bba0e8cc2d47b5cc2a9c46aeb359f2dab67be69f74") set(ARCHIVE_GLPK glpk-4.46.tar.gz) set(ARCHIVE_GLPK_TAR glpk-4.46.tar) -set(ARCHIVE_GLPK_SHA1 "73d589452dc1d8d6a784b3f86f4268cae37420d7") +set(ARCHIVE_GLPK_SHA256 "fbbe438262f06813850837afd0cd55ed66f17f2004e2ce4f0078754f089e3242") set(ARCHIVE_COINOR CoinMP-1.8.3-vs22.tar.gz) set(ARCHIVE_COINOR_TAR CoinMP-1.8.3-vs22.tar) -set(ARCHIVE_COINOR_SHA1 "252aabfa824a2656e7abbc14278a61e02fe63e48") +set(ARCHIVE_COINOR_SHA256 "75eefc0b0e06dc11a1e5004222f69766366c1e08d3b739f25f53c756ae28a309") set(ARCHIVE_EIGEN eigen-3.4.0.tar.gz) set(ARCHIVE_EIGEN_TAR eigen-3.4.0.tar) -set(ARCHIVE_EIGEN_SHA1 "d222db69a9e87d9006608e029d1039039f360b52") +set(ARCHIVE_EIGEN_SHA256 "8586084f71f9bde545ee7fa6d00288b264a2b7ac3607b974e54d13e7162c1c72") set(ARCHIVE_KISSFFT kissfft-130.tar.gz) set(ARCHIVE_KISSFFT_TAR kissfft-130.tar) -set(ARCHIVE_KISSFFT_SHA1 "14ee3bd4a6480dc7fbec9a6d3a16d5d9fbbfc0fb") +set(ARCHIVE_KISSFFT_SHA256 "d846005b3a4b45202f3b288b2d6b5b1df544526ae6aaffe8707770bd09093064") set(ARCHIVE_HDF5 hdf5-1_14_3.tar.gz) set(ARCHIVE_HDF5_TAR hdf5-1_14_3.tar) -set(ARCHIVE_HDF5_SHA1 "0e464802c2f9185f8b8db6e04149ca1d3eaf27c5") +set(ARCHIVE_HDF5_SHA256 "126b800e9b87f65e7e7ffa58ee006607bab03a8e11e5209ea3d5c0c331321d43") set(ARCHIVE_OPENMP openmp-12.0.1.src.tar.xz) -set(ARCHIVE_OPENMP_tar openmp-12.0.1.src.tar) -set(ARCHIVE_OPENMP_SHA1 "7c051f6050ff23763b253a757927774b5eeaf644") +set(ARCHIVE_OPENMP_TAR openmp-12.0.1.src.tar) +set(ARCHIVE_OPENMP_SHA256 "60fe79440eaa9ebf583a6ea7f81501310388c02754dbe7dc210776014d06b091") + +set(ARCHIVE_ARROW arrow-apache-arrow-22.0.0.tar.gz ) +set(ARCHIVE_ARROW_TAR arrow-apache-arrow-22.0.0.tar ) +set(ARCHIVE_ARROW_SHA256 "8a95e6c7b9bec2bc0058feb73efe38ad6cfd49a0c7094db29b37ecaa8ab16051") ## necessary for clean up .. change if install process of library changes set(INCLUDE_DIR_BOOST ${CONTRIB_BIN_INCLUDE_DIR}/boost) @@ -263,6 +269,7 @@ set(INCLUDE_DIR_COINOR ${CONTRIB_BIN_INCLUDE_DIR}/coin) set(INCLUDE_DIR_EIGEN ${CONTRIB_BIN_INCLUDE_DIR}/eigen3) set(INCLUDE_DIR_KISSFFT ${CONTRIB_BIN_INCLUDE_DIR}/kissfft) set(INCLUDE_DIR_OPENMP ${CONTRIB_BIN_INCLUDE_DIR}/openmp.src) +set(INCLUDE_DIR_ARROW ${CONTRIB_BIN_INCLUDE_DIR}/arrow) ## hack for simple libs that do not have include directories set(INCLUDE_FILES_LIBSVM ${CONTRIB_BIN_INCLUDE_DIR}/svm.h) @@ -476,6 +483,7 @@ include ("${CMAKE_SOURCE_DIR}/libraries.cmake/eigen.cmake") include ("${CMAKE_SOURCE_DIR}/libraries.cmake/kissfft.cmake") include ("${CMAKE_SOURCE_DIR}/libraries.cmake/hdf5.cmake") include ("${CMAKE_SOURCE_DIR}/libraries.cmake/openmp.cmake") +include ("${CMAKE_SOURCE_DIR}/libraries.cmake/arrow.cmake") ## build mac os x specific C/C++ flags set( OPENMS_CONTRIB_MACOSX_MIXED_MODE 0 CACHE INTERNAL "building multiple architectures on MacOSX" FORCE) @@ -500,12 +508,6 @@ endforeach() set( FORCE_REBUILD OFF CACHE BOOL "All installation and build traces of the contrib packages will be removed before building.") message(STATUS "FORCE_REBUILD: ${FORCE_REBUILD}") -set( NUMBER_OF_JOBS 2 CACHE STRING "Number of jobs executed in parallel during the build process if the build system supports multi-job builds (e.g., make, bjam)") -if("${NUMBER_OF_JOBS}" STREQUAL "") - set( NUMBER_OF_JOBS 1 ) -endif("${NUMBER_OF_JOBS}" STREQUAL "") -message(STATUS "NUMBER_OF_JOBS: ${NUMBER_OF_JOBS} (maximal number of concurrent compile jobs)") - ## define building of shared or unshared versions of the contrib libraries set( BUILD_SHARED_LIBRARIES Off CACHE BOOL "Builds all contrib libraries as shared libraries.") @@ -614,6 +616,15 @@ if ("OPENMP" IN_LIST BUILD_TYPE) OPENMS_COPY_LIBS("OPENMP") endif() +################################################## +### ARROW ### +################################################## +if (BUILD_TYPE STREQUAL "ALL" OR "ARROW" IN_LIST BUILD_TYPE) + OPENMS_CLEAN_LIB("ARROW") + OPENMS_CONTRIB_BUILD_ARROW() + OPENMS_COPY_LIBS("ARROW") +endif() + ## finally copy README.txt to project-binary directory to mark process complete configure_file("${PROJECT_SOURCE_DIR}/README.md" "${PROJECT_BINARY_DIR}/README_contrib.txt" COPYONLY) diff --git a/README.md b/README.md index 27938d3..d96e5dd 100755 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ Please note that an internet connection is required to build the contrib since the actual source packages are only downloaded when built. -You can find the sources on [(https://abibuilder.cs.uni-tuebingen.de/archive/openms/contrib)](https://github.com/OpenMS/contrib-sources). +You can find the sources on [https://github.com/OpenMS/contrib-sources](https://github.com/OpenMS/contrib-sources). Build ============ diff --git a/dockerfiles/pyopenms/manylinux/ARM64_Dockerfile b/dockerfiles/pyopenms/manylinux/ARM64_Dockerfile index 266b374..d6bd9b3 100644 --- a/dockerfiles/pyopenms/manylinux/ARM64_Dockerfile +++ b/dockerfiles/pyopenms/manylinux/ARM64_Dockerfile @@ -17,7 +17,7 @@ RUN mkdir contrib-build RUN ls -l WORKDIR /contrib-build RUN ls -l -RUN cmake -DBUILD_TYPE=ALL ../contrib && rm -rf archives src +RUN CMAKE_BUILD_PARALLEL_LEVEL=$(nproc) cmake -DBUILD_TYPE=ALL /contrib && rm -rf archives src WORKDIR / diff --git a/dockerfiles/pyopenms/manylinux/Dockerfile b/dockerfiles/pyopenms/manylinux/Dockerfile index 1640c23..3100bd9 100644 --- a/dockerfiles/pyopenms/manylinux/Dockerfile +++ b/dockerfiles/pyopenms/manylinux/Dockerfile @@ -17,7 +17,7 @@ RUN mkdir contrib-build RUN ls -l WORKDIR /contrib-build RUN ls -l -RUN cmake -DBUILD_TYPE=ALL ../contrib && rm -rf archives src +RUN CMAKE_BUILD_PARALLEL_LEVEL=$(nproc) cmake -DBUILD_TYPE=ALL /contrib && rm -rf archives src WORKDIR / diff --git a/libraries.cmake/arrow.cmake b/libraries.cmake/arrow.cmake new file mode 100644 index 0000000..5f1ac8e --- /dev/null +++ b/libraries.cmake/arrow.cmake @@ -0,0 +1,157 @@ +################################################## +### Arrow ### +################################################## + +MACRO( OPENMS_CONTRIB_BUILD_ARROW ) +OPENMS_LOGHEADER_LIBRARY("arrow") +#extract: (takes very long.. so skip if possible) +if(MSVC) + set(ZIP_ARGS "x -y -osrc") +else() + set(ZIP_ARGS "xzf") +endif() +OPENMS_SMARTEXTRACT(ZIP_ARGS ARCHIVE_ARROW "ARROW" "README") + +## build the obj/lib +if (MSVC) + message(STATUS "Generating arrow build system .. ") + execute_process(COMMAND ${CMAKE_COMMAND} + -D ARROW_BUILD_SHARED=${BUILD_SHARED_LIBRARIES} + -D CMAKE_INSTALL_BINDIR=${PROJECT_BINARY_DIR}/lib + -G "${CMAKE_GENERATOR}" + ${ARCHITECTURE_OPTION_CMAKE} + -D CMAKE_INSTALL_PREFIX=${PROJECT_BINARY_DIR} + -D CMAKE_PREFIX_PATH=${PROJECT_BINARY_DIR} + -D BOOST_ROOT=${PROJECT_BINARY_DIR} + -D Boost_DIR=${PROJECT_BINARY_DIR} + -D ARROW_CSV=ON + -D ARROW_PARQUET=ON + -D ARROW_WITH_ZLIB=ON + -D ARROW_WITH_BZIP2=ON + -D ARROW_WITH_ZSTD=ON + . + WORKING_DIRECTORY ${ARROW_DIR} + OUTPUT_VARIABLE ARROW_CMAKE_OUT + ERROR_VARIABLE ARROW_CMAKE_ERR + RESULT_VARIABLE ARROW_CMAKE_SUCCESS) + + # output to logfile + file(APPEND ${LOGFILE} ${ARROW_CMAKE_OUT}) + file(APPEND ${LOGFILE} ${ARROW_CMAKE_ERR}) + + if(NOT ARROW_CMAKE_SUCCESS EQUAL 0) + message(FATAL_ERROR "Generating arrow build system .. failed") + else() + message(STATUS "Generating arrow build system .. done") + endif() + + message(STATUS "Building arrow lib (Debug) .. ") + execute_process(COMMAND ${CMAKE_COMMAND} --build ${ARROW_DIR} --target INSTALL --config Debug + WORKING_DIRECTORY ${ARROW_DIR} + OUTPUT_VARIABLE ARROW_BUILD_OUT + ERROR_VARIABLE ARROW_BUILD_ERR + RESULT_VARIABLE ARROW_BUILD_SUCCESS) + + # output to logfile + file(APPEND ${LOGFILE} ${ARROW_BUILD_OUT}) + file(APPEND ${LOGFILE} ${ARROW_BUILD_ERR}) + + if(NOT ARROW_BUILD_SUCCESS EQUAL 0) + message(FATAL_ERROR "Building arrow lib (Debug) .. failed") + else() + message(STATUS "Building arrow lib (Debug) .. done") + endif() + + # rebuild as release + message(STATUS "Building arrow lib (Release) .. ") + execute_process(COMMAND ${CMAKE_COMMAND} --build ${ARROW_DIR} --target INSTALL --config Release + WORKING_DIRECTORY ${ARROW_DIR} + OUTPUT_VARIABLE ARROW_BUILD_OUT + ERROR_VARIABLE ARROW_BUILD_ERR + RESULT_VARIABLE ARROW_BUILD_SUCCESS) + # output to logfile + file(APPEND ${LOGFILE} ${ARROW_BUILD_OUT}) + file(APPEND ${LOGFILE} ${ARROW_BUILD_ERR}) + + if(NOT ARROW_BUILD_SUCCESS EQUAL 0) + message(FATAL_ERROR "Building arrow lib (Release) .. failed") + else() + message(STATUS "Building arrow lib (Release) .. done") + endif() + +else() ## Linux/MacOS + + # Build list of platform-specific CMake args + set(_ARROW_CMAKE_ARGS) + if(APPLE) + list(APPEND _ARROW_CMAKE_ARGS + "-DCMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}" + "-DCMAKE_OSX_SYSROOT=${CMAKE_OSX_SYSROOT}" + "-DCMAKE_MACOSX_RPATH=TRUE" + ) + endif() + + # CFLAGS for arrow compiler + set(ARROW_CFLAGS "-Wall -O3 -fPIC") + set(ARROW_CXXFLAGS "-Wall -O3 -fPIC -I${PROJECT_BINARY_DIR}/include") + + message(STATUS "Generating arrow build system .. ") + execute_process(COMMAND ${CMAKE_COMMAND} + ${_ARROW_CMAKE_ARGS} + -G "${CMAKE_GENERATOR}" + "-DCMAKE_BUILD_TYPE=Release" + "-DCMAKE_INSTALL_PREFIX=${PROJECT_BINARY_DIR}" + "-DCMAKE_PREFIX_PATH=${PROJECT_BINARY_DIR}" + "-DCMAKE_C_FLAGS=${ARROW_CFLAGS}" + "-DCMAKE_CXX_FLAGS=${ARROW_CXXFLAGS}" + "-DBOOST_ROOT=${PROJECT_BINARY_DIR}" + "-DBoost_DIR=${PROJECT_BINARY_DIR}" + "-DARROW_CSV=ON" + "-DARROW_PARQUET=ON" + "-DARROW_WITH_ZLIB=ON" + "-DARROW_WITH_BZIP2=ON" + "-DARROW_WITH_ZSTD=ON" + . + WORKING_DIRECTORY ${ARROW_DIR} + OUTPUT_VARIABLE ARROW_CMAKE_OUT + ERROR_VARIABLE ARROW_CMAKE_ERR + RESULT_VARIABLE ARROW_CMAKE_SUCCESS) + + # output to logfile + file(APPEND ${LOGFILE} ${ARROW_CMAKE_OUT}) + file(APPEND ${LOGFILE} ${ARROW_CMAKE_ERR}) + + if(NOT ARROW_CMAKE_SUCCESS EQUAL 0) + message(STATUS "Generating arrow build system .. failed") + message(STATUS "Output: ${ARROW_CMAKE_OUT}") + message(STATUS "Error: ${ARROW_CMAKE_ERR}") + message(FATAL_ERROR "Arrow configuration failed. Check the log file for details: ${LOGFILE}") + else() + message(STATUS "Generating arrow build system .. done") + endif() + + # rebuild as release + message(STATUS "Building arrow lib (Release) .. ") + execute_process(COMMAND ${CMAKE_COMMAND} + --build ${ARROW_DIR} + --target install + WORKING_DIRECTORY ${ARROW_DIR} + OUTPUT_VARIABLE ARROW_BUILD_OUT + ERROR_VARIABLE ARROW_BUILD_ERR + RESULT_VARIABLE ARROW_BUILD_SUCCESS) + + # output to logfile + file(APPEND ${LOGFILE} ${ARROW_BUILD_OUT}) + file(APPEND ${LOGFILE} ${ARROW_BUILD_ERR}) + + if(NOT ARROW_BUILD_SUCCESS EQUAL 0) + message(STATUS "Output: ${ARROW_BUILD_OUT}") + message(STATUS "Error: ${ARROW_BUILD_ERR}") + message(FATAL_ERROR "Building arrow lib (Release) .. failed") + else() + message(STATUS "Building arrow lib (Release) .. done") + endif() + +endif() + +ENDMACRO( OPENMS_CONTRIB_BUILD_ARROW ) diff --git a/libraries.cmake/boost.cmake b/libraries.cmake/boost.cmake index 35ef287..cba8840 100644 --- a/libraries.cmake/boost.cmake +++ b/libraries.cmake/boost.cmake @@ -17,6 +17,13 @@ MACRO( OPENMS_CONTRIB_BUILD_BOOST) set(ZIP_ARGS "xzf") endif() OPENMS_SMARTEXTRACT(ZIP_ARGS ARCHIVE_BOOST "BOOST" "index.htm") + + # Determine number of parallel jobs (fallback to 2 if not set) + if(DEFINED ENV{CMAKE_BUILD_PARALLEL_LEVEL} AND NOT "$ENV{CMAKE_BUILD_PARALLEL_LEVEL}" STREQUAL "") + set(_BOOST_PARALLEL_JOBS $ENV{CMAKE_BUILD_PARALLEL_LEVEL}) + else() + set(_BOOST_PARALLEL_JOBS 2) + endif() if(MSVC) ## build boost library for windows @@ -50,8 +57,8 @@ MACRO( OPENMS_CONTRIB_BUILD_BOOST) endif() set(BOOST_CMD_ARGS "${BOOST_ARG}" + "-j" "${_BOOST_PARALLEL_JOBS}" "install" - "-j${NUMBER_OF_JOBS}" "--prefix=${PROJECT_BINARY_DIR}" "--layout=tagged" # create libnames without vcXXX in filename; include dir is /include/boost (as opposed to "versioned" where /include/boost-1.52/boost plus ...vc110.lib "--with-math" @@ -174,13 +181,14 @@ MACRO( OPENMS_CONTRIB_BUILD_BOOST) if (BOOST_DEBUG) set(BOOST_DEBUG_FLAGS "--debug-configuration -d+2") endif() + # boost cmd (use b2 since sometimes the copying/symlinking from b2 to bjam fails) - set (BOOST_CMD "./b2 ${BOOST_DEBUG_FLAGS} ${BOOST_ARCHITECTURE} toolset=${_boost_toolchain} -j ${NUMBER_OF_JOBS} --disable-icu link=${BOOST_BUILD_TYPE} cxxflags=-fPIC ${BOOST_EXTRA_CXXFLAGS} ${OSX_LIB_FLAG} ${OSX_DEPLOYMENT_FLAG} ${BOOST_LINKER_FLAGS} install --build-type=complete --layout=tagged --threading=single,multi") + set (BOOST_CMD "./b2 ${BOOST_DEBUG_FLAGS} ${BOOST_ARCHITECTURE} toolset=${_boost_toolchain} -j ${_BOOST_PARALLEL_JOBS} --disable-icu link=${BOOST_BUILD_TYPE} cxxflags=-fPIC ${BOOST_EXTRA_CXXFLAGS} ${OSX_LIB_FLAG} ${OSX_DEPLOYMENT_FLAG} ${BOOST_LINKER_FLAGS} install --build-type=complete --layout=tagged --threading=single,multi") # boost install message(STATUS "Installing Boost libraries (${BOOST_CMD}) ...") execute_process(COMMAND ./b2 ${BOOST_DEBUG_FLAGS} ${BOOST_ARCHITECTURE} toolset=${_boost_toolchain} - -j ${NUMBER_OF_JOBS} + -j ${_BOOST_PARALLEL_JOBS} --disable-icu -s NO_LZMA=1 -s NO_ZSTD=1 diff --git a/libraries.cmake/bzip2.cmake b/libraries.cmake/bzip2.cmake index 26a620d..3fe0863 100644 --- a/libraries.cmake/bzip2.cmake +++ b/libraries.cmake/bzip2.cmake @@ -76,7 +76,7 @@ MACRO( OPENMS_CONTRIB_BUILD_BZIP2 ) else() - # CFLAGS for libsvm compiler (see libsvm Makefile) + # CFLAGS for bzip2 compiler set(BZIP2_CFLAGS "-Wall -Winline -O2 -g -fPIC -D_FILE_OFFSET_BITS=64") # add OS X specific flags diff --git a/libraries.cmake/coinor.cmake b/libraries.cmake/coinor.cmake index 1dd76a9..c88985a 100644 --- a/libraries.cmake/coinor.cmake +++ b/libraries.cmake/coinor.cmake @@ -195,8 +195,6 @@ MACRO( OPENMS_CONTRIB_BUILD_COINOR) exec_program(${CMAKE_MAKE_PROGRAM} "${COINOR_DIR}" ARGS install - #-j ${NUMBER_OF_JOBS} # the project has problems with multiple jobs. It tries to create folders at the same time and fails. - -j 1 OUTPUT_VARIABLE COINOR_MAKE_OUT RETURN_VALUE COINOR_MAKE_SUCCESS ) diff --git a/libraries.cmake/glpk.cmake b/libraries.cmake/glpk.cmake index 4804a33..9226d59 100644 --- a/libraries.cmake/glpk.cmake +++ b/libraries.cmake/glpk.cmake @@ -52,7 +52,7 @@ MACRO( OPENMS_CONTRIB_BUILD_GLPK ) configure_file("${GLPK_DIR}/src/glpk.h" "${CMAKE_BINARY_DIR}/include/glpk.h" COPYONLY) else() - # CFLAGS for libsvm compiler (see libsvm Makefile) + # CFLAGS for glpk compiler set(GLPK_CFLAGS "-Wall -O3 -fPIC") # add OS X specific flags diff --git a/libraries.cmake/xercesc.cmake b/libraries.cmake/xercesc.cmake index 3b471be..70bb31a 100644 --- a/libraries.cmake/xercesc.cmake +++ b/libraries.cmake/xercesc.cmake @@ -23,7 +23,6 @@ MACRO( OPENMS_CONTRIB_BUILD_XERCESC ) OPENMS_PATCH( _PATCH_FILE XERCES_DIR _PATCHED_FILE) if (WIN32) - #set(XERCES_EXTRA_CMAKE_FLAGS "-D...") message( STATUS "Generating XERCES-C cmake build system for Debug and Release...") execute_process(COMMAND ${CMAKE_COMMAND} -D CMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} @@ -34,7 +33,6 @@ MACRO( OPENMS_CONTRIB_BUILD_XERCESC ) ${ARCHITECTURE_OPTION_CMAKE} -D CMAKE_INSTALL_PREFIX=${PROJECT_BINARY_DIR} -D CMAKE_POSITION_INDEPENDENT_CODE=ON - #${XERCES_EXTRA_CMAKE_FLAGS} . WORKING_DIRECTORY ${XERCES_DIR} OUTPUT_VARIABLE XERCES_CMAKE_OUT diff --git a/libraries.cmake/zlib.cmake b/libraries.cmake/zlib.cmake index e9fa029..bbbaeb7 100644 --- a/libraries.cmake/zlib.cmake +++ b/libraries.cmake/zlib.cmake @@ -21,7 +21,6 @@ if (MSVC) -G "${CMAKE_GENERATOR}" ${ARCHITECTURE_OPTION_CMAKE} -D CMAKE_INSTALL_PREFIX=${PROJECT_BINARY_DIR} - ${ZLIB_EXTRA_CMAKE_FLAG} . WORKING_DIRECTORY ${ZLIB_DIR} OUTPUT_VARIABLE ZLIB_CMAKE_OUT @@ -84,7 +83,7 @@ else() ## Linux/MacOS set(_ZLIB_CMAKE_ARGS "") endif() - # CFLAGS for libsvm compiler (see libsvm Makefile) + # CFLAGS for zlib compiler set(ZLIB_CFLAGS "-Wall -O3 -fPIC") message(STATUS "Generating zlib build system .. ") diff --git a/macros.cmake b/macros.cmake index a63ecb0..fce8e5d 100644 --- a/macros.cmake +++ b/macros.cmake @@ -53,18 +53,18 @@ endmacro() macro(validate_archive libname) set(_archive_folder "${PROJECT_BINARY_DIR}/archives") set(_target_file "${_archive_folder}/${ARCHIVE_${libname}}") - set(_target_sha1 ${ARCHIVE_${libname}_SHA1}) + set(_target_SHA256 ${ARCHIVE_${libname}_SHA256}) message(STATUS "Validating archive for ${libname} .. ") - file(SHA1 ${_target_file} _downloaded_sha1 ) - if(NOT "${_downloaded_sha1}" STREQUAL "${_target_sha1}") + file(SHA256 ${_target_file} _downloaded_SHA256 ) + if(NOT "${_downloaded_SHA256}" STREQUAL "${_target_SHA256}") file(REMOVE ${_target_file}) - if("${_downloaded_sha1}" STREQUAL "da39a3ee5e6b4b0d3255bfef95601890afd80709") + if("${_downloaded_SHA256}" STREQUAL "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855") message(STATUS "Validating archive for ${libname} .. Found empty archive.") message(STATUS "Check your internet connection.") else() - message(STATUS "Validating archive for ${libname} .. sha1 mismatch (expected: ${_target_sha1} got: ${_downloaded_sha1})") + message(STATUS "Validating archive for ${libname} .. SHA256 mismatch (expected: ${_target_SHA256} got: ${_downloaded_SHA256})") message(STATUS "The archive file for ${libname} seems to be damaged and will be removed.") endif() message(STATUS "Please try to rebuild ${libname} to trigger a new download of the archive.") @@ -78,12 +78,12 @@ endmacro() ## downloads the archive for the given library ## @param libname The library that should be downloaded macro(download_contrib_archive libname) - set(_BASE_URL "https://github.com/OpenMS/contrib-sources/releases/download/3.5.0pre1/") + set(_BASE_URL "https://github.com/OpenMS/contrib-sources/releases/download/3.5.0_pre_2/") # the files/folders where downloads are stored set(_archive_folder "${PROJECT_BINARY_DIR}/archives") set(_target_file "${_archive_folder}/${ARCHIVE_${libname}}") - set(_target_sha1 ${ARCHIVE_${libname}_SHA1}) + set(_target_SHA256 ${ARCHIVE_${libname}_SHA256}) set(_remote_file ${ARCHIVE_${libname}}) set(_full_url "${_BASE_URL}${_remote_file}") @@ -111,13 +111,13 @@ macro(download_contrib_archive libname) message(STATUS "Downloading ${libname} .. done") message(STATUS "Validating archive for ${libname} .. ") - file(SHA1 ${_target_file} _downloaded_sha1 ) - if(NOT "${_downloaded_sha1}" STREQUAL "${_target_sha1}") + file(SHA256 ${_target_file} _downloaded_SHA256 ) + if(NOT "${_downloaded_SHA256}" STREQUAL "${_target_SHA256}") file(REMOVE ${_target_file}) - if("${_downloaded_sha1}" STREQUAL "da39a3ee5e6b4b0d3255bfef95601890afd80709") + if("${_downloaded_SHA256}" STREQUAL "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855") message(STATUS "Validating archive for ${libname} .. Found empty archive.") else() - message(STATUS "Validating archive for ${libname} .. sha1 mismatch (expected: ${_target_sha1} got: ${_downloaded_sha1})") + message(STATUS "Validating archive for ${libname} .. SHA256 mismatch (expected: ${_target_SHA256} got: ${_downloaded_SHA256})") message(STATUS "The archive file for ${libname} seems to be damaged and will be removed.") endif() else()