Skip to content

Commit

Permalink
Modernize FairMQ recipe (alisw#4882)
Browse files Browse the repository at this point in the history
* Clean/Update dependencies
* Switch to Ninja generator
* Modernize module generation with a-g-m
* Use CMake's new `--install` cli option
* Fix all issues reported by `alidistlint`
* Let FairMQ's CMake pick up dependency location hints from
  aliBuild's env variables `<PACKAGE>_ROOT`
  • Loading branch information
dennisklein authored Mar 7, 2023
1 parent 48fae62 commit b310c77
Showing 1 changed file with 44 additions and 63 deletions.
107 changes: 44 additions & 63 deletions fairmq.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,80 +7,61 @@ requires:
- FairLogger
- ZeroMQ
build_requires:
- flatbuffers
- alibuild-recipe-tools
- CMake
- "GCC-Toolchain:(?!osx)"
- FairCMakeModules
incremental_recipe: |
cmake --build . --target install ${JOBS:+-- -j$JOBS}
mkdir -p $INSTALLROOT/etc/modulefiles && rsync -a --delete etc/modulefiles/ $INSTALLROOT/etc/modulefiles
- "GCC-Toolchain:(?!osx)"
- ninja
prepend_path:
ROOT_INCLUDE_PATH:
- "$FAIRMQ_ROOT/include"
- "$FAIRMQ_ROOT/include/fairmq"
- "${FAIRMQ_ROOT}/include"
- "${FAIRMQ_ROOT}/include/fairmq"
incremental_recipe: |
#!/bin/bash -e
cmake --build . ${JOBS:+-j$JOBS}
cmake --install . --prefix "${INSTALLROOT}"
MODULEDIR="etc/modulefiles"
mkdir -p "${INSTALLROOT}/${MODULEDIR}"
rsync -a --delete "${MODULEDIR}" "${INSTALLROOT}/${MODULEDIR}"
---
mkdir -p $INSTALLROOT
#!/bin/bash -e

case $ARCHITECTURE in
case ${ARCHITECTURE} in
osx*)
# If we preferred system tools, we need to make sure we can pick them up.
[[ ! $BOOST_ROOT ]] && BOOST_ROOT=`brew --prefix boost`
[[ ! $ZEROMQ_ROOT ]] && ZEROMQ_ROOT=`brew --prefix zeromq`
;;
*)
BUILD_OFI=ON
if [[ $(printf '%s\n' "1.4.2" "${PKGVERSION:1}" | sort -V | head -n1) != "1.4.2" ]]; then
BUILD_OFI=OFF
fi
[[ -n ${BOOST_ROOT} ]] && BOOST_ROOT=$(brew --prefix boost)
[[ -n ${ZEROMQ_ROOT} ]] && ZEROMQ_ROOT=$(brew --prefix zeromq)
;;
esac
cmake $SOURCEDIR \
${CXXSTD:+-DCMAKE_CXX_STANDARD=$CXXSTD} \
${CXX_COMPILER:+-DCMAKE_CXX_COMPILER=$CXX_COMPILER} \
${CMAKE_BUILD_TYPE:+-DCMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE} \
-DCMAKE_INSTALL_PREFIX=$INSTALLROOT \
${BOOST_ROOT:+-DBOOST_ROOT=$BOOST_ROOT} \
${FAIRLOGGER_ROOT:+-DFairLogger_ROOT=$FAIRLOGGER_ROOT} \
${ZEROMQ_ROOT:+-DZeroMQ_ROOT=$ZEROMQ_ROOT} \
${FLATBUFFERS_ROOT:+-DFlatbuffers_ROOT=$FLATBUFFERS_ROOT} \
${FAIRCMAKEMODULES_ROOT:+-DFairCMakeModules_ROOT=$FAIRCMAKEMODULES_ROOT} \
-DDISABLE_COLOR=ON \
-DBUILD_EXAMPLES=ON \
-DBUILD_TESTING=${ALIBUILD_FAIRMQ_TESTS:-OFF} \
-DCMAKE_INSTALL_LIBDIR=lib \
-DCMAKE_INSTALL_BINDIR=bin
# NOTE: FairMQ examples must always be built in RPMs as they are used for
# AliECS integration testing. Please do not disable them.

cmake --build . --target install ${JOBS:+-- -j$JOBS}
cmake "${SOURCEDIR}" \
-GNinja \
${CXXSTD:+-DCMAKE_CXX_STANDARD=${CXXSTD}} \
${CXX_COMPILER:+-DCMAKE_CXX_COMPILER=${CXX_COMPILER}} \
${CMAKE_BUILD_TYPE:+-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}} \
-DCMAKE_INSTALL_LIBDIR=lib \
-DDISABLE_COLOR=ON \
-DBUILD_EXAMPLES=ON \
-DBUILD_TESTING=ON
# NOTE: FairMQ examples must always be built in RPMs as they are
# used for AliECS integration testing. Please do not disable
# them.

cmake --build . ${JOBS:+-j${JOBS}}

# Tests will not run unless ALIBUILD_FAIRMQ_TESTS is set
if [[ $ALIBUILD_FAIRMQ_TESTS ]]; then
# In order to reduce the probability of clashes, tests are not run in parallel
ctest --output-on-failure
if [[ -n ${ALIBUILD_FAIRMQ_TESTS} ]]; then
ctest --output-on-failure --schedule-random ${JOBS:+-j${JOBS}}
fi

cmake --install . --prefix "${INSTALLROOT}"

# ModuleFile
mkdir -p etc/modulefiles
cat > etc/modulefiles/$PKGNAME <<EoF
#%Module1.0
proc ModulesHelp { } {
global version
puts stderr "ALICE Modulefile for $PKGNAME $PKGVERSION-@@PKGREVISION@$PKGHASH@@"
}
set version $PKGVERSION-@@PKGREVISION@$PKGHASH@@
module-whatis "ALICE Modulefile for $PKGNAME $PKGVERSION-@@PKGREVISION@$PKGHASH@@"
# Dependencies
module load BASE/1.0 \\
${BOOST_REVISION:+boost/$BOOST_VERSION-$BOOST_REVISION} \\
${FAIRLOGGER_REVISION:+FairLogger/$FAIRLOGGER_VERSION-$FAIRLOGGER_REVISION} \\
${ZEROMQ_REVISION:+ZeroMQ/$ZEROMQ_VERSION-$ZEROMQ_REVISION}
# Our environment
set FAIRMQ_ROOT \$::env(BASEDIR)/$PKGNAME/\$version
prepend-path PATH \$FAIRMQ_ROOT/bin
prepend-path LD_LIBRARY_PATH \$FAIRMQ_ROOT/lib
prepend-path ROOT_INCLUDE_PATH \$FAIRMQ_ROOT/include
prepend-path ROOT_INCLUDE_PATH \$FAIRMQ_ROOT/include/fairmq
EoF
MODULEDIR="$INSTALLROOT/etc/modulefiles"
mkdir -p $MODULEDIR && rsync -a --delete etc/modulefiles/ $MODULEDIR
MODULEDIR="etc/modulefiles"
mkdir -p "${MODULEDIR}"
MODULEFILE="${MODULEDIR}/${PKGNAME}"
alibuild-generate-module --bin --lib > "${MODULEFILE}"
cat << EOF >> "${MODULEFILE}"
prepend-path ROOT_INCLUDE_PATH \$PKG_ROOT/include
prepend-path ROOT_INCLUDE_PATH \$PKG_ROOT/include/fairmq
EOF
mkdir -p "${INSTALLROOT}/${MODULEDIR}"
rsync -a --delete ${MODULEDIR} "${INSTALLROOT}/${MODULEDIR}"

0 comments on commit b310c77

Please sign in to comment.