1*be66b3a1Stbbdev#%Module1.0################################################################### 2*be66b3a1Stbbdev# 3*be66b3a1Stbbdev# Copyright (c) 2020-2021 Intel Corporation 4*be66b3a1Stbbdev# 5*be66b3a1Stbbdev# Licensed under the Apache License, Version 2.0 (the "License"); 6*be66b3a1Stbbdev# you may not use this file except in compliance with the License. 7*be66b3a1Stbbdev# You may obtain a copy of the License at 8*be66b3a1Stbbdev# 9*be66b3a1Stbbdev# http://www.apache.org/licenses/LICENSE-2.0 10*be66b3a1Stbbdev# 11*be66b3a1Stbbdev# Unless required by applicable law or agreed to in writing, software 12*be66b3a1Stbbdev# distributed under the License is distributed on an "AS IS" BASIS, 13*be66b3a1Stbbdev# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*be66b3a1Stbbdev# See the License for the specific language governing permissions and 15*be66b3a1Stbbdev# limitations under the License. 16*be66b3a1Stbbdev 17*be66b3a1Stbbdev# Why all the directory and filename boilerplate code? It is needed in order 18*be66b3a1Stbbdev# to properly remove symbolic links used in assembly of the modulefiles 19*be66b3a1Stbbdev# folder as well as those found within the oneAPI installation folders. 20*be66b3a1Stbbdev# Without it many modulefiles will fail to work as expected. 21*be66b3a1Stbbdev 22*be66b3a1Stbbdev# IMPORTANT: quotes around "$variables" and "[expressions]" are there 23*be66b3a1Stbbdev# to insure that paths/filenames which include spaces are handled properly. 24*be66b3a1Stbbdev 25*be66b3a1Stbbdev# This modulefile requires Environment Modules 4.1 or later. 26*be66b3a1Stbbdev# Type `module --version` to determine the current installed version. 27*be66b3a1Stbbdev 28*be66b3a1Stbbdevset min_tcl_ver 8.4 29*be66b3a1Stbbdevif { $tcl_version < $min_tcl_ver } { 30*be66b3a1Stbbdev puts stderr " " 31*be66b3a1Stbbdev puts stderr "ERROR: This modulefile requires tcl $min_tcl_ver or greater." 32*be66b3a1Stbbdev puts stderr "Your system reports that tclsh version $tcl_version is installed." 33*be66b3a1Stbbdev exit 1 34*be66b3a1Stbbdev} 35*be66b3a1Stbbdev 36*be66b3a1Stbbdev# get full pathname for this script file 37*be66b3a1Stbbdevset scriptpath "${ModulesCurrentModulefile}" 38*be66b3a1Stbbdev 39*be66b3a1Stbbdev# if modulefile script name is a symlink, resolve it 40*be66b3a1Stbbdevif { "[file type "$scriptpath"]" eq "link" } { 41*be66b3a1Stbbdev set scriptpath "[file readlink "$scriptpath"]" 42*be66b3a1Stbbdev} 43*be66b3a1Stbbdev 44*be66b3a1Stbbdev# if fullpath contains links, resolve them 45*be66b3a1Stbbdevset scriptpath "[file normalize "$scriptpath"]" 46*be66b3a1Stbbdev 47*be66b3a1Stbbdev# get directory holding this modulefile script and others 48*be66b3a1Stbbdevset modulefileroot "[file dirname "$scriptpath"]" 49*be66b3a1Stbbdev 50*be66b3a1Stbbdev# get name of modulefile script we are loading 51*be66b3a1Stbbdevset modulefilename "[file tail "$scriptpath"]" 52*be66b3a1Stbbdev 53*be66b3a1Stbbdev# determine modulefile script version 54*be66b3a1Stbbdevset modulefilever "[file dirname "$modulefileroot"]" 55*be66b3a1Stbbdevset modulefilever "[file tail "$modulefilever"]" 56*be66b3a1Stbbdev 57*be66b3a1Stbbdev# point to component top-level root folder 58*be66b3a1Stbbdevset componentroot "[file dirname "$modulefileroot"]" 59*be66b3a1Stbbdevset componentroot "[file dirname "$componentroot"]" 60*be66b3a1Stbbdev 61*be66b3a1Stbbdev# get component folder name 62*be66b3a1Stbbdevset componentname "[file tail "$componentroot"]" 63*be66b3a1Stbbdev 64*be66b3a1Stbbdev# get oneAPI top-level root folder 65*be66b3a1Stbbdevset oneapiroot "[file dirname "$componentroot"]" 66*be66b3a1Stbbdev 67*be66b3a1Stbbdev# disallow loading multiple versions of this modulefile 68*be66b3a1Stbbdev# disallow loading multiple architectures of this modulefile 69*be66b3a1Stbbdev# if only 64-bit architecture exists the test still works 70*be66b3a1Stbbdevset mname32 $modulefilename 71*be66b3a1Stbbdevset mname64 [string trimright $mname32 "32"] 72*be66b3a1Stbbdevif { [string equal "$mname32" "$mname64"] } { 73*be66b3a1Stbbdev append mname32 "32" 74*be66b3a1Stbbdev} 75*be66b3a1Stbbdevconflict $mname32 76*be66b3a1Stbbdevconflict $mname64 77*be66b3a1Stbbdev 78*be66b3a1Stbbdev 79*be66b3a1Stbbdev# On load print component name and version being loaded 80*be66b3a1Stbbdevif { [ module-info mode load ] } { 81*be66b3a1Stbbdev puts stderr "Loading $modulefilename version $modulefilever" 82*be66b3a1Stbbdev} 83*be66b3a1Stbbdev 84*be66b3a1Stbbdev# On `module unload` print component module name and version being removed 85*be66b3a1Stbbdev# Include `module list` message only if this modulefile loads dependent modules 86*be66b3a1Stbbdevif { [ module-info mode ] == "unload" || [ module-info mode ] == "remove" } { 87*be66b3a1Stbbdev puts stderr "Removing $modulefilename version $modulefilever" 88*be66b3a1Stbbdev puts stderr "Use `module list` to view any remaining dependent modules." 89*be66b3a1Stbbdev} 90*be66b3a1Stbbdev 91*be66b3a1Stbbdev 92*be66b3a1Stbbdev# ###### Component Specific env vars setup ################################### 93*be66b3a1Stbbdev 94*be66b3a1Stbbdevset tbbroot "$componentroot/$modulefilever" 95*be66b3a1Stbbdevset tbb_target_arch "intel64" 96*be66b3a1Stbbdev 97*be66b3a1Stbbdevmodule-whatis "Intel(R) oneAPI Threading Building Blocks for $tbb_target_arch." 98*be66b3a1Stbbdev 99*be66b3a1Stbbdevsetenv TBBROOT "$tbbroot" 100*be66b3a1Stbbdev 101*be66b3a1Stbbdevprepend-path CPATH "$tbbroot/include" 102*be66b3a1Stbbdevprepend-path LIBRARY_PATH "$tbbroot/lib/$tbb_target_arch/gcc4.8" 103*be66b3a1Stbbdevprepend-path LD_LIBRARY_PATH "$tbbroot/lib/$tbb_target_arch/gcc4.8" 104*be66b3a1Stbbdevprepend-path CMAKE_PREFIX_PATH "$tbbroot" 105