浏览代码

tao_idl: add Linux/OS X/iOS (#7178)

* empty

* empty

* empty

* tao_idl: init

* fixup identtion for test

* android NDK for windows, builds dependency `ace` by `MSVC cl.exe` linker for some reason.

* retry with `path.unix(linkdir)`

* clean

* test

* retry fix -lace

* if linkdirs is two or more need to wrap

* re

* Update xmake.lua

* drop bsd & android

* Update xmake.lua
Saikari 4 月之前
父节点
当前提交
cb68879de9
共有 1 个文件被更改,包括 54 次插入0 次删除
  1. 54 0
      packages/t/tao_idl/xmake.lua

+ 54 - 0
packages/t/tao_idl/xmake.lua

@@ -16,6 +16,60 @@ package("tao_idl")
         package:addenv("PATH", "bin")
         package:addenv("PATH", "bin")
     end)
     end)
 
 
+    on_install("linux", "macosx", "iphoneos", function(package)
+        import("package.tools.make")
+        local envs = make.buildenvs(package)
+        if package:is_plat("linux") then
+            io.writefile("ace/config.h", [[#include "ace/config-linux.h"]])
+            io.writefile("include/makeinclude/platform_macros.GNU", [[include $(ACE_ROOT)/include/makeinclude/platform_linux_common.GNU]])
+        elseif package:is_plat("macosx") then
+            io.writefile("ace/config.h", [[#include "ace/config-macosx.h"]])
+            io.writefile("include/makeinclude/platform_macros.GNU", [[include $(ACE_ROOT)/include/makeinclude/platform_macosx.GNU]])
+        elseif package:is_plat("iphoneos") then
+            io.writefile("ace/config.h", [[#include "ace/config-macosx-iOS.h"]])
+            io.writefile("include/makeinclude/platform_macros.GNU", [[include $(ACE_ROOT)/include/makeinclude/platform_macosx_iOS.GNU]])
+            envs.IPHONE_TARGET = "HARDWARE"
+            io.replace("include/makeinclude/platform_macosx_iOS.GNU", "CCFLAGS += -DACE_HAS_IOS", "CCFLAGS += -DACE_HAS_IOS -std=c++17", {plain = true})
+        end
+        envs.LIBCHECK = "1"
+        envs.ACE_ROOT = os.curdir()
+        envs.TAO_ROOT = path.join(os.curdir(), "TAO")
+        envs.INSTALL_PREFIX = package:installdir()
+        local ace_libdir
+        local lib_paths = {}
+        local packagedep = package:dep("ace")
+        if packagedep then
+            local fetchinfo = packagedep:fetch()
+            if fetchinfo then
+                for _, linkdir in ipairs(fetchinfo.linkdirs) do
+                    table.insert(lib_paths, linkdir)
+                end
+            end
+        end
+        ace_libdir = table.concat(lib_paths, " -L")
+        ace_libdir = "-L" .. ace_libdir
+        os.cd("apps/gperf/src")
+        io.replace("GNUmakefile.gperf", [[-L../../../lib]], ace_libdir, {plain = true})
+        make.build(package, {"all"}, {envs = envs})
+        make.make(package, {"install"}, {envs = envs})
+        os.cd("../../../TAO/TAO_IDL")
+        io.replace("GNUmakefile.TAO_IDL_ACE",
+            [[depend: ACE-depend gperf-depend TAO_IDL_FE-depend TAO_IDL_BE-depend TAO_IDL_BE_VIS_A-depend TAO_IDL_BE_VIS_C-depend TAO_IDL_BE_VIS_E-depend TAO_IDL_BE_VIS_I-depend TAO_IDL_BE_VIS_O-depend TAO_IDL_BE_VIS_S-depend TAO_IDL_BE_VIS_U-depend TAO_IDL_BE_VIS_V-depend TAO_IDL_EXE-depend]],
+            [[depend: gperf-depend TAO_IDL_FE-depend TAO_IDL_BE-depend TAO_IDL_BE_VIS_A-depend TAO_IDL_BE_VIS_C-depend TAO_IDL_BE_VIS_E-depend TAO_IDL_BE_VIS_I-depend TAO_IDL_BE_VIS_O-depend TAO_IDL_BE_VIS_S-depend TAO_IDL_BE_VIS_U-depend TAO_IDL_BE_VIS_V-depend TAO_IDL_EXE-depend]],
+            {plain = true})
+        io.replace("GNUmakefile.TAO_IDL_ACE",
+            [[all: ACE gperf TAO_IDL_FE TAO_IDL_BE TAO_IDL_BE_VIS_A TAO_IDL_BE_VIS_C TAO_IDL_BE_VIS_E TAO_IDL_BE_VIS_I TAO_IDL_BE_VIS_O TAO_IDL_BE_VIS_S TAO_IDL_BE_VIS_U TAO_IDL_BE_VIS_V TAO_IDL_EXE]],
+            [[all: gperf TAO_IDL_FE TAO_IDL_BE TAO_IDL_BE_VIS_A TAO_IDL_BE_VIS_C TAO_IDL_BE_VIS_E TAO_IDL_BE_VIS_I TAO_IDL_BE_VIS_O TAO_IDL_BE_VIS_S TAO_IDL_BE_VIS_U TAO_IDL_BE_VIS_V TAO_IDL_EXE]],
+            {plain = true})
+        io.replace("GNUmakefile.TAO_IDL_ACE", [[$(KEEP_GOING)@cd ../../ace && $(MAKE) -f GNUmakefile.ACE $(@)]], [[]], {plain = true})
+        for _, GNUmakefile in ipairs(os.files("GNUmakefile.*")) do
+            io.replace(GNUmakefile, [[-L../../lib]], ace_libdir, {plain = true})
+        end
+        make.build(package, {"all"}, {envs = envs})
+        make.make(package, {"install"}, {envs = envs})
+        os.tryrm(path.join(package:installdir(), "share"))
+    end)
+
     on_install("windows", function(package)
     on_install("windows", function(package)
         import("package.tools.msbuild")
         import("package.tools.msbuild")
         local include_paths = {"..", "include", "be_include", "fe"}
         local include_paths = {"..", "include", "be_include", "fe"}