diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2a60006e3a90406e0bfd92043b21ee3f4fd7d9fd..7b4d9888d781a730bbd55a489b2e4706d8ee114f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -28,7 +28,7 @@ stages: - while true; do sleep 300; x=$(oc get pods |grep $pod|awk '{ print $3}');if [ $x != "Running" ]; then break; fi; done - oc logs jobs/simplejob${CI_PIPELINE_ID} | tee log.txt # if spack install has failed, fail the pipeline - # - if [ $(cat log.txt |grep "Error:"|wc -l) -gt 0 ]; then exit 1;fi; + - if [ $(cat log.txt |grep "No module available for package"|wc -l) -gt 0 ]; then exit 1;fi; # delete the job from OpenShift as we have the logs here - oc delete job simplejob${CI_PIPELINE_ID} || true tags: @@ -143,7 +143,7 @@ deploy-exp-release-dev-cscs: refs: - schedules variables: - - $RELEASE == "experimental" + - $RELEASE == "experimental-dev" allow_failure: false # Deploy the experimental release of tools (sheduled pipeline) diff --git a/create_JupyterLab_kernel.sh b/create_JupyterLab_kernel.sh index aa5b61cb0c63ae3ca01451bc44bb3d47490a5b5e..078c786b51f6c22bdc9a207c7eea2d56f09e778a 100644 --- a/create_JupyterLab_kernel.sh +++ b/create_JupyterLab_kernel.sh @@ -26,6 +26,8 @@ source /srv/$INSTALLATION_ROOT/spack/var/spack/environments/$SPACKIFIED_ENV/load # by the user using pip export PYTHONPATH=$PYTHONPATH:/opt/app-root/src/.local/lib/python3.8/site-packages export PATH=$PATH:/opt/app-root/src/.local/bin +# export also python modules installed in the base docker Collab image +export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python3.8/dist-packages # capture the env after spack activation cd /opt/app-root/src diff --git a/create_job.sh b/create_job.sh index cc62cb605d73013e28818cfdf1495bce4d661bb2..b0177883bbd18b409c340b094fe92a09e1e36a0e 100644 --- a/create_job.sh +++ b/create_job.sh @@ -29,6 +29,7 @@ spec: containers: - name: simplejob image: ${BUILD_ENV_DOCKER_IMAGE} + imagePullPolicy: Always securityContext: runAsUser: ${OKD_CLUSTER_UID} volumeMounts: @@ -40,6 +41,6 @@ spec: persistentVolumeClaim: claimName: shared-binaries restartPolicy: Never - #nodeSelector: - # kubernetes.io/hostname: okd-worker-1.dev.hbp.eu + nodeSelector: + kubernetes.io/hostname: okd-worker-3.dev.hbp.eu EOT diff --git a/packages/llvm/llvm-gcc11.patch b/packages/llvm/llvm-gcc11.patch new file mode 100644 index 0000000000000000000000000000000000000000..8e081e876ee33a20c74aef54208c8cc0eb600007 --- /dev/null +++ b/packages/llvm/llvm-gcc11.patch @@ -0,0 +1,9 @@ +--- a/llvm/utils/benchmark/src/benchmark_register.h ++++ b/llvm/utils/benchmark/src/benchmark_register.h +@@ -2,6 +2,7 @@ + #define BENCHMARK_REGISTER_H + + #include <vector> ++#include <limits> + + #include "check.h" diff --git a/packages/llvm/llvm-version-suffix-macro.patch b/packages/llvm/llvm-version-suffix-macro.patch new file mode 100644 index 0000000000000000000000000000000000000000..62e9684386b34501a2da7e5c31ea00ac393387c8 --- /dev/null +++ b/packages/llvm/llvm-version-suffix-macro.patch @@ -0,0 +1,14 @@ +diff --git a/llvm/include/llvm/Config/llvm-config.h.cmake b/llvm/include/llvm/Config/llvm-config.h.cmake +index 4493bb65d444..e2b3c61b3c33 100644 +--- a/llvm/include/llvm/Config/llvm-config.h.cmake ++++ b/llvm/include/llvm/Config/llvm-config.h.cmake +@@ -74,6 +74,9 @@ + /* Patch version of the LLVM API */ + #define LLVM_VERSION_PATCH ${LLVM_VERSION_PATCH} + ++/* LLVM version suffix */ ++#cmakedefine LLVM_VERSION_SUFFIX "${LLVM_VERSION_SUFFIX}" ++ + /* LLVM version string */ + #define LLVM_VERSION_STRING "${PACKAGE_VERSION}" + diff --git a/packages/llvm/llvm4-lld-ELF-Symbols.patch b/packages/llvm/llvm4-lld-ELF-Symbols.patch new file mode 100644 index 0000000000000000000000000000000000000000..1a86cda35828115c11acde8ff3ce5f08a4cb862f --- /dev/null +++ b/packages/llvm/llvm4-lld-ELF-Symbols.patch @@ -0,0 +1,112 @@ +--- a/lldb/include/lldb/Utility/TaskPool.h ++++ b/lldb/include/lldb/Utility/TaskPool.h +@@ -33,6 +33,7 @@ + #include <queue> + #include <thread> + #include <vector> ++#include <functional> + + // Global TaskPool class for running tasks in parallel on a set of worker thread + // created the first +# Fix lld templates: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=230463 +--- a/lld/ELF/LTO.cpp ++++ b/lld/ELF/LTO.cpp +@@ -158,7 +158,7 @@ + return Ret; + } + +-template void BitcodeCompiler::template add<ELF32LE>(BitcodeFile &); +-template void BitcodeCompiler::template add<ELF32BE>(BitcodeFile &); +-template void BitcodeCompiler::template add<ELF64LE>(BitcodeFile &); +-template void BitcodeCompiler::template add<ELF64BE>(BitcodeFile &); ++template void BitcodeCompiler::add<ELF32LE>(BitcodeFile &); ++template void BitcodeCompiler::add<ELF32BE>(BitcodeFile &); ++template void BitcodeCompiler::add<ELF64LE>(BitcodeFile &); ++template void BitcodeCompiler::add<ELF64BE>(BitcodeFile &); +--- a/lld/ELF/Symbols.cpp ++++ b/lld/ELF/Symbols.cpp +@@ -343,45 +343,45 @@ + template bool SymbolBody::hasThunk<ELF64LE>() const; + template bool SymbolBody::hasThunk<ELF64BE>() const; + +-template uint32_t SymbolBody::template getVA<ELF32LE>(uint32_t) const; +-template uint32_t SymbolBody::template getVA<ELF32BE>(uint32_t) const; +-template uint64_t SymbolBody::template getVA<ELF64LE>(uint64_t) const; +-template uint64_t SymbolBody::template getVA<ELF64BE>(uint64_t) const; +- +-template uint32_t SymbolBody::template getGotVA<ELF32LE>() const; +-template uint32_t SymbolBody::template getGotVA<ELF32BE>() const; +-template uint64_t SymbolBody::template getGotVA<ELF64LE>() const; +-template uint64_t SymbolBody::template getGotVA<ELF64BE>() const; +- +-template uint32_t SymbolBody::template getGotOffset<ELF32LE>() const; +-template uint32_t SymbolBody::template getGotOffset<ELF32BE>() const; +-template uint64_t SymbolBody::template getGotOffset<ELF64LE>() const; +-template uint64_t SymbolBody::template getGotOffset<ELF64BE>() const; +- +-template uint32_t SymbolBody::template getGotPltVA<ELF32LE>() const; +-template uint32_t SymbolBody::template getGotPltVA<ELF32BE>() const; +-template uint64_t SymbolBody::template getGotPltVA<ELF64LE>() const; +-template uint64_t SymbolBody::template getGotPltVA<ELF64BE>() const; +- +-template uint32_t SymbolBody::template getThunkVA<ELF32LE>() const; +-template uint32_t SymbolBody::template getThunkVA<ELF32BE>() const; +-template uint64_t SymbolBody::template getThunkVA<ELF64LE>() const; +-template uint64_t SymbolBody::template getThunkVA<ELF64BE>() const; +- +-template uint32_t SymbolBody::template getGotPltOffset<ELF32LE>() const; +-template uint32_t SymbolBody::template getGotPltOffset<ELF32BE>() const; +-template uint64_t SymbolBody::template getGotPltOffset<ELF64LE>() const; +-template uint64_t SymbolBody::template getGotPltOffset<ELF64BE>() const; +- +-template uint32_t SymbolBody::template getPltVA<ELF32LE>() const; +-template uint32_t SymbolBody::template getPltVA<ELF32BE>() const; +-template uint64_t SymbolBody::template getPltVA<ELF64LE>() const; +-template uint64_t SymbolBody::template getPltVA<ELF64BE>() const; +- +-template uint32_t SymbolBody::template getSize<ELF32LE>() const; +-template uint32_t SymbolBody::template getSize<ELF32BE>() const; +-template uint64_t SymbolBody::template getSize<ELF64LE>() const; +-template uint64_t SymbolBody::template getSize<ELF64BE>() const; ++template uint32_t SymbolBody::getVA<ELF32LE>(uint32_t) const; ++template uint32_t SymbolBody::getVA<ELF32BE>(uint32_t) const; ++template uint64_t SymbolBody::getVA<ELF64LE>(uint64_t) const; ++template uint64_t SymbolBody::getVA<ELF64BE>(uint64_t) const; ++ ++template uint32_t SymbolBody::getGotVA<ELF32LE>() const; ++template uint32_t SymbolBody::getGotVA<ELF32BE>() const; ++template uint64_t SymbolBody::getGotVA<ELF64LE>() const; ++template uint64_t SymbolBody::getGotVA<ELF64BE>() const; ++ ++template uint32_t SymbolBody::getGotOffset<ELF32LE>() const; ++template uint32_t SymbolBody::getGotOffset<ELF32BE>() const; ++template uint64_t SymbolBody::getGotOffset<ELF64LE>() const; ++template uint64_t SymbolBody::getGotOffset<ELF64BE>() const; ++ ++template uint32_t SymbolBody::getGotPltVA<ELF32LE>() const; ++template uint32_t SymbolBody::getGotPltVA<ELF32BE>() const; ++template uint64_t SymbolBody::getGotPltVA<ELF64LE>() const; ++template uint64_t SymbolBody::getGotPltVA<ELF64BE>() const; ++ ++template uint32_t SymbolBody::getThunkVA<ELF32LE>() const; ++template uint32_t SymbolBody::getThunkVA<ELF32BE>() const; ++template uint64_t SymbolBody::getThunkVA<ELF64LE>() const; ++template uint64_t SymbolBody::getThunkVA<ELF64BE>() const; ++ ++template uint32_t SymbolBody::getGotPltOffset<ELF32LE>() const; ++template uint32_t SymbolBody::getGotPltOffset<ELF32BE>() const; ++template uint64_t SymbolBody::getGotPltOffset<ELF64LE>() const; ++template uint64_t SymbolBody::getGotPltOffset<ELF64BE>() const; ++ ++template uint32_t SymbolBody::getPltVA<ELF32LE>() const; ++template uint32_t SymbolBody::getPltVA<ELF32BE>() const; ++template uint64_t SymbolBody::getPltVA<ELF64LE>() const; ++template uint64_t SymbolBody::getPltVA<ELF64BE>() const; ++ ++template uint32_t SymbolBody::getSize<ELF32LE>() const; ++template uint32_t SymbolBody::getSize<ELF32BE>() const; ++template uint64_t SymbolBody::getSize<ELF64LE>() const; ++template uint64_t SymbolBody::getSize<ELF64BE>() const; + + template class elf::Undefined<ELF32LE>; + template class elf::Undefined<ELF32BE>; diff --git a/packages/llvm/llvm5-lld-ELF-Symbols.patch b/packages/llvm/llvm5-lld-ELF-Symbols.patch new file mode 100644 index 0000000000000000000000000000000000000000..727647d3b8f1c18140649caf52ec3c0506e62ed8 --- /dev/null +++ b/packages/llvm/llvm5-lld-ELF-Symbols.patch @@ -0,0 +1,33 @@ +# Fix lld templates: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=230463 +--- a/lld/ELF/Symbols.cpp ++++ b/lld/ELF/Symbols.cpp +@@ -383,17 +383,17 @@ + return B.getName(); + } + +-template uint32_t SymbolBody::template getSize<ELF32LE>() const; +-template uint32_t SymbolBody::template getSize<ELF32BE>() const; +-template uint64_t SymbolBody::template getSize<ELF64LE>() const; +-template uint64_t SymbolBody::template getSize<ELF64BE>() const; ++template uint32_t SymbolBody::getSize<ELF32LE>() const; ++template uint32_t SymbolBody::getSize<ELF32BE>() const; ++template uint64_t SymbolBody::getSize<ELF64LE>() const; ++template uint64_t SymbolBody::getSize<ELF64BE>() const; + +-template bool DefinedRegular::template isMipsPIC<ELF32LE>() const; +-template bool DefinedRegular::template isMipsPIC<ELF32BE>() const; +-template bool DefinedRegular::template isMipsPIC<ELF64LE>() const; +-template bool DefinedRegular::template isMipsPIC<ELF64BE>() const; ++template bool DefinedRegular::isMipsPIC<ELF32LE>() const; ++template bool DefinedRegular::isMipsPIC<ELF32BE>() const; ++template bool DefinedRegular::isMipsPIC<ELF64LE>() const; ++template bool DefinedRegular::isMipsPIC<ELF64BE>() const; + +-template uint32_t SharedSymbol::template getAlignment<ELF32LE>() const; +-template uint32_t SharedSymbol::template getAlignment<ELF32BE>() const; +-template uint32_t SharedSymbol::template getAlignment<ELF64LE>() const; +-template uint32_t SharedSymbol::template getAlignment<ELF64BE>() const; ++template uint32_t SharedSymbol::getAlignment<ELF32LE>() const; ++template uint32_t SharedSymbol::getAlignment<ELF32BE>() const; ++template uint32_t SharedSymbol::getAlignment<ELF64LE>() const; ++template uint32_t SharedSymbol::getAlignment<ELF64BE>() const; diff --git a/packages/llvm/llvm5-sanitizer-ustat.patch b/packages/llvm/llvm5-sanitizer-ustat.patch new file mode 100644 index 0000000000000000000000000000000000000000..531a3c5d6ded693076a18894dc11c1d3553f5188 --- /dev/null +++ b/packages/llvm/llvm5-sanitizer-ustat.patch @@ -0,0 +1,25 @@ +# <sys/ustat.h> has been removed from glibc 2.28, +# backport fix from llvm-6.0.1: +--- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cc ++++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cc +@@ -159,1 +159,0 @@ +-#include <sys/ustat.h> +@@ -252,5 +252,17 @@ + + #if SANITIZER_LINUX && !SANITIZER_ANDROID +- unsigned struct_ustat_sz = sizeof(struct ustat); ++ // Use pre-computed size of struct ustat to avoid <sys/ustat.h> which ++ // has been removed from glibc 2.28. ++#if defined(__aarch64__) || defined(__s390x__) || defined (__mips64) \ ++ || defined(__powerpc64__) || defined(__arch64__) || defined(__sparcv9) \ ++ || defined(__x86_64__) ++#define SIZEOF_STRUCT_USTAT 32 ++#elif defined(__arm__) || defined(__i386__) || defined(__mips__) \ ++ || defined(__powerpc__) || defined(__s390__) ++#define SIZEOF_STRUCT_USTAT 20 ++#else ++#error Unknown size of struct ustat ++#endif ++ unsigned struct_ustat_sz = SIZEOF_STRUCT_USTAT; + unsigned struct_rlimit64_sz = sizeof(struct rlimit64); + unsigned struct_statvfs64_sz = sizeof(struct statvfs64); diff --git a/packages/llvm/missing-includes.patch b/packages/llvm/missing-includes.patch new file mode 100644 index 0000000000000000000000000000000000000000..e88b8fcfde190c3cfbf6e507e0a700a2137f0460 --- /dev/null +++ b/packages/llvm/missing-includes.patch @@ -0,0 +1,23 @@ +# https://github.com/spack/spack/issues/24270 (This hunk is upstream since llvm-10) +--- a/llvm/include/llvm/Demangle/MicrosoftDemangleNodes.h ++++ b/llvm/include/llvm/Demangle/MicrosoftDemangleNodes.h +@@ -4,6 +4,8 @@ + #include "llvm/Demangle/Compiler.h" + #include "llvm/Demangle/StringView.h" + #include <array> ++#include <cstdint> ++#include <string> + + class OutputStream; + +# https://github.com/spack/spack/pull/27233 +--- a/llvm/utils/benchmark/src/benchmark_register.h ++++ b/llvm/utils/benchmark/src/benchmark_register.h +@@ -2,6 +2,7 @@ + #define BENCHMARK_REGISTER_H + + #include <vector> ++#include <limits> + + #include "check.h" + diff --git a/packages/llvm/no_cyclades.patch b/packages/llvm/no_cyclades.patch new file mode 100644 index 0000000000000000000000000000000000000000..10f9d0796b600dbe6bb947a3582ca72c93b41b82 --- /dev/null +++ b/packages/llvm/no_cyclades.patch @@ -0,0 +1,81 @@ +diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc +--- a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc ++++ b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc +@@ -370,15 +370,6 @@ + + #if SANITIZER_GLIBC + // _(SIOCDEVPLIP, WRITE, struct_ifreq_sz); // the same as EQL_ENSLAVE +- _(CYGETDEFTHRESH, WRITE, sizeof(int)); +- _(CYGETDEFTIMEOUT, WRITE, sizeof(int)); +- _(CYGETMON, WRITE, struct_cyclades_monitor_sz); +- _(CYGETTHRESH, WRITE, sizeof(int)); +- _(CYGETTIMEOUT, WRITE, sizeof(int)); +- _(CYSETDEFTHRESH, NONE, 0); +- _(CYSETDEFTIMEOUT, NONE, 0); +- _(CYSETTHRESH, NONE, 0); +- _(CYSETTIMEOUT, NONE, 0); + _(EQL_EMANCIPATE, WRITE, struct_ifreq_sz); + _(EQL_ENSLAVE, WRITE, struct_ifreq_sz); + _(EQL_GETMASTRCFG, WRITE, struct_ifreq_sz); +diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h +--- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h ++++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h +@@ -983,7 +983,6 @@ + + #if SANITIZER_LINUX && !SANITIZER_ANDROID + extern unsigned struct_ax25_parms_struct_sz; +-extern unsigned struct_cyclades_monitor_sz; + extern unsigned struct_input_keymap_entry_sz; + extern unsigned struct_ipx_config_data_sz; + extern unsigned struct_kbdiacrs_sz; +@@ -1328,15 +1327,6 @@ + #endif // SANITIZER_LINUX + + #if SANITIZER_LINUX && !SANITIZER_ANDROID +-extern unsigned IOCTL_CYGETDEFTHRESH; +-extern unsigned IOCTL_CYGETDEFTIMEOUT; +-extern unsigned IOCTL_CYGETMON; +-extern unsigned IOCTL_CYGETTHRESH; +-extern unsigned IOCTL_CYGETTIMEOUT; +-extern unsigned IOCTL_CYSETDEFTHRESH; +-extern unsigned IOCTL_CYSETDEFTIMEOUT; +-extern unsigned IOCTL_CYSETTHRESH; +-extern unsigned IOCTL_CYSETTIMEOUT; + extern unsigned IOCTL_EQL_EMANCIPATE; + extern unsigned IOCTL_EQL_ENSLAVE; + extern unsigned IOCTL_EQL_GETMASTRCFG; +diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp +--- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp ++++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp +@@ -143,7 +143,6 @@ + # include <sys/procfs.h> + #endif + #include <sys/user.h> +-#include <linux/cyclades.h> + #include <linux/if_eql.h> + #include <linux/if_plip.h> + #include <linux/lp.h> +@@ -460,7 +459,6 @@ + + #if SANITIZER_GLIBC + unsigned struct_ax25_parms_struct_sz = sizeof(struct ax25_parms_struct); +- unsigned struct_cyclades_monitor_sz = sizeof(struct cyclades_monitor); + #if EV_VERSION > (0x010000) + unsigned struct_input_keymap_entry_sz = sizeof(struct input_keymap_entry); + #else +@@ -824,15 +822,6 @@ + #endif // SANITIZER_LINUX + + #if SANITIZER_LINUX && !SANITIZER_ANDROID +- unsigned IOCTL_CYGETDEFTHRESH = CYGETDEFTHRESH; +- unsigned IOCTL_CYGETDEFTIMEOUT = CYGETDEFTIMEOUT; +- unsigned IOCTL_CYGETMON = CYGETMON; +- unsigned IOCTL_CYGETTHRESH = CYGETTHRESH; +- unsigned IOCTL_CYGETTIMEOUT = CYGETTIMEOUT; +- unsigned IOCTL_CYSETDEFTHRESH = CYSETDEFTHRESH; +- unsigned IOCTL_CYSETDEFTIMEOUT = CYSETDEFTIMEOUT; +- unsigned IOCTL_CYSETTHRESH = CYSETTHRESH; +- unsigned IOCTL_CYSETTIMEOUT = CYSETTIMEOUT; + unsigned IOCTL_EQL_EMANCIPATE = EQL_EMANCIPATE; + unsigned IOCTL_EQL_ENSLAVE = EQL_ENSLAVE; + unsigned IOCTL_EQL_GETMASTRCFG = EQL_GETMASTRCFG; diff --git a/packages/llvm/no_cyclades9.patch b/packages/llvm/no_cyclades9.patch new file mode 100644 index 0000000000000000000000000000000000000000..7532865e6de87f444ac7ed8aa4ddeea16e7974b9 --- /dev/null +++ b/packages/llvm/no_cyclades9.patch @@ -0,0 +1,42 @@ +--- a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc ++++ b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc +@@ -370,9 +370,0 @@ +- _(CYGETDEFTHRESH, WRITE, sizeof(int)); +- _(CYGETDEFTIMEOUT, WRITE, sizeof(int)); +- _(CYGETMON, WRITE, struct_cyclades_monitor_sz); +- _(CYGETTHRESH, WRITE, sizeof(int)); +- _(CYGETTIMEOUT, WRITE, sizeof(int)); +- _(CYSETDEFTHRESH, NONE, 0); +- _(CYSETDEFTIMEOUT, NONE, 0); +- _(CYSETTHRESH, NONE, 0); +- _(CYSETTIMEOUT, NONE, 0); +--- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h ++++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h +@@ -986,1 +986,0 @@ +- extern unsigned struct_cyclades_monitor_sz; +@@ -1331,9 +1327,0 @@ +- extern unsigned IOCTL_CYGETDEFTHRESH; +- extern unsigned IOCTL_CYGETDEFTIMEOUT; +- extern unsigned IOCTL_CYGETMON; +- extern unsigned IOCTL_CYGETTHRESH; +- extern unsigned IOCTL_CYGETTIMEOUT; +- extern unsigned IOCTL_CYSETDEFTHRESH; +- extern unsigned IOCTL_CYSETDEFTIMEOUT; +- extern unsigned IOCTL_CYSETTHRESH; +- extern unsigned IOCTL_CYSETTIMEOUT; +--- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cc ++++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cc +@@ -143,1 +143,0 @@ +-#include <linux/cyclades.h> +@@ -460,1 +459,0 @@ +- unsigned struct_cyclades_monitor_sz = sizeof(struct cyclades_monitor); +@@ -824,9 +822,0 @@ +- unsigned IOCTL_CYGETDEFTHRESH = CYGETDEFTHRESH; +- unsigned IOCTL_CYGETDEFTIMEOUT = CYGETDEFTIMEOUT; +- unsigned IOCTL_CYGETMON = CYGETMON; +- unsigned IOCTL_CYGETTHRESH = CYGETTHRESH; +- unsigned IOCTL_CYGETTIMEOUT = CYGETTIMEOUT; +- unsigned IOCTL_CYSETDEFTHRESH = CYSETDEFTHRESH; +- unsigned IOCTL_CYSETDEFTIMEOUT = CYSETDEFTIMEOUT; +- unsigned IOCTL_CYSETTHRESH = CYSETTHRESH; +- unsigned IOCTL_CYSETTIMEOUT = CYSETTIMEOUT; diff --git a/packages/llvm/package.py b/packages/llvm/package.py index f9f1d6ba2e227605ef5c55f073d9bc8e1e54395f..4d0226b73eadec1074649cc1c671aa32f2cace15 100644 --- a/packages/llvm/package.py +++ b/packages/llvm/package.py @@ -1,13 +1,15 @@ -# Copyright 2013-2021 Lawrence Livermore National Security, LLC and other +# Copyright 2013-2022 Lawrence Livermore National Security, LLC and other # Spack Project Developers. See the top-level COPYRIGHT file for details. # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import os import os.path import re import sys import llnl.util.tty as tty +import spack.build_environment import spack.util.executable @@ -19,16 +21,21 @@ class Llvm(CMakePackage, CudaPackage): is not an acronym; it is the full name of the project. """ - homepage = "http://llvm.org/" + homepage = "https://llvm.org/" url = "https://github.com/llvm/llvm-project/archive/llvmorg-7.1.0.tar.gz" - list_url = "http://releases.llvm.org/download.html" + list_url = "https://releases.llvm.org/download.html" git = "https://github.com/llvm/llvm-project" - maintainers = ['trws', 'naromero77'] + maintainers = ['trws', 'haampie'] + + tags = ['e4s'] + + generator = 'Ninja' family = "compiler" # Used by lmod # fmt: off version('main', branch='main') + version('13.0.0', sha256='a1131358f1f9f819df73fa6bff505f2c49d176e9eef0a3aedd1fdbce3b4630e8') version('12.0.1', sha256='66b64aa301244975a4aea489f402f205cde2f53dd722dad9e7b77a0459b4c8df') version('12.0.0', sha256='8e6c99e482bb16a450165176c2d881804976a2d770e0445af4375e78a1fbf19c') version('11.1.0', sha256='53a0719f3f4b0388013cfffd7b10c7d5682eece1929a9553c722348d1f866e79') @@ -126,10 +133,19 @@ class Llvm(CMakePackage, CudaPackage): "components in a single shared library", ) variant( - "all_targets", + "link_llvm_dylib", default=False, - description="Build all supported targets, default targets " - "<current arch>,NVPTX,AMDGPU,CppBackend", + description="Link LLVM tools against the LLVM shared library", + ) + variant( + "targets", + default="none", + description=("What targets to build. Spack's target family is always added " + "(e.g. X86 is automatically enabled when targeting znver2)."), + values=("all", "none", "aarch64", "amdgpu", "arm", "avr", "bpf", "cppbackend", + "hexagon", "lanai", "mips", "msp430", "nvptx", "powerpc", "riscv", + "sparc", "systemz", "webassembly", "x86", "xcore"), + multi=True ) variant( "build_type", @@ -142,10 +158,30 @@ class Llvm(CMakePackage, CudaPackage): default=False, description="Build with OpenMP capable thread sanitizer", ) + variant( + "omp_as_runtime", + default=True, + description="Build OpenMP runtime via ENABLE_RUNTIME by just-built Clang", + ) variant('code_signing', default=False, description="Enable code-signing on macOS") variant("python", default=False, description="Install python bindings") + variant('version_suffix', default='none', description="Add a symbol suffix") + variant('z3', default=False, description='Use Z3 for the clang static analyzer') + + provides('libllvm@13', when='@13.0.0:13') + provides('libllvm@12', when='@12.0.0:12') + provides('libllvm@11', when='@11.0.0:11') + provides('libllvm@10', when='@10.0.0:10') + provides('libllvm@9', when='@9.0.0:9') + provides('libllvm@8', when='@8.0.0:8') + provides('libllvm@7', when='@7.0.0:7') + provides('libllvm@6', when='@6.0.0:6') + provides('libllvm@5', when='@5.0.0:5') + provides('libllvm@4', when='@4.0.0:4') + provides('libllvm@3', when='@3.0.0:3') + extends("python", when="+python") variant('visionary', default=False, @@ -194,14 +230,16 @@ class Llvm(CMakePackage, CudaPackage): # Build dependency depends_on("cmake@3.4.3:", type="build") - depends_on("python@2.7:2.8", when="@:4.999 ~python", type="build") + depends_on('cmake@3.13.4:', type='build', when='@12:') + depends_on("ninja", type="build") + depends_on("python@2.7:2.8", when="@:4 ~python", type="build") depends_on("python", when="@5: ~python", type="build") depends_on("pkgconfig", type="build") # Universal dependency - depends_on("python@2.7:2.8", when="@:4.999+python") + depends_on("python@2.7:2.8", when="@:4+python") depends_on("python", when="@5:+python") - depends_on("z3", when="@9:") + depends_on('z3', when='@8:+clang+z3') # openmp dependencies depends_on("perl-data-dumper", type=("build")) @@ -221,25 +259,54 @@ class Llvm(CMakePackage, CudaPackage): depends_on("binutils+gold+ld+plugins", when="+gold") # polly plugin - depends_on("gmp", when="@:3.6.999 +polly") - depends_on("isl", when="@:3.6.999 +polly") + depends_on("gmp", when="@:3.6 +polly") + depends_on("isl", when="@:3.6 +polly") conflicts("+llvm_dylib", when="+shared_libs") + conflicts("+link_llvm_dylib", when="~llvm_dylib") conflicts("+lldb", when="~clang") conflicts("+libcxx", when="~clang") conflicts("+internal_unwind", when="~clang") conflicts("+compiler-rt", when="~clang") conflicts("+flang", when="~clang") # Introduced in version 11 as a part of LLVM and not a separate package. - conflicts("+flang", when="@:10.999") + conflicts("+flang", when="@:10") + + conflicts('~mlir', when='+flang', msg='Flang requires MLIR') - # Older LLVM do not build with newer GCC - conflicts("%gcc@11:", when="@:7") + # Older LLVM do not build with newer compilers, and vice versa conflicts("%gcc@8:", when="@:5") - conflicts("%gcc@:5.0.999", when="@8:") + conflicts("%gcc@:5.0", when="@8:") + # clang/lib: a lambda parameter cannot shadow an explicitly captured entity + conflicts("%clang@8:", when="@:4") + + # When these versions are concretized, but not explicitly with +libcxx, these + # conflicts will enable clingo to set ~libcxx, making the build successful: + + # libc++ of LLVM13, see https://libcxx.llvm.org/#platform-and-compiler-support + # @13 does not support %gcc@:10 https://bugs.llvm.org/show_bug.cgi?id=51359#c1 + # GCC 11 - latest stable release per GCC release page + # Clang: 11, 12 - latest two stable releases per LLVM release page + # AppleClang 12 - latest stable release per Xcode release page + conflicts("%gcc@:10", when="@13:+libcxx") + conflicts("%clang@:10", when="@13:+libcxx") + conflicts("%apple-clang@:11", when="@13:+libcxx") + + # libcxx-4 and compiler-rt-4 fail to build with "newer" clang and gcc versions: + conflicts('%gcc@7:', when='@:4+libcxx') + conflicts('%clang@6:', when='@:4+libcxx') + conflicts('%apple-clang@6:', when='@:4+libcxx') + conflicts('%gcc@7:', when='@:4+compiler-rt') + conflicts('%clang@6:', when='@:4+compiler-rt') + conflicts('%apple-clang@6:', when='@:4+compiler-rt') # OMP TSAN exists in > 5.x - conflicts("+omp_tsan", when="@:5.99") + conflicts("+omp_tsan", when="@:5") + + + # OpenMP via ENABLE_RUNTIME restrictions + conflicts("+omp_as_runtime", when="~clang", msg="omp_as_runtime requires clang being built.") + conflicts("+omp_as_runtime", when="@:11.1", msg="omp_as_runtime works since LLVM 12.") # cuda_arch value must be specified conflicts("cuda_arch=none", when="+cuda", msg="A value for cuda_arch must be specified.") @@ -265,13 +332,30 @@ class Llvm(CMakePackage, CudaPackage): # Fixed in upstream versions of both conflicts('^cmake@3.19.0', when='@6.0.0:11.0.0') + # Starting in 3.9.0 CppBackend is no longer a target (see + # LLVM_ALL_TARGETS in llvm's top-level CMakeLists.txt for + # the complete list of targets) + conflicts("targets=cppbackend", when='@3.9.0:') + # Github issue #4986 patch("llvm_gcc7.patch", when="@4.0.0:4.0.1+lldb %gcc@7.0:") - # https://github.com/spack/spack/issues/24270 - patch('https://src.fedoraproject.org/rpms/llvm10/raw/7ce7ebd066955ea95ba2b491c41fbc6e4ee0643a/f/llvm10-gcc11.patch', - sha256='958c64838c9d469be514eef195eca0f8c3ab069bc4b64a48fad59991c626bab8', - when='@8:10 %gcc@11:') + # sys/ustat.h has been removed in favour of statfs from glibc-2.28. Use fixed sizes: + patch('llvm5-sanitizer-ustat.patch', when="@4:6+compiler-rt") + + # Fix lld templates: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=230463 + patch('llvm4-lld-ELF-Symbols.patch', when="@4+lld%clang@6:") + patch('llvm5-lld-ELF-Symbols.patch', when="@5+lld%clang@7:") + + # Fix missing std:size_t in 'llvm@4:5' when built with '%clang@7:' + patch('xray_buffer_queue-cstddef.patch', when="@4:5+compiler-rt%clang@7:") + + # https://github.com/llvm/llvm-project/commit/947f9692440836dcb8d88b74b69dd379d85974ce + patch('sanitizer-ipc_perm_mode.patch', when="@5:7+compiler-rt%clang@11:") + patch('sanitizer-ipc_perm_mode.patch', when="@5:9+compiler-rt%gcc@9:") + + # github.com/spack/spack/issues/24270: MicrosoftDemangle for %gcc@10: and %clang@13: + patch('missing-includes.patch', when='@8') # Backport from llvm master + additional fix # see https://bugs.llvm.org/show_bug.cgi?id=39696 @@ -298,6 +382,17 @@ class Llvm(CMakePackage, CudaPackage): # Workaround for issue https://github.com/spack/spack/issues/18197 patch('llvm7_intel.patch', when='@7 %intel@18.0.2,19.0.4') + # Remove cyclades support to build against newer kernel headers + # https://reviews.llvm.org/D102059 + patch('no_cyclades.patch', when='@10:12.0.0') + patch('no_cyclades9.patch', when='@6:9') + + patch('llvm-gcc11.patch', when='@9:11%gcc@11:') + + # Add LLVM_VERSION_SUFFIX + # https://reviews.llvm.org/D115818 + patch('llvm-version-suffix-macro.patch', when='@:13.0.0') + # The functions and attributes below implement external package # detection for LLVM. See: # @@ -461,6 +556,17 @@ class Llvm(CMakePackage, CudaPackage): return(None, flags, None) return(flags, None, None) + def setup_build_environment(self, env): + """When using %clang, add only its ld.lld-$ver and/or ld.lld to our PATH""" + if self.compiler.name in ['clang', 'apple-clang']: + for lld in 'ld.lld-{0}'.format(self.compiler.version.version[0]), 'ld.lld': + bin = os.path.join(os.path.dirname(self.compiler.cc), lld) + sym = os.path.join(self.stage.path, 'ld.lld') + if os.path.exists(bin) and not os.path.exists(sym): + mkdirp(self.stage.path) + os.symlink(bin, sym) + env.prepend_path('PATH', self.stage.path) + def setup_run_environment(self, env): if "+clang" in self.spec: env.set("CC", join_path(self.spec.prefix.bin, "clang")) @@ -473,71 +579,87 @@ class Llvm(CMakePackage, CudaPackage): def cmake_args(self): spec = self.spec + define = CMakePackage.define + from_variant = self.define_from_variant + python = spec['python'] cmake_args = [ - "-DLLVM_REQUIRES_RTTI:BOOL=ON", - "-DLLVM_ENABLE_RTTI:BOOL=ON", - "-DLLVM_ENABLE_EH:BOOL=ON", - "-DCLANG_DEFAULT_OPENMP_RUNTIME:STRING=libomp", - "-DPYTHON_EXECUTABLE:PATH={0}".format(python.command.path), - "-DLIBOMP_USE_HWLOC:BOOL=ON", - "-DLIBOMP_HWLOC_INSTALL_DIR={0}".format(spec["hwloc"].prefix), + define("LLVM_REQUIRES_RTTI", True), + define("LLVM_ENABLE_RTTI", True), + define("LLVM_ENABLE_EH", True), + define("CLANG_DEFAULT_OPENMP_RUNTIME", "libomp"), + define("PYTHON_EXECUTABLE", python.command.path), + define("LIBOMP_USE_HWLOC", True), + define("LIBOMP_HWLOC_INSTALL_DIR", spec["hwloc"].prefix), ] - if python.version >= Version("3.0.0"): - cmake_args.append("-DPython3_EXECUTABLE={0}".format( - python.command.path)) + version_suffix = spec.variants['version_suffix'].value + if version_suffix != 'none': + cmake_args.append(define('LLVM_VERSION_SUFFIX', version_suffix)) + + if python.version >= Version("3"): + cmake_args.append(define("Python3_EXECUTABLE", python.command.path)) else: - cmake_args.append("-DPython2_EXECUTABLE={0}".format( - python.command.path)) + cmake_args.append(define("Python2_EXECUTABLE", python.command.path)) projects = [] + runtimes = [] if "+cuda" in spec: - cmake_args.extend( - [ - "-DCUDA_TOOLKIT_ROOT_DIR:PATH=" + spec["cuda"].prefix, - "-DLIBOMPTARGET_NVPTX_COMPUTE_CAPABILITIES={0}".format( - ",".join(spec.variants["cuda_arch"].value) - ), - "-DCLANG_OPENMP_NVPTX_DEFAULT_ARCH=sm_{0}".format( - spec.variants["cuda_arch"].value[-1] - ), - ] - ) + cmake_args.extend([ + define("CUDA_TOOLKIT_ROOT_DIR", spec["cuda"].prefix), + define("LIBOMPTARGET_NVPTX_COMPUTE_CAPABILITIES", + ",".join(spec.variants["cuda_arch"].value)), + define("CLANG_OPENMP_NVPTX_DEFAULT_ARCH", + "sm_{0}".format(spec.variants["cuda_arch"].value[-1])), + ]) + if "+omp_as_runtime" in spec: + cmake_args.extend([ + define("LIBOMPTARGET_NVPTX_ENABLE_BCLIB", True), + # work around bad libelf detection in libomptarget + define("LIBOMPTARGET_DEP_LIBELF_INCLUDE_DIR", + spec["libelf"].prefix.include), + ]) else: # still build libomptarget but disable cuda - cmake_args.extend( - [ - "-DCUDA_TOOLKIT_ROOT_DIR:PATH=IGNORE", - "-DCUDA_SDK_ROOT_DIR:PATH=IGNORE", - "-DCUDA_NVCC_EXECUTABLE:FILEPATH=IGNORE", - "-DLIBOMPTARGET_DEP_CUDA_DRIVER_LIBRARIES:STRING=IGNORE", - ] - ) - - if "+omp_debug" in spec: - cmake_args.append("-DLIBOMPTARGET_ENABLE_DEBUG:Bool=ON") + cmake_args.extend([ + define("CUDA_TOOLKIT_ROOT_DIR", "IGNORE"), + define("CUDA_SDK_ROOT_DIR", "IGNORE"), + define("CUDA_NVCC_EXECUTABLE", "IGNORE"), + define("LIBOMPTARGET_DEP_CUDA_DRIVER_LIBRARIES", "IGNORE"), + ]) - if "+python" in spec and "+lldb" in spec and spec.satisfies("@5.0.0:"): - cmake_args.append("-DLLDB_USE_SYSTEM_SIX:Bool=TRUE") + cmake_args.append(from_variant("LIBOMPTARGET_ENABLE_DEBUG", "omp_debug")) - if "+lldb" in spec and spec.satisfies("@:9.9.9"): - cmake_args.append("-DLLDB_DISABLE_PYTHON:Bool={0}".format( - 'ON' if '~python' in spec else 'OFF')) - if "+lldb" in spec and spec.satisfies("@10.0.0:"): - cmake_args.append("-DLLDB_ENABLE_PYTHON:Bool={0}".format( - 'ON' if '+python' in spec else 'OFF')) + if "+lldb" in spec: + if spec.version >= Version('10'): + cmake_args.append(from_variant("LLDB_ENABLE_PYTHON", 'python')) + else: + cmake_args.append(define("LLDB_DISABLE_PYTHON", + '~python' in spec)) + if spec.satisfies("@5.0.0: +python"): + cmake_args.append(define("LLDB_USE_SYSTEM_SIX", True)) if "+gold" in spec: cmake_args.append( - "-DLLVM_BINUTILS_INCDIR=" + spec["binutils"].prefix.include + define("LLVM_BINUTILS_INCDIR", spec["binutils"].prefix.include) ) if "+clang" in spec: projects.append("clang") projects.append("clang-tools-extra") - projects.append("openmp") + if "+omp_as_runtime" in spec: + runtimes.append("openmp") + else: + projects.append("openmp") + + if self.spec.satisfies("@8"): + cmake_args.append(define('CLANG_ANALYZER_ENABLE_Z3_SOLVER', + self.spec.satisfies('@8+z3'))) + if self.spec.satisfies("@9:"): + cmake_args.append(define('LLVM_ENABLE_Z3_SOLVER', + self.spec.satisfies('@9:+z3'))) + if "+flang" in spec: projects.append("flang") if "+lldb" in spec: @@ -555,52 +677,24 @@ class Llvm(CMakePackage, CudaPackage): projects.append("libunwind") if "+polly" in spec: projects.append("polly") - cmake_args.append("-DLINK_POLLY_INTO_TOOLS:Bool=ON") - - if "+shared_libs" in spec: - cmake_args.append("-DBUILD_SHARED_LIBS:Bool=ON") - if "+llvm_dylib" in spec: - cmake_args.append("-DLLVM_BUILD_LLVM_DYLIB:Bool=ON") - if "+omp_debug" in spec: - cmake_args.append("-DLIBOMPTARGET_ENABLE_DEBUG:Bool=ON") - - if "+split_dwarf" in spec: - cmake_args.append("-DLLVM_USE_SPLIT_DWARF:Bool=ON") - - if "+all_targets" not in spec: # all is default on cmake - - targets = ["NVPTX", "AMDGPU"] - if spec.version < Version("3.9.0"): - # Starting in 3.9.0 CppBackend is no longer a target (see - # LLVM_ALL_TARGETS in llvm's top-level CMakeLists.txt for - # the complete list of targets) - targets.append("CppBackend") - - if spec.target.family == "x86" or spec.target.family == "x86_64": - targets.append("X86") - elif spec.target.family == "arm": - targets.append("ARM") - elif spec.target.family == "aarch64": - targets.append("AArch64") - elif ( - spec.target.family == "sparc" - or spec.target.family == "sparc64" - ): - targets.append("Sparc") - elif ( - spec.target.family == "ppc64" - or spec.target.family == "ppc64le" - or spec.target.family == "ppc" - or spec.target.family == "ppcle" - ): - targets.append("PowerPC") + cmake_args.append(define("LINK_POLLY_INTO_TOOLS", True)) - cmake_args.append( - "-DLLVM_TARGETS_TO_BUILD:STRING=" + ";".join(targets) - ) + cmake_args.extend([ + from_variant("BUILD_SHARED_LIBS", "shared_libs"), + from_variant("LLVM_BUILD_LLVM_DYLIB", "llvm_dylib"), + from_variant("LLVM_LINK_LLVM_DYLIB", "link_llvm_dylib"), + from_variant("LLVM_USE_SPLIT_DWARF", "split_dwarf"), + # By default on Linux, libc++.so is a ldscript. CMake fails to add + # CMAKE_INSTALL_RPATH to it, which fails. Statically link libc++abi.a + # into libc++.so, linking with -lc++ or -stdlib=libc++ is enough. + define('LIBCXX_ENABLE_STATIC_ABI_LIBRARY', True) + ]) + + cmake_args.append(define( + "LLVM_TARGETS_TO_BUILD", + get_llvm_targets_to_build(spec))) - if "+omp_tsan" in spec: - cmake_args.append("-DLIBOMP_TSAN_SUPPORT=ON") + cmake_args.append(from_variant("LIBOMP_TSAN_SUPPORT", "omp_tsan")) if self.compiler.name == "gcc": compiler = Executable(self.compiler.cc) @@ -613,77 +707,70 @@ class Llvm(CMakePackage, CudaPackage): gcc_prefix = line.split(":")[1].strip() gcc_prefix = ancestor(gcc_prefix, 4) break - cmake_args.append("-DGCC_INSTALL_PREFIX=" + gcc_prefix) - - if spec.satisfies("@4.0.0:"): - if spec.satisfies("platform=cray") or spec.satisfies( - "platform=linux" - ): - cmake_args.append("-DCMAKE_BUILD_WITH_INSTALL_RPATH=1") + cmake_args.append(define("GCC_INSTALL_PREFIX", gcc_prefix)) if self.spec.satisfies("~code_signing platform=darwin"): - cmake_args.append('-DLLDB_USE_SYSTEM_DEBUGSERVER=ON') + cmake_args.append(define('LLDB_USE_SYSTEM_DEBUGSERVER', True)) # Semicolon seperated list of projects to enable - cmake_args.append( - "-DLLVM_ENABLE_PROJECTS:STRING={0}".format(";".join(projects)) - ) + cmake_args.append(define("LLVM_ENABLE_PROJECTS", projects)) - return cmake_args + # Semicolon seperated list of runtimes to enable + if runtimes: + cmake_args.append(define("LLVM_ENABLE_RUNTIMES", runtimes)) - @run_before("build") - def pre_install(self): - with working_dir(self.build_directory): - # When building shared libraries these need to be installed first - make("install-LLVMTableGen") - if self.spec.version >= Version("4.0.0"): - # LLVMDemangle target was added in 4.0.0 - make("install-LLVMDemangle") - make("install-LLVMSupport") + return cmake_args @run_after("install") def post_install(self): spec = self.spec + define = CMakePackage.define - # unnecessary if we get bootstrap builds in here - if "+cuda" in self.spec: + # unnecessary if we build openmp via LLVM_ENABLE_RUNTIMES + if "+cuda ~omp_as_runtime" in self.spec: ompdir = "build-bootstrapped-omp" + prefix_paths = spack.build_environment.get_cmake_prefix_path(self) + prefix_paths.append(str(spec.prefix)) # rebuild libomptarget to get bytecode runtime library files with working_dir(ompdir, create=True): cmake_args = [ - self.stage.source_path + "/openmp", - "-DCMAKE_C_COMPILER:PATH={0}".format( - spec.prefix.bin + "/clang" - ), - "-DCMAKE_CXX_COMPILER:PATH={0}".format( - spec.prefix.bin + "/clang++" - ), - "-DCMAKE_INSTALL_PREFIX:PATH={0}".format(spec.prefix), + '-G', 'Ninja', + define('CMAKE_BUILD_TYPE', spec.variants['build_type'].value), + define("CMAKE_C_COMPILER", spec.prefix.bin + "/clang"), + define("CMAKE_CXX_COMPILER", spec.prefix.bin + "/clang++"), + define("CMAKE_INSTALL_PREFIX", spec.prefix), + define('CMAKE_PREFIX_PATH', prefix_paths) ] cmake_args.extend(self.cmake_args()) - cmake_args.append( - "-DLIBOMPTARGET_NVPTX_ENABLE_BCLIB:BOOL=TRUE" - ) - - # work around bad libelf detection in libomptarget - cmake_args.append( - "-DLIBOMPTARGET_DEP_LIBELF_INCLUDE_DIR:String={0}".format( - spec["libelf"].prefix.include - ) - ) + cmake_args.extend([ + define("LIBOMPTARGET_NVPTX_ENABLE_BCLIB", True), + define("LIBOMPTARGET_DEP_LIBELF_INCLUDE_DIR", + spec["libelf"].prefix.include), + self.stage.source_path + "/openmp", + ]) cmake(*cmake_args) - make() - make("install") + ninja() + ninja("install") if "+python" in self.spec: - install_tree("llvm/bindings/python", site_packages_dir) + install_tree("llvm/bindings/python", python_platlib) if "+clang" in self.spec: - install_tree("clang/bindings/python", site_packages_dir) + install_tree("clang/bindings/python", python_platlib) with working_dir(self.build_directory): install_tree("bin", join_path(self.prefix, "libexec", "llvm")) + def llvm_config(self, *args, **kwargs): + lc = Executable(self.prefix.bin.join('llvm-config')) + if not kwargs.get('output'): + kwargs['output'] = str + ret = lc(*args, **kwargs) + if kwargs.get('output') == "list": + return ret.split() + return ret + + # ECM: might be not needed anymore? def add_files_to_view(self, view, merge_map): # we remove libgomp-related files from views as they conflict with # gcc-ones @@ -697,3 +784,50 @@ class Llvm(CMakePackage, CudaPackage): del merge_map[path] super(Llvm, self).add_files_to_view(view, merge_map) + +def get_llvm_targets_to_build(spec): + targets = spec.variants['targets'].value + + # Build everything? + if 'all' in targets: + return 'all' + + # Convert targets variant values to CMake LLVM_TARGETS_TO_BUILD array. + spack_to_cmake = { + "aarch64": "AArch64", + "amdgpu": "AMDGPU", + "arm": "ARM", + "avr": "AVR", + "bpf": "BPF", + "cppbackend": "CppBackend", + "hexagon": "Hexagon", + "lanai": "Lanai", + "mips": "Mips", + "msp430": "MSP430", + "nvptx": "NVPTX", + "powerpc": "PowerPC", + "riscv": "RISCV", + "sparc": "Sparc", + "systemz": "SystemZ", + "webassembly": "WebAssembly", + "x86": "X86", + "xcore": "XCore" + } + + if 'none' in targets: + llvm_targets = set() + else: + llvm_targets = set(spack_to_cmake[target] for target in targets) + + if spec.target.family in ("x86", "x86_64"): + llvm_targets.add("X86") + elif spec.target.family == "arm": + llvm_targets.add("ARM") + elif spec.target.family == "aarch64": + llvm_targets.add("AArch64") + elif spec.target.family in ("sparc", "sparc64"): + llvm_targets.add("Sparc") + elif spec.target.family in ("ppc64", "ppc64le", "ppc", "ppcle"): + llvm_targets.add("PowerPC") + + return list(llvm_targets) diff --git a/packages/llvm/sanitizer-ipc_perm_mode.patch b/packages/llvm/sanitizer-ipc_perm_mode.patch new file mode 100644 index 0000000000000000000000000000000000000000..8f91703a323e87a1c42b294d2c574db53d54ef2a --- /dev/null +++ b/packages/llvm/sanitizer-ipc_perm_mode.patch @@ -0,0 +1,9 @@ +# ipc_perm.mode is not used and has changed from short to int over architecures +# and versions. The last change was in glibc-2.31. +# LLVM upstream decided to not check ipc_perm.mode below glibc-2.31, +# because it is not actually used in the sanitizer: +# github.com/llvm/llvm-project/commit/947f9692440836dcb8d88b74b69dd379d85974ce +--- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cc ++++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cc +@@ -1143,1 +1143,0 @@ +-CHECK_SIZE_AND_OFFSET(ipc_perm, mode); diff --git a/packages/llvm/xray_buffer_queue-cstddef.patch b/packages/llvm/xray_buffer_queue-cstddef.patch new file mode 100644 index 0000000000000000000000000000000000000000..b5ca841e3e10f954ce5785e40c7ad447721c1190 --- /dev/null +++ b/packages/llvm/xray_buffer_queue-cstddef.patch @@ -0,0 +1,5 @@ +# Fix missing std:size_t in 'llvm@4:5' for build with '%clang@7:' +--- a/compiler-rt/lib/xray/xray_buffer_queue.h ++++ b/compiler-rt/lib/xray/xray_buffer_queue.h +@@ -18,0 +18,1 @@ ++#include <cstddef> diff --git a/packages/meta-brainscales/package.py b/packages/meta-brainscales/package.py deleted file mode 100644 index bed34fc8b4d71cac88e53e235a5c743cb1aa03df..0000000000000000000000000000000000000000 --- a/packages/meta-brainscales/package.py +++ /dev/null @@ -1,68 +0,0 @@ -# Copyright 2013-2019 Lawrence Livermore National Security, LLC and other -# Spack Project Developers. See the top-level COPYRIGHT file for details. -# -# SPDX-License-Identifier: (Apache-2.0 OR MIT) - -from spack import * - - -class MetaBrainscales(Package): - """Core package that contains dependencies of the core DLS software - ONLY!""" - - homepage = '' - # some random tarball, to make `spack fetch --dependencies visionary-defaults` work - url = 'https://github.com/electronicvisions/spack/archive/v0.8.tar.gz' - - # This is only a dummy tarball (see difference between version numbers) - # TODO: as soon as a MetaPackage-concept has been merged, please update this package - version('1.0', '372ce038842f20bf0ae02de50c26e85d', url='https://github.com/electronicvisions/spack/archive/v0.8.tar.gz') - - # PPU compiler dependencies - depends_on('gettext') - depends_on('zlib') - depends_on('bison') - depends_on('flex') - depends_on('m4') - depends_on('texinfo') - depends_on('wget') - conflicts('flex', when='@2.6.3', msg='Binutils 2.25 for Nux doesn\'t build with flex 2.6.3.') - - # host software dependencies - depends_on('bitsery') - depends_on('binutils+gold+ld+plugins') # specialize - depends_on('boost@1.69.0: +graph+icu+mpi+python+numpy+coroutine+context cxxstd=17') # specialize boost (non-clingo) - depends_on('cereal') - depends_on('cppcheck') - depends_on('doxygen+graphviz') - depends_on('genpybind@ebrains') - depends_on('gflags') - depends_on('googletest@1.11.0: +gmock') # variadic templates needed - depends_on('intel-tbb') # ppu gdbserver - depends_on('libelf') - depends_on('liblockfile') - depends_on('llvm') - depends_on('log4cxx') - depends_on('pkg-config') - depends_on('python@3.7.0:') # BrainScaleS(-2) only supports Python >= 3.7 - depends_on('py-h5py') # PyNN tests need it - depends_on('py-matplotlib') - depends_on('py-nose') - depends_on('py-numpy') - depends_on('py-pybind11') - depends_on('py-pybind11-stubgen') - depends_on('py-pycodestyle') - depends_on('py-pyelftools') - depends_on('py-pylint') - depends_on('py-pynn@0.9.4:') - depends_on('py-pyyaml') - depends_on('py-scipy') - depends_on('py-sqlalchemy') - depends_on('util-linux') - depends_on('yaml-cpp+shared') - - - # dummy installer; it's a "meta" package - def install(self, spec, prefix): - mkdirp(prefix.etc) - install(__file__, join_path(prefix.etc, spec.name + '.py')) diff --git a/packages/py-pybind11/package.py b/packages/py-pybind11/package.py deleted file mode 100644 index a353ce632ee5a6285bf02e822714e071becf18b2..0000000000000000000000000000000000000000 --- a/packages/py-pybind11/package.py +++ /dev/null @@ -1,91 +0,0 @@ -# Copyright 2013-2021 Lawrence Livermore National Security, LLC and other -# Spack Project Developers. See the top-level COPYRIGHT file for details. -# -# SPDX-License-Identifier: (Apache-2.0 OR MIT) - -import os - -from spack import * - - -class PyPybind11(CMakePackage): - """pybind11 -- Seamless operability between C++11 and Python. - - pybind11 is a lightweight header-only library that exposes C++ types in - Python and vice versa, mainly to create Python bindings of existing C++ - code. Its goals and syntax are similar to the excellent Boost.Python - library by David Abrahams: to minimize boilerplate code in traditional - extension modules by inferring type information using compile-time - introspection.""" - - homepage = "https://pybind11.readthedocs.io" - url = "https://github.com/pybind/pybind11/archive/v2.6.2.tar.gz" - git = "https://github.com/pybind/pybind11.git" - - maintainers = ['ax3l'] - - version('master', branch='master') - version('2.7.0', sha256='6cd73b3d0bf3daf415b5f9b87ca8817cc2e2b64c275d65f9500250f9fee1677e') - version('2.6.2', sha256='8ff2fff22df038f5cd02cea8af56622bc67f5b64534f1b83b9f133b8366acff2') - version('2.6.1', sha256='cdbe326d357f18b83d10322ba202d69f11b2f49e2d87ade0dc2be0c5c34f8e2a') - version('2.5.0', sha256='97504db65640570f32d3fdf701c25a340c8643037c3b69aec469c10c93dc8504') - version('2.4.3', sha256='1eed57bc6863190e35637290f97a20c81cfe4d9090ac0a24f3bbf08f265eb71d') - version('2.3.0', sha256='0f34838f2c8024a6765168227ba587b3687729ebf03dc912f88ff75c7aa9cfe8') - version('2.2.4', sha256='b69e83658513215b8d1443544d0549b7d231b9f201f6fc787a2b2218b408181e') - version('2.2.3', sha256='3a3b7b651afab1c5ba557f4c37d785a522b8030dfc765da26adc2ecd1de940ea') - version('2.2.2', sha256='b639a2b2cbf1c467849660801c4665ffc1a4d0a9e153ae1996ed6f21c492064e') - version('2.2.1', sha256='f8bd1509578b2a1e7407d52e6ee8afe64268909a1bbda620ca407318598927e7') - version('2.2.0', sha256='1b0fda17c650c493f5862902e90f426df6751da8c0b58c05983ab009951ed769') - version('2.1.1', sha256='f2c6874f1ea5b4ad4ffffe352413f7d2cd1a49f9050940805c2a082348621540') - version('2.1.0', sha256='2860f2b8d0c9f65f0698289a161385f59d099b7ead1bf64e8993c486f2b93ee0') - - depends_on('py-setuptools', type='build') - depends_on('py-pytest', type='test') - - extends('python') - - # compiler support - conflicts('%gcc@:4.7') - conflicts('%clang@:3.2') - conflicts('%intel@:16') - - def cmake_args(self): - args = [] - args.append('-DPYTHON_EXECUTABLE:FILEPATH=%s' - % self.spec['python'].command.path) - args += [ - self.define('PYBIND11_TEST', self.run_tests) - ] - return args - - def setup_build_environment(self, env): - env.set('PYBIND11_USE_CMAKE', 1) - - # https://github.com/pybind/pybind11/pull/1995 - @when('@:2.4.99') - def patch(self): - """ see https://github.com/spack/spack/issues/13559 """ - filter_file('import sys', - 'import sys; return "{0}"'.format(self.prefix.include), - 'pybind11/__init__.py', - string=True) - - def install(self, spec, prefix): - super(PyPybind11, self).install(spec, prefix) - setup_py('install', '--single-version-externally-managed', '--root=/', - '--prefix={0}'.format(prefix)) - - @run_after('install') - @on_package_attributes(run_tests=True) - def install_test(self): - with working_dir('spack-test', create=True): - # test include helper points to right location - python = self.spec['python'].command - py_inc = python( - '-c', - 'import pybind11 as py; ' + - self.spec['python'].package.print_string('py.get_include()'), - output=str).strip() - for inc in [py_inc, self.prefix.include]: - inc_file = join_path(inc, 'pybind11', 'pybind11.h') - assert os.path.isfile(inc_file) diff --git a/packages/pynn-brainscales/package.py b/packages/pynn-brainscales/package.py index bd42fdc988a72060c571e85c78f4aefd920a7752..68dbdeff7dcf1f2d5ed17cc6a4c8e091c8bdbb71 100644 --- a/packages/pynn-brainscales/package.py +++ b/packages/pynn-brainscales/package.py @@ -1,4 +1,4 @@ -# Copyright 2013-2021 Lawrence Livermore National Security, LLC and other +# Copyright 2013-2022 Lawrence Livermore National Security, LLC and other # Spack Project Developers. See the top-level COPYRIGHT file for details. # # SPDX-License-Identifier: (Apache-2.0 OR MIT) @@ -13,7 +13,49 @@ class PynnBrainscales(WafPackage): git = "https://github.com/electronicvisions/pynn-brainscales.git" version('2.0-rc1', branch='waf') - depends_on('meta-brainscales', type=('build', 'link', 'run')) + + # PPU compiler dependencies + depends_on('gettext') + depends_on('zlib') + depends_on('bison') + depends_on('flex') + depends_on('m4') + depends_on('texinfo') + depends_on('wget') + conflicts('flex', when='@2.6.3', msg='Binutils 2.25 for Nux doesn\'t build with flex 2.6.3.') + + # host software dependencies + depends_on('bitsery', type=('build', 'link', 'run')) + depends_on('binutils+gold+ld+plugins', type=('build', 'link', 'run')) # specialize + depends_on('boost@1.69.0: +graph+icu+mpi+python+numpy+coroutine+context cxxstd=17', type=('build', 'link', 'run')) # specialize boost (non-clingo, type=('build', 'link', 'run')) + depends_on('cereal', type=('build', 'link', 'run')) + depends_on('cppcheck', type=('build', 'link', 'run')) + depends_on('doxygen+graphviz', type=('build', 'link', 'run')) + depends_on('genpybind@ebrains', type=('build', 'link', 'run')) + depends_on('gflags', type=('build', 'link', 'run')) + depends_on('googletest@1.11.0: +gmock', type=('build', 'link', 'run')) # variadic templates needed + depends_on('intel-tbb', type=('build', 'link', 'run')) # ppu gdbserver + depends_on('libelf', type=('build', 'link', 'run')) + depends_on('liblockfile', type=('build', 'link', 'run')) + depends_on('llvm', type=('build', 'link', 'run')) + depends_on('log4cxx', type=('build', 'link', 'run')) + depends_on('pkg-config', type=('build', 'link', 'run')) + depends_on('python@3.7.0:', type=('build', 'link', 'run')) # BrainScaleS(-2, type=('build', 'link', 'run')) only supports Python >= 3.7 + depends_on('py-h5py', type=('build', 'link', 'run')) # PyNN tests need it + depends_on('py-matplotlib', type=('build', 'link', 'run')) + depends_on('py-nose', type=('build', 'link', 'run')) + depends_on('py-numpy', type=('build', 'link', 'run')) + depends_on('py-pybind11', type=('build', 'link', 'run')) + depends_on('py-pybind11-stubgen', type=('build', 'link', 'run')) + depends_on('py-pycodestyle', type=('build', 'link', 'run')) + depends_on('py-pyelftools', type=('build', 'link', 'run')) + depends_on('py-pylint', type=('build', 'link', 'run')) + depends_on('py-pynn@0.9.4:', type=('build', 'link', 'run')) + depends_on('py-pyyaml', type=('build', 'link', 'run')) + depends_on('py-scipy', type=('build', 'link', 'run')) + depends_on('py-sqlalchemy', type=('build', 'link', 'run')) + depends_on('util-linux', type=('build', 'link', 'run')) + depends_on('yaml-cpp+shared', type=('build', 'link', 'run')) extends('python') def setup_build_environment(self, env): @@ -26,6 +68,7 @@ class PynnBrainscales(WafPackage): query = self.spec[dep.name] try: include.extend(query.headers.directories) + print('headers:', query.headers.directories, "\n") except: pass @@ -34,7 +77,7 @@ class PynnBrainscales(WafPackage): query = self.spec[dep.name] try: library.extend(query.libs.directories) - print(query.libs.directories, "\n") + print('libs:', query.libs.directories, "\n") except: pass @@ -43,6 +86,7 @@ class PynnBrainscales(WafPackage): query = self.spec[dep.name] try: path.append(query.prefix.bin) + print('bin:', query.prefix.bin, "\n") except: pass diff --git a/spack.yaml b/spack.yaml index 96b5c418eddd2933888dd9c2b6f7b63add70bcee..dd048a31914287bfe55f3ae16e9fbf61e38f0bf5 100644 --- a/spack.yaml +++ b/spack.yaml @@ -3,7 +3,7 @@ spack: # Base - python@3.8.11 %gcc@10.3.0 # Notebook - - py-jupyter %gcc@10.3.0 + #- py-jupyter %gcc@10.3.0 - py-ipython %gcc@10.3.0 - py-ipykernel %gcc@10.3.0 - py-notebook %gcc@10.3.0 @@ -22,17 +22,15 @@ spack: - neuron +mpi %gcc@10.3.0 - py-pynn@0.9.6 %gcc@10.3.0 - tvb-data %gcc@10.3.0 - - tvb-library ^binutils+ld+gold %gcc@10.3.0 + - tvb-library ^py-numba@0.54.0 ^binutils+ld+gold %gcc@10.3.0 - tvb-storage ^binutils+ld+gold %gcc@10.3.0 - py-pyaescrypt %gcc@10.3.0 - py-formencode %gcc@10.3.0 - tvb-framework ^binutils+ld+gold %gcc@10.3.0 - - meta-brainscales %gcc@10.3.0 - pynn-brainscales@2.0-rc1 ^log4cxx@0.10.0 ^googletest@1.11.0:+gmock %gcc@10.3.0 + #- py-torch~mkldnn~cuda~cudnn~onnx_ml~rocm~tensorpipe~mpi~distributed ^protobuf@:3.17.999 %gcc@10.3.0 #- py-lfpy@2.2.3 %gcc@10.3.0 - - biobb-common %gcc@10.3.0 + #- biobb-common %gcc@10.3.0 # demo for codejam12 - - funniest1022 %gcc@10.3.0 - # NRP - - py-torch~mkldnn~cuda~cudnn~onnx_ml~rocm~tensorpipe~mpi~distributed ^protobuf@:3.17.999 %gcc@10.3.0 + #- funniest1022 %gcc@10.3.0 concretization: together diff --git a/spack_releases_info.txt b/spack_releases_info.txt index 77c63a6aaf4fd8af1f78e82449fb03ffc672f5ad..82fc59e37b09601af98c52c299b0ef41bf4f0019 100644 --- a/spack_releases_info.txt +++ b/spack_releases_info.txt @@ -1,4 +1,23 @@ +### Prod ### + # release_v0.1_202109 +Spack upstream commit sha -> 9853fd50e2dc6253a2c80b38fc3bad8f226ce94e +"display_name": "EBRAINS_release_v0.1_202109" +spack env: release_v0_1_202109 + # release_v0.1_202109_hotfix Spack upstream commit sha -> 9853fd50e2dc6253a2c80b38fc3bad8f226ce94e "display_name": "EBRAINS_release_v0.1_202109" +spack env: release_v0_1_202109_hotfix + +### Experimental ### +# experimental_rel +Spack upstream commit sha -> 9853fd50e2dc6253a2c80b38fc3bad8f226ce94e +"display_name": "EBRAINS_experimental_release" +spack env: experimental + +### Int release ### +# master +Spack upstream commit sha -> a8d440d3ababcdec20d665ad938ab880cd9b9d17 +"display_name": "EBRAINS_release_v0.2_202112" +spack env: release_v0_2_202112