Explorar el Código

add pagmo (#614)

* add pagmo

* improve glad

* support opencv/mingw
Hoildkv hace 3 años
padre
commit
93902d5394

+ 6 - 1
packages/g/glad/xmake.lua

@@ -8,10 +8,15 @@ package("glad")
              "https://github.com/Dav1dde/glad.git")
     add_versions("v0.1.34", "4be2900ff76ac71a2aab7a8be301eb4c0338491c7e205693435b09aad4969ecd")
 
-    add_deps("cmake", "python 3.x", {kind = "binary"})
     if is_plat("linux") then
         add_syslinks("dl")
     end
+    on_load("windows", "linux", "macosx", function (package)
+        if not package.is_built or package:is_built() then
+            package:add("deps", "cmake", "python 3.x", {kind = "binary"})
+        end
+    end)
+
     on_install("windows", "linux", "macosx", function (package)
         local configs = {"-DGLAD_INSTALL=ON", "-DGLAD_REPRODUCIBLE=ON"}
         if package:is_plat("windows") then

+ 1 - 0
packages/n/nlopt/xmake.lua

@@ -8,6 +8,7 @@ package("nlopt")
              "https://github.com/stevengj/nlopt.git")
     add_versions("v2.7.0", "b881cc2a5face5139f1c5a30caf26b7d3cb43d69d5e423c9d78392f99844499f")
 
+    add_deps("cmake")
     on_install("linux", "windows", "macosx", function (package)
         local configs = {"-DNLOPT_PYTHON=OFF", "-DNLOPT_OCTAVE=OFF", "-DNLOPT_MATLAB=OFF", "-DNLOPT_GUILE=OFF", "-DNLOPT_TESTS=OFF"}
         table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:debug() and "Debug" or "Release"))

+ 15 - 5
packages/o/opencv/xmake.lua

@@ -2,6 +2,7 @@ package("opencv")
 
     set_homepage("https://opencv.org/")
     set_description("A open source computer vision library.")
+    set_license("Apache-2.0")
 
     add_urls("https://github.com/opencv/opencv/archive/$(version).tar.gz",
              "https://github.com/opencv/opencv.git")
@@ -61,11 +62,11 @@ package("opencv")
         add_frameworks("Foundation", "CoreFoundation", "CoreGraphics", "AppKit", "OpenCL", "Accelerate")
     elseif is_plat("linux") then
         add_syslinks("pthread", "dl")
-    elseif is_plat("windows") then
+    elseif is_plat("windows", "mingw") then
         add_syslinks("gdi32", "user32", "glu32", "opengl32", "advapi32", "comdlg32", "ws2_32")
     end
 
-    on_load("linux", "macosx", "windows", function (package)
+    on_load("linux", "macosx", "windows", "mingw@windows,msys", function (package)
         if package:is_plat("windows") then
             local arch = (package:is_arch("x64") and "x64" or "x86")
             local linkdir = (package:config("shared") and "lib" or "staticlib")
@@ -76,8 +77,13 @@ package("opencv")
             elseif vs == "2019" then vc_ver = "vc16"
             end
             package:add("linkdirs", path.join(arch, vc_ver, linkdir))
+        elseif package:is_plat("mingw") then
+            local arch = (package:is_arch("x86_64") and "x64" or "x86")
+            local linkdir = (package:config("shared") and "lib" or "staticlib")
+            package:add("linkdirs", path.join(arch, "mingw", linkdir))
         elseif package:version():ge("4.0") then
             package:add("includedirs", "include/opencv4")
+            package:add("linkdirs", "lib", "lib/opencv4/3rdparty")
         end
         if package:config("blas") then
             package:add("deps", package:config("blas"))
@@ -95,7 +101,7 @@ package("opencv")
         end
     end)
 
-    on_install("linux", "macosx", "windows", function (package)
+    on_install("linux", "macosx", "windows", "mingw@windows,msys", function (package)
         io.replace("cmake/OpenCVUtils.cmake", "if(PKG_CONFIG_FOUND OR PkgConfig_FOUND)", "if(NOT WIN32 AND (PKG_CONFIG_FOUND OR PkgConfig_FOUND))", {plain = true})
         local configs = {"-DCMAKE_OSX_DEPLOYMENT_TARGET=",
                          "-DBUILD_PERF_TESTS=OFF",
@@ -122,6 +128,8 @@ package("opencv")
         table.insert(configs, "-DBUILD_SHARED_LIBS=" .. (package:config("shared") and "ON" or "OFF"))
         if package:is_plat("windows") then
             table.insert(configs, "-DBUILD_WITH_STATIC_CRT=" .. (package:config("vs_runtime"):startswith("MT") and "ON" or "OFF"))
+        elseif package:is_plat("mingw") then
+            table.insert(configs, "-DCMAKE_SYSTEM_PROCESSOR=" .. (package:is_arch("x86_64") and "x86_64" or "x86"))
         end
         local resourcedir = package:resourcedir("opencv_contrib")
         if resourcedir then
@@ -153,8 +161,11 @@ package("opencv")
                     package:add("links", path.basename(f))
                 end
             end
-            package:add("linkdirs", linkdir)
             package:addenv("PATH", path.join(arch, vc_ver, "bin"))
+        elseif package:is_plat("mingw") then
+            local arch = package:is_arch("x86_64") and "x64" or "x86"
+            local linkdir = (package:config("shared") and "lib" or "staticlib")
+            package:addenv("PATH", path.join(arch, "mingw", "bin"))
         else
             if package:version():ge("4.0") then
                 -- scanning for links for old xmake version
@@ -168,7 +179,6 @@ package("opencv")
                         end
                     end
                 end
-                package:add("linkdirs", "lib", "lib/opencv4/3rdparty")
             end
             package:addenv("PATH", "bin")
         end

+ 55 - 0
packages/p/pagmo/xmake.lua

@@ -0,0 +1,55 @@
+package("pagmo")
+
+    set_homepage("https://esa.github.io/pagmo2/index.html")
+    set_description("pagmo is a C++ scientific library for massively parallel optimization.")
+    set_license("LGPL-3.0")
+
+    add_urls("https://github.com/esa/pagmo2/archive/refs/tags/$(version).tar.gz",
+             "https://github.com/esa/pagmo2.git")
+    add_versions("v2.18.0", "5ad40bf3aa91857a808d6b632d9e1020341a33f1a4115d7a2b78b78fd063ae31")
+
+    local configdeps = {eigen = "EIGEN3", nlopt = "NLOPT", --[[ipopt = "IPOPT"]]}
+    for config, dep in pairs(configdeps) do
+        add_configs(config, {description = "Enable features against " .. config .. ".", default = true, type = "boolean"})
+    end
+
+    add_deps("cmake", "tbb <2021.0")
+    add_deps("boost", {configs = {serialization = true}})
+    on_load("windows", "macosx", "linux", function (package)
+        for config, dep in pairs(configdeps) do
+            if package:config(config) then
+                package:add("deps", config)
+            end
+        end
+    end)
+
+    on_install("windows", "macosx", "linux", function (package)
+        local configs = {"-DCMAKE_INSTALL_LIBDIR=lib", "-DPAGMO_BUILD_TESTS=OFF", "-DBoost_USE_STATIC_LIBS=ON"}
+        table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:debug() and "Debug" or "Release"))
+        table.insert(configs, "-DPAGMO_BUILD_STATIC_LIBRARY=" .. (package:config("shared") and "OFF" or "ON"))
+        for config, dep in pairs(configdeps) do
+            table.insert(configs, "-DPAGMO_WITH_" .. dep .. "=" .. (package:config(config) and "ON" or "OFF"))
+        end
+        if package:is_plat("windows") then
+            table.insert(configs, "-DBoost_USE_STATIC_RUNTIME=" .. (package:config("vs_runtime"):startswith("MT") and "ON" or "OFF"))
+        end
+        import("package.tools.cmake").install(package, configs)
+    end)
+
+    on_test(function (package)
+        assert(package:check_cxxsnippets({test = [[
+            #include <pagmo/algorithm.hpp>
+            #include <pagmo/algorithms/sade.hpp>
+            #include <pagmo/archipelago.hpp>
+            #include <pagmo/problem.hpp>
+            #include <pagmo/problems/schwefel.hpp>
+            void test() {
+                using namespace pagmo;
+                problem prob{schwefel(30)};
+                algorithm algo{sade(100)};
+                archipelago archi{16u, algo, prob, 20u};
+                archi.evolve(10);
+                archi.wait_check();
+            }
+        ]]}, {configs = {languages = "c++17"}}))
+    end)