瀏覽代碼

add openmp (#722)

* add openmp

* Update xmake.lua

* Update xmake.lua
ruki 3 年之前
父節點
當前提交
a45c7956d6
共有 2 個文件被更改,包括 57 次插入23 次删除
  1. 0 23
      packages/l/libomp/xmake.lua
  2. 57 0
      packages/o/openmp/xmake.lua

+ 0 - 23
packages/l/libomp/xmake.lua

@@ -15,29 +15,6 @@ package("libomp")
         add_syslinks("pthread", "dl")
     end
 
-    on_load(function (package)
-        if package.has_tool then
-            for _, toolkind in ipairs({"cc", "cxx"}) do
-                local flagname = toolkind == "cxx" and "cxxflags" or "cflags"
-                if package:has_tool(toolkind, "cl") then
-                    package:add(flagname, "/openmp")
-                elseif package:has_tool(toolkind, "clang", "clangxx") then
-                    if package:is_plat("macosx") then
-                        package:add(flagname, "-Xpreprocessor -fopenmp")
-                    else
-                        package:add(flagname, "-fopenmp")
-                    end
-                elseif package:has_tool(toolkind, "gcc", "gxx") then
-                    package:add(flagname, "-fopenmp")
-                elseif package:has_tool(toolkind, "icc", "icpc") then
-                    package:add(flagname, "-qopenmp")
-                elseif package:has_tool(toolkind, "icl") then
-                    package:add(flagname, "-Qopenmp")
-                end
-            end
-        end
-    end)
-
     on_install("macosx", "linux", "cross", function (package)
         local configs = {"-DLIBOMP_INSTALL_ALIASES=OFF"}
         local shared = package:config("shared")

+ 57 - 0
packages/o/openmp/xmake.lua

@@ -0,0 +1,57 @@
+package("openmp")
+
+    set_homepage("https://openmp.org/")
+    set_description("The OpenMP API specification for parallel programming")
+
+    on_load(function (package)
+        if package.has_tool then
+            for _, toolkind in ipairs({"cc", "cxx"}) do
+                local flagname = toolkind == "cxx" and "cxxflags" or "cflags"
+                if package:has_tool(toolkind, "cl") then
+                    package:add(flagname, "/openmp")
+                elseif package:has_tool(toolkind, "clang", "clangxx") then
+                    if package:is_plat("macosx") then
+                        package:add(flagname, "-Xpreprocessor -fopenmp")
+                    else
+                        package:add(flagname, "-fopenmp")
+                    end
+                elseif package:has_tool(toolkind, "gcc", "gxx") then
+                    package:add(flagname, "-fopenmp")
+                elseif package:has_tool(toolkind, "icc", "icpc") then
+                    package:add(flagname, "-qopenmp")
+                elseif package:has_tool(toolkind, "icl") then
+                    package:add(flagname, "-Qopenmp")
+                end
+            end
+        end
+        if package:is_plat("macosx", "linux") then
+            package:add("deps", "libomp")
+        end
+    end)
+
+    on_fetch(function (package)
+        for _, dep in ipairs(package:orderdeps()) do
+            if not dep:fetch() then
+                return
+            end
+        end
+        return {}
+    end)
+
+    on_install("linux", "macosx", "windows", function (package)
+        -- we need not install anything because we need only compiler flags and deps
+    end)
+
+    on_test(function (package)
+        assert(package:check_csnippets({test = [[
+        #include <stdio.h>
+        #include <omp.h>
+
+        static void test() {
+            #pragma omp parallel
+            {
+                printf("hello %d\n", omp_get_thread_num());
+            }
+        }
+        ]]}))
+    end)