# Maintainer: Kaixiang Huang: kxhuang0 -at- gmail.com # Contributor: Stephen Cox: stephencoxmail -at- gmail com # Contributor: Alexey Stukalov: astukalov -t- gmail com # Contributor: Ignat Harczuk: ignathe -at- gmail com # Contributor: Mark Wells: mwellsa -at- gmail com # Contributor: Simone Riva: siomone.rva -a- gmail com # Contributor: Hamada Badr: hamada.s.badr -a- gmail com # Intel Parallel Studio XE 2019 for Linux - ( Intel compiler icc suite ) ########################################################################## # this PKGBUILD splits the main Parallel Studio XE package in 10 sub-packages: # # intel-common-libs: Intel Common Libraries # intel-openmp: Intel OpenMP Implementation # intel-compiler-base: Intel C/C++ compiler and base libs # intel-fortran-compiler: Intel Fortran compiler and base libs" # intel-ipp: Intel Integrated Performance Primitives # intel-mpi: Intel Message passing interface (MPI) # intel-tbb_psxe: Intel Threading Building Blocks (TBB) # intel-vtune-profiler: Intel Vtune Profiler # intel-advisor: Intel Advisor # intel-inspector: Intel Inspector ########################################################################### # Parallel Studio XE PKGBUILD script # Copyright (C) 2016-2019 Ignat Harczuk and contibutors # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . pkgbase="intel-parallel-studio-xe" pkgname=('intel-common-libs' 'intel-openmp' 'intel-compiler-base' 'intel-fortran-compiler' 'intel-ipp' 'intel-mpi' 'intel-tbb_psxe' 'intel-advisor' 'intel-vtune-profiler' 'intel-inspector') if [ -z "$FORCE_PKGEXT" ]; then PKGEXT='.pkg.tar.zst' #msg "Overriding the default PKGEXT with '${PKGEXT}' to save compression time" #msg "(change PKGEXT in the PKGBUILD or use FORCE_PKGEXT on the command line" #msg " to override PKGEXT set by the package)." else msg "Overriding PKGEXT with FORCE_PKGEXT='${FORCE_PKGEXT}'" PKGEXT=$FORCE_PKGEXT fi if [ "$PKGEXT" = ".pkg.tar.xz" ]; then plain "--------------------------------------------------------------------" warning "This PKGBUILD may need up to 20 minutes when XZ compressor is used!" warning " - The packaging of intel-mkl and intel-ipp is particularly slow" warning " - Change PKGEXT in PKGBUILD or define FORCE_PKGEXT on the" warning " command line to use a faster compressor, e.g. .pkg.tar.lzo" plain "--------------------------------------------------------------------" fi ######################################## #OPTIONS begin # set to true if you want to remove documentations and examples form the packages. #_remove_docs=TRUE _remove_docs=true # set to true if you want to remove the static objects from the libs. #_remove_static_objects_ipp=true _remove_static_objects_ipp=false ######################################## _year='2020' _v_a='4' _v_b='304' # year, version a and version b found in /opt/intel/compilers_and_libraries_YEAR_A_B _update='4' pkgrel=3 _sp='cluster_edition' _icc_ver='19.1.3' _vtune_ver='2020.3.0.612611' _inspector_ver='2020.3.0.604771' _advisor_ver='2020.3.0.607294' pkgver=${_year}.${_v_a}.${_v_b} # package download folders _dir_nr='17113' options=(strip libtool staticlibs) url="http://software.intel.com/en-us/articles/non-commercial-software-download/" arch=('x86_64') license=('custom') makedepends=('libarchive' 'sed' 'gzip' 'lzop') _parallel_studio_xe_dir="parallel_studio_xe${_year:+_${_year}}${_update:+_update${_update}}${_sp:+_${_sp}}" source=( "http://registrationcenter-download.intel.com/akdlm/IRC_NAS/tec/${_dir_nr}/${_parallel_studio_xe_dir}.tgz" 'intel_compilers.sh' 'intel_vtune-profiler.sh' 'intel_advisor.sh' 'intel_inspector.sh' 'intel-composer.install' 'intel-common-libs.conf' 'intel-fortran.conf' 'intel-openmp.conf' 'intel-mpi.conf' 'intel-ipp.conf' 'intel-tbb.conf' 'intel-tbb.install' 'zsh-fix.patch' 'EULA.txt' ) sha256sums=('f36e49da97b6ce24d2d464d73d7ff49d71cff20e1698c20e607919819602a9f5' '0704025fdfe40e4fce08e88b641128310c3a3b51332668aab60fb815b424f52b' '12f932f99e6d3ee9dd828b95e630f096a9e58707db39bea15fba22a1ad80f211' '63b12c66d9c8c2310a7bbd5206c82ba9667fb6ffb3dc7e3f9304a17ed8c8fbcd' 'fd24842f29d50bc53779dd918fbc548ebf165ff664114e59195773ad04076b5d' '3f96dec03111e69d16bb363acf4d0570e8a9526c09e5e542a7558f1b26d043ef' '31ac4d0f30a93fe6393f48cb13761d7d1ce9719708c76a377193d96416bed884' '6151bc273b6f741a4ce93d8160b6f167c8ad499dbc6e8e3f6e08d48571d6a52a' '99cc9683cc75934cc21bb5a09f6ad83365ee48712719bfd914de9444695eed13' '2345695151930806cc73c14a35b8cde94281def144d0c2c180357862fd08fcaa' 'da6f41c2e002c9a793c75a18c8d1c85ef7ef5bf83a7a0a158ff144481491aac8' '5d3ac1ba31d7fc5795821d95b17956b0c977c8f3576b02f664f8ebf476213a43' 'fde83eb0071a5bd2887de127b56cc573a254e30131ec7b2d956987512c3e90c2' '48632e9831c1066721c0ed8e561cbae1c5bbe470851c05d5de3a05b2b18e676b' '228ac25e147adb9b872e1a562e522d2fd48809ccae89b765112009896a6d55a5') #_archive=l_ccompxe${_comp}_p_${pkgver} if [ "$CARCH" = "i686" ]; then _i_arch='ia32' _bin_dir='bin32' _not_arch='intel64' else _i_arch='intel64' _bin_dir='bin64' _not_arch='ia32' fi extract_rpm() { # filter out rpms for incompatible arch local extract=true if [[ "$1" =~ .noarch.rpm$ ]]; then if [[ "$1" =~ -doc ]]; then if $_remove_docs ; then # don't skip doc rpms because they contain man pages #extract=false extract=true fi fi else if [[ "$1" =~ (-32bit.+\.x86_64|\.i486)\.rpm$ ]]; then if [[ "$CARCH" != 'i686' ]]; then extract=false fi else if [[ "$CARCH" == 'i686' ]]; then extract=false fi fi fi if $extract ; then msg2 " ${1##*/}" bsdtar -xf $1 -C $2 else plain "skipped ${1##*/}" fi } extract_rpms() { # select binary files of specific arch if [ -z "$3" ]; then _rpm_dir="${rpm_dir}" else _rpm_dir="$3" fi for rpm_file in ${_rpm_dir}/$1 ; do extract_rpm ${rpm_file} $2 done } set_build_vars() { _composer_xe_dir="compilers_and_libraries_${_year}.${_v_a}.${_v_b}" rpm_dir=${srcdir}/${_parallel_studio_xe_dir}/rpm xe_build_dir=${srcdir}/cxe_build base_dir=$(realpath ${srcdir}/..) _man_dir=${xe_build_dir}/usr/share/man/man1 } build() { set_build_vars echo ${xe_build_dir} # clean the builds dirs if [ -d ${srcdir}/opt ] ; then rm -rf ${srcdir}/opt fi if [ -d ${srcdir}/etc ] ; then rm -rf ${srcdir}/etc fi if [ -d ${srcdir}/usr ] ; then rm -rf ${srcdir}/usr fi if [ -d ${xe_build_dir} ] ; then rm -rf ${xe_build_dir} fi echo ${srcdir} mkdir -p ${xe_build_dir} # START ! cd ${xe_build_dir} mkdir -p ${xe_build_dir}/etc/profile.d sed "s//${_i_arch}/" < ${srcdir}/intel_compilers.sh > ${xe_build_dir}/etc/profile.d/intel_compilers.sh chmod a+x ${xe_build_dir}/etc/profile.d/intel_compilers.sh mkdir -p ${xe_build_dir}/etc/ld.so.conf.d _cnt=0 for files in ${base_dir}/*.lic ; do _lic_file[_cnt]=${files} _cnt=$(($_cnt+1)) done plain "" plain "-----------------------------------------------------------------------------------" mkdir -p ${xe_build_dir}/opt/intel/licenses if [ -f "${_lic_file[0]}" ]; then cp ${base_dir}/*.lic ${xe_build_dir}/opt/intel/licenses msg "Found Intel license files in ${base_dir}" msg "These will be installed into /opt/intel/licenses" else warning "No Intel license files found in ${base_dir}" warning "Remember to place license files in one of these locations:" warning " /opt/intel/licenses" warning " ~/Licenses" warning "Or the Intel compiler will not work!\e[0m" fi plain "-----------------------------------------------------------------------------------" plain "" cp ${srcdir}/${_parallel_studio_xe_dir}/license.txt ${xe_build_dir}/opt/intel/license.txt echo -e "-----------------------------------------------------------------------------------" echo -e "\e[1mIMPORTANT - READ BEFORE COPYING, INSTALLING, OR USING.\e[0m" echo -e "" echo -e "Do not copy, install, or use the \"Materials\" provided under this license agreement (\"Agreement\"), until you" echo -e "have carefully read the following terms and conditions." echo -e "" echo -e "By copying, installing, or otherwise using the Materials, you agree to be bound by the terms of this" echo -e "Agreement. If you do not agree to the terms of this Agreement, do not copy, install, or use the Materials." echo -e " - A copy of the EULA has been copied in the PKGBUILD directory; plase read carefully the terms and " echo -e " - conditions of the Intel license before installing the packages. " echo -e "-----------------------------------------------------------------------------------" plain "" plain "-------------------------------------------------------------------------------" warning "This PKGBUILD works with yaourt, but consumes a lot of RAM!" warning "Using the makepkg command for building this package is recommended." plain "-------------------------------------------------------------------------------" plain "" msg "Packaging Options:" if ${_remove_docs} ; then msg2 "Remove Documentation: YES" else msg2 "Remove Documentation: NO" fi if ${_remove_static_objects_ipp} ; then msg2 "Remove Static Objects from IPP: YES" warning "If your software is based on the static IPP objects, edit" warning "the _remove_static_objects_ipp option at the line 50 of this PKGBUILD" else msg2 "Remove Static Objects from IPP: NO" fi if [ -d ${pkgdir}/opt ] ; then rm -rf ${pkgdir}/opt fi ; } package_intel-common-libs() { set_build_vars pkgdesc="Intel Common Libraries $_icc_ver" mkdir -p ${xe_build_dir} cd ${xe_build_dir} mkdir -p ./opt mkdir -p ./etc/ld.so.conf.d cp ${srcdir}/intel-common-libs.conf ./etc/ld.so.conf.d/ msg2 "Extracting RPMS" extract_rpms 'intel-comp-ps-ss-bec*.rpm' $xe_build_dir extract_rpms 'intel-c-*.rpm' $xe_build_dir msg2 "Moving package files" mkdir -p ${pkgdir}/etc mv ./opt ${pkgdir} # move ld.so configs, but keep profile.d (should be in intel-compiler-base) mv ./etc/ld.so.conf.d ${pkgdir}/etc/ ln -s ./${_composer_xe_dir}/linux/compiler/lib/${_i_arch}_lin ${pkgdir}/opt/intel/lib } package_intel-openmp() { set_build_vars pkgdesc="Intel OpenMP Implementation ${_icc_ver}" depends=("intel-common-libs=$pkgver") mkdir -p ${xe_build_dir} cd ${xe_build_dir} mkdir -p ./opt msg2 "Extracting RPMS" extract_rpms 'intel-openmp*.rpm' $xe_build_dir msg2 "Moving package files" mv ./opt ${pkgdir}/ } package_intel-compiler-base() { set_build_vars pkgdesc="Intel C/C++ $_icc_ver" depends=("intel-common-libs=$pkgver" "intel-openmp=$pkgver") install=intel-composer.install mkdir -p ${xe_build_dir} cd ${xe_build_dir} mkdir -p ./opt mkdir -p ./etc/profile.d mkdir -p ${_man_dir} msg2 "Extracting RPMS" extract_rpms 'intel-icc*.rpm' $xe_build_dir for rpm_file in `find ${rpm_dir} -name 'intel-comp-*.rpm' ! -name 'intel-comp-ps-ss-bec-*.rpm' -print` ; do extract_rpm $rpm_file $xe_build_dir done msg2 "Updating scripts" cd ./opt/intel/${_composer_xe_dir}/linux/bin #rm uninstall.sh rm *.csh for f in *.sh ; do sed -i 's//\/opt\/intel/g' $f sed -i "s//\/opt\/intel\/${_composer_xe_dir}\/linux/g" $f done msg2 "Copying man pages" mv ${xe_build_dir}/opt/intel/documentation_${_year}/en/man/common/man1/*.1 ${_man_dir} cd ${xe_build_dir}/opt/intel/${_composer_xe_dir}/linux if $_remove_docs ; then msg2 "Removing documentation" rm -rf ./documentation rm -rf ./Documentation rm -rf ./Samples rm -rf ${xe_build_dir}/opt/intel/documentation_${_year} fi msg2 "Moving package files" mv ${xe_build_dir}/opt ${pkgdir}/ mv ${xe_build_dir}/etc ${pkgdir}/ mv ${xe_build_dir}/usr ${pkgdir}/ cd ${pkgdir}/opt/intel ln -s ./${_composer_xe_dir} composerxe ln -s ./${_composer_xe_dir}/linux/bin/${_i_arch} bin ln -s ./${_composer_xe_dir}/linux/pkg_bin pkg_bin patch -p0 < ${srcdir}/zsh-fix.patch #ln -s ./${_composer_xe_dir}/linux/debugger/lib/${_i_arch} debugger_lib #ln -s ./${_composer_xe_dir}/linux/man/ man } package_intel-fortran-compiler() { set_build_vars pkgdesc="Intel Fortran compiler $_icc_ver" depends=("intel-compiler-base=$pkgver") install=intel-composer.install mkdir -p ${xe_build_dir} cd ${xe_build_dir} mkdir -p ./opt mkdir -p ./etc/profile.d mkdir -p ./etc/ld.so.conf.d mkdir -p ${_man_dir} sed "s//${_i_arch}/" < ${srcdir}/intel-fortran.conf > ./etc/ld.so.conf.d/intel-fortran.conf msg2 "Extracting RPMS" extract_rpms 'intel-ifort*.rpm' $xe_build_dir msg2 "Updating scripts" rm ./opt/intel/${_composer_xe_dir}/linux/bin/*.csh #Remove duplicate logo and .css found in intel base rm ${xe_build_dir}/opt/intel/documentation_${_year}/en/compiler_f/ps${_year}/resources/{intel_gsp_styles.css,intel_logo.png} msg2 "Copying man pages" mv ${xe_build_dir}/opt/intel/documentation_${_year}/en/man/common/man1/*.1 ${_man_dir} cd ${xe_build_dir}/opt/intel/${_composer_xe_dir}/linux if $_remove_docs ; then msg2 "Removing documentation" rm -rf ./documentation rm -rf ./Documentation rm -rf ./Samples fi msg2 "Removing duplicate headers found in intel-compiler-base" rm ./compiler/include/omp_lib.f90 rm ./compiler/include/${_i_arch}/omp_lib.mod rm ./compiler/include/${_i_arch}/omp_lib_kinds.mod msg2 "Moving package files" mv ${xe_build_dir}/opt ${pkgdir}/ mv ${xe_build_dir}/etc ${pkgdir}/ mv ${xe_build_dir}/usr ${pkgdir}/ } package_intel-ipp() { set_build_vars pkgdesc="Intel Integrated Performance Primitives" install=intel-composer.install mkdir -p ${xe_build_dir} cd ${xe_build_dir} mkdir -p ./opt mkdir -p ./etc/ld.so.conf.d sed "s//${_i_arch}/" < ${srcdir}/intel-ipp.conf > ./etc/ld.so.conf.d/intel-ipp.conf msg2 "Extracting RPMS" extract_rpms 'intel-ipp-*.rpm' $xe_build_dir msg2 "Updating scripts" cd ${xe_build_dir}/opt/intel/${_composer_xe_dir}/linux/ipp/bin rm ippvars.csh sed -i "s//\/opt\/intel\/${_composer_xe_dir}\/linux/g" ippvars.sh cd ${xe_build_dir}/opt/intel/${_composer_xe_dir}/linux/ if ${_remove_docs} ; then msg2 "Removing documentation" rm -rf ./Documentation fi if ${_remove_static_objects_ipp} ; then msg2 "Removing static objects" rm -f ./ipp/lib/${_i_arch}/libipp*.a rm -f ./ipp/lib/${_i_arch}/nonpic/libipp*.a rmdir ./ipp/lib/${_i_arch}/nonpic/ fi msg2 "Moving package files" mv ${xe_build_dir}/opt ${pkgdir}/ mv ${xe_build_dir}/etc ${pkgdir}/ ln -s ./${_composer_xe_dir}/linux/ipp/ ${pkgdir}/opt/intel/ipp } package_intel-mpi() { set_build_vars pkgdesc="Intel MPI library" mkdir -p ${xe_build_dir} cd ${xe_build_dir} mkdir -p ./opt mkdir -p ./bin mkdir -p ./etc/ld.so.conf.d sed "s//${_i_arch}/" < ${srcdir}/intel-mpi.conf > ./etc/ld.so.conf.d/intel-mpi.conf msg2 "Extracting RPMS" extract_rpms 'intel-mpi-*.rpm' $xe_build_dir msg2 "Updating scripts" cd ./opt/intel/${_composer_xe_dir}/linux/mpi/${_i_arch}/bin rm mpivars.csh #for i in mpd* mpi* no mpd longer since 2017? for i in mpi* ; do sed -i "s/I_MPI_SUBSTITUTE_INSTALLDIR/\/opt\/intel\/${_composer_xe_dir}\/linux\/mpi/g" $i done chmod a+x mpivars.sh rm -rf ${xe_build_dir}/opt/intel/${_composer_xe_dir}/linux/mpi_2019 rm -rf ${xe_build_dir}/opt/intel/${_composer_xe_dir}/licensing/mpi_2019 if $_remove_docs ; then msg2 "Removing documentation" rm -rf ${xe_build_dir}/opt/intel/documentation_${_year} fi msg2 "Moving package files" mv ${xe_build_dir}/opt ${pkgdir} mv ${xe_build_dir}/etc ${pkgdir} ln -s ./${_composer_xe_dir}/linux/mpi/ ${pkgdir}/opt/intel/mpi } package_intel-tbb_psxe() { set_build_vars pkgdesc="Intel Threading Building Blocks (TBB)" install=intel-tbb.install mkdir -p ${xe_build_dir} cd ${xe_build_dir} mkdir -p ./opt mkdir -p ./etc/ld.so.conf.d sed "s//${_i_arch}/" < ${srcdir}/intel-tbb.conf > ./etc/ld.so.conf.d/intel-tbb.conf sed -i "s//\/opt\/intel\/${_composer_xe_dir}/g" ./etc/ld.so.conf.d/intel-tbb.conf msg2 "Extracting RPMS" extract_rpms 'intel-tbb-*.rpm' $xe_build_dir msg2 "Updating scripts" cd ./opt/intel/${_composer_xe_dir}/linux rm ./tbb/bin/tbbvars.csh sed -i "s/SUBSTITUTE_INSTALL_DIR_HERE/\/opt\/intel\/${_composer_xe_dir}\/linux\/tbb/g" ./tbb/bin/tbbvars.sh chmod a+x ./tbb/bin/tbbvars.sh if $_remove_docs ; then msg2 "Removing documentation" rm -rf ./Documentation rm -rf ./tbb/examples fi msg2 "Moving package files" mv ${xe_build_dir}/opt ${pkgdir}/ mv ${xe_build_dir}/etc ${pkgdir}/ ln -s ./${_composer_xe_dir}/linux/tbb/ ${pkgdir}/opt/intel/tbb } package_intel-vtune-profiler() { set_build_vars pkgdesc="Performance profiler for serial and parallel performance analysis $_vtune_ver" depends=('pangox-compat') options=(!strip) mkdir -p ${xe_build_dir} cd ${xe_build_dir} mkdir -p ./opt mkdir -p ./etc/ld.so.conf.d mkdir -p ./etc/profile.d mkdir -p ${_man_dir} msg2 "Updating scripts" sed -e "s//${_bin_dir}/g" -e "s//${_vtune_ver}/g" \ < ${srcdir}/intel_vtune-profiler.sh > etc/profile.d/intel_vtune-profiler.sh chmod a+x ./etc/profile.d/intel_vtune-profiler.sh msg2 "Extracting RPMS" extract_rpms 'intel-vtune-profiler-*.rpm' $xe_build_dir cd ${xe_build_dir}/opt/intel/vtune_profiler_${_vtune_ver} msg2 "Copying man pages" if [[ -d ./man/man1 ]]; then mv ./man/man1/*.1 ${_man_dir}/ fi if $_remove_docs ; then msg2 "Removing documentation" rm -rf ./samples rm -rf ./documentation fi msg2 "Moving package files" mv ${xe_build_dir}/opt ${pkgdir}/ mv ${xe_build_dir}/etc ${pkgdir}/ mv ${xe_build_dir}/usr ${pkgdir}/ } package_intel-advisor() { set_build_vars pkgdesc="Threading design and prototyping tool for software architects $_advisor_ver" conflicts=( 'intel-advisor-xe' ) mkdir -p ${xe_build_dir} cd ${xe_build_dir} mkdir -p ./opt mkdir -p ./etc/ld.so.conf.d mkdir -p ./etc/profile.d mkdir -p ${_man_dir} msg2 "Updating scripts" sed -e "s//${_bin_dir}/g" -e "s//${_advisor_ver}/g" \ < ${srcdir}/intel_advisor.sh > etc/profile.d/intel_advisor.sh chmod a+x ./etc/profile.d/intel_advisor.sh msg2 "Extracting RPMS" extract_rpms 'intel-advisor-*.rpm' $xe_build_dir cd ${xe_build_dir}/opt/intel/advisor_${_advisor_ver} msg2 "Copying man pages" if [[ -d ./man/man1 ]]; then mv ./man/man1/*.1 ${_man_dir}/ fi if $_remove_docs ; then msg2 "Removing documentation" rm -rf ./samples rm -rf ./documentation fi msg2 "Moving package files" mv ${xe_build_dir}/opt ${pkgdir}/ mv ${xe_build_dir}/etc ${pkgdir}/ mv ${xe_build_dir}/usr ${pkgdir}/ } package_intel-inspector() { set_build_vars pkgdesc="Memory and thread debugger $_inspector_ver" conflicts=('intel-inspector-xe') mkdir -p ${xe_build_dir} cd ${xe_build_dir} mkdir -p ./opt mkdir -p ./etc/ld.so.conf.d mkdir -p ./etc/profile.d mkdir -p ${_man_dir} msg2 "Updating scripts" sed -e "s//${_bin_dir}/g" -e "s//${_inspector_ver}/g" \ < ${srcdir}/intel_inspector.sh > ./etc/profile.d/intel_inspector.sh chmod a+x ./etc/profile.d/intel_inspector.sh msg2 "Extracting RPMS" extract_rpms 'intel-inspector-*.rpm' $xe_build_dir cd ${xe_build_dir}/opt/intel/inspector_${_inspector_ver} msg2 "Copying man pages" if [[ -d ./man/man1 ]]; then mv ./man/man1/*.1 ${_man_dir}/ fi if $_remove_docs ; then msg2 "Removing documentation" rm -rf ./samples rm -rf ./documentation fi msg2 "Moving package files" mv ${xe_build_dir}/opt ${pkgdir}/ mv ${xe_build_dir}/etc ${pkgdir}/ mv ${xe_build_dir}/usr ${pkgdir}/ } pkgdesc="Intel C++ C and FORTRAN compiler - Intel Parallel Studio XE - Cluster Edition - icc icpc ifort ipp" depends=('bash' 'gcc')