xref: /oneTBB/integration/linux/modulefiles/tbb (revision be66b3a1)
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