summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHoildkv <[email protected]>2021-01-24 15:03:00 +0800
committerGitHub <[email protected]>2021-01-24 15:03:00 +0800
commit9885df3060404ab05d81479bdbfeeb792864ec46 (patch)
treebf869967377f9034a2c382bff0fac0e5f21c0309
parent74c973ec421432e0c9ff20e167021748e8e17ee2 (diff)
add intel mkl and tbb detection for windows
-rw-r--r--xmake/modules/detect/packages/find_mkl.lua75
-rw-r--r--xmake/modules/detect/packages/find_tbb.lua62
2 files changed, 137 insertions, 0 deletions
diff --git a/xmake/modules/detect/packages/find_mkl.lua b/xmake/modules/detect/packages/find_mkl.lua
new file mode 100644
index 000000000..4641d5840
--- /dev/null
+++ b/xmake/modules/detect/packages/find_mkl.lua
@@ -0,0 +1,75 @@
+--!A cross-platform build utility based on Lua
+--
+-- Licensed under the Apache License, Version 2.0 (the "License");
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+-- http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+--
+-- Copyright (C) 2015-present, TBOOX Open Source Group.
+--
+-- @author xq114
+-- @file find_mkl.lua
+--
+
+-- imports
+import("lib.detect.find_path")
+import("lib.detect.find_library")
+import("lib.detect.find_package")
+
+-- find mkl
+--
+-- @param opt the package options. e.g. see the options of find_package()
+--
+-- @return see the return value of find_package()
+--
+function main(opt)
+
+ -- for windows platform
+ if opt.plat == "windows" then
+
+ -- init bits
+ local rdir = (opt.arch == "x64" and "intel64" or "ia32")
+
+ -- init search paths
+ local paths = {
+ "$(env ONEAPI_ROOT)\\mkl\\latest",
+ "$(reg HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{09085019-08A5-40A0-B0E8-570C171997A0};InstallLocation)\\mkl\\latest"
+ }
+
+ -- find library
+ local result = {links = {}, linkdirs = {}, includedirs = {}}
+ local linkinfo = find_library("mkl_core", paths, {suffixes = "lib\\" .. rdir})
+ if not linkinfo then
+ -- not found?
+ return
+ end
+ table.insert(result.linkdirs, linkinfo.linkdir)
+ if rdir == "intel64" then
+ table.insert(result.links, "mkl_intel_ilp64")
+ else
+ table.insert(result.links, "mkl_intel_c")
+ end
+
+ -- use tbb if available
+ local tbb_res = find_package("tbb")
+ if tbb_res then
+ table.join2(result.linkdirs, tbb_res.linkdirs)
+ table.join2(result.links, {"mkl_tbb_thread", "mkl_core", "tbb"})
+ else
+ table.join2(result.links, {"mkl_sequential", "mkl_core"})
+ end
+
+ -- find include
+ table.insert(result.includedirs, find_path("mkl.h", paths, {suffixes = "include"}))
+
+ -- ok
+ return result
+ end
+end
diff --git a/xmake/modules/detect/packages/find_tbb.lua b/xmake/modules/detect/packages/find_tbb.lua
new file mode 100644
index 000000000..2c874d7d9
--- /dev/null
+++ b/xmake/modules/detect/packages/find_tbb.lua
@@ -0,0 +1,62 @@
+--!A cross-platform build utility based on Lua
+--
+-- Licensed under the Apache License, Version 2.0 (the "License");
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+-- http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+--
+-- Copyright (C) 2015-present, TBOOX Open Source Group.
+--
+-- @author xq114
+-- @file find_tbb.lua
+--
+
+-- imports
+import("lib.detect.find_path")
+import("lib.detect.find_library")
+
+-- find tbb
+--
+-- @param opt the package options. e.g. see the options of find_package()
+--
+-- @return see the return value of find_package()
+--
+function main(opt)
+
+ -- for windows platform
+ if opt.plat == "windows" then
+
+ -- init bits
+ local rdir = (opt.arch == "x64" and "intel64" or "ia32")
+
+ -- init search paths
+ local paths = {
+ "$(env ONEAPI_ROOT)\\tbb\\latest",
+ "$(reg HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{09085019-08A5-40A0-B0E8-570C171997A0};InstallLocation)\\tbb\\latest"
+ }
+
+ -- find library
+ local result = {links = {}, linkdirs = {}, includedirs = {}}
+ local linkinfo = find_library("tbb", paths, {suffixes = "lib\\" .. rdir .. "\\vc14"})
+ if linkinfo then
+ table.insert(result.linkdirs, linkinfo.linkdir)
+ table.join2(result.links, {"tbb", "tbb_malloc"})
+ else
+ -- not found?
+ return
+ end
+
+ -- find include
+ table.insert(result.includedirs, find_path("tbb\\tbb.h", paths, {suffixes = "include"}))
+
+ -- ok
+ return result
+ end
+end