Showing posts with label msys2. Show all posts
Showing posts with label msys2. Show all posts

Sunday, March 10, 2019

自行編譯 V-rep

背景環境

2018 年除了在 https://github.com/mdecourse/cd2018/issues/15 中記錄如何自製 Windows 10 64 位元系統中的可攜式 3.5.0 rev3 V-rep 外, 還嘗試自行利用 MSYS2 編譯 V-rep, 當時使用的可攜系統為 kmol2018_for_compiling_vrep.zip, 而所完成的結果為 3.4.0 rev1 serialization version 20 的 vrep_kmol.7z.

進入 2019 年, https://github.com/CoppeliaRobotics/v_rep/releases 已經釋出 3.6.0 版, 現在 KMOLab 希望探究, 相同的流程是否能夠完成最新版本 V-rep 的編譯.

當然, 在 Windows 64 位元系統中, 自行編譯 V-rep 的目的, 也是希望透過對於原始碼的研究過程中, 進一步了解 V-rep 相關模組配置的細節, 設法將此一系統的最大功能發揮出來.

首先, 看看 V-rep 3.6.0 相對於 3.4.0, 功能有哪些差異? 從 https://github.com/CoppeliaRobotics/v_rep/releases/tag/vrep-v3.6.0 來看, 隻字未提, 但是從 https://github.com/CoppeliaRobotics/v_rep/releases/tag/v3.5.0 可以知道 3.5.0 版在 2018.02.07 釋出, 因此想知道從 3.4.0 到 3.6.0 V-rep 核心程式之間的差異, 只能自行從累次的提交內容中, 自行爬梳.

接下要進行的工作, 除了設法將最新版製作成可攜之外, 就是一連串程式編譯流程中資料的探索, 目前任務尚未完成, KMOLab 必須繼續努力.

第一個完成的任務為: V-rep 3.6.0 rev1 的可攜系統 v-rep3.6.0_rev1.7z, 先試試看能否在一般的 Windows 10 64 位元系統中執行.

執行編譯

編譯 V-rep 的第一步, 是確認系統所使用的  Lua 版本, 因為整體的 V-rep 架構都是植基於 Lua 系統原始碼之上, 截至 V-rep 3.6.0, 官方仍然使用 Lua 5.1 (目前 Lua 最新版已經來到 5.3.5), 從 https://www.lua.org/source/5.1/ 可以查看 5.1.5 原始碼中的內容, 並且可從 https://www.lua.org/ftp/ 下載 Lua 5.1 的原始碼, 之後在命令列中更換目錄到 lua-5.1 之後, 執行 mingw32-make mingw, 表示要使用 MSYS2 中的 mingw32-make 執行 MAKE, 且宣告 platform 為 mingw, 完成編譯後, 可以在 src 目錄中找到 lua.exe 與 lua51.dll.

註: mingw32-make mingw 指令可以正確編譯 lua 5.1, lua 5.1.4, lua 5.3.4 與 lua 5.3.5, 唯獨無法正確編譯 lua 5.1.5, 因為這裡只需要 lua 5.1, 因此不再處理 lua 5.1.5 編譯上的問題.

由於 V-rep 系統中也使用 lua51jit.dll, 因此可以從 http://luajit.org/download.html 下載 LuaJIT-2.0.5, 進入目錄後, 以 mingw32-make 即可完成編譯.

Lua 5.1.5 除錯

前面以為可以無需處理 Lua 5.1.5 編譯問題, 一旦進入 https://github.com/CoppeliaRobotics/v_rep/blob/562bd9fa1b22b9919a9bee03df64436b21529174/config.pri, 赫然看到 V-rep 開發者在 Windows 建議使用的 Lua 版本, 竟然就是 5.1.5 版, 因此, 還是必須處理所碰到的問題.

從 http://lua-users.org/lists/lua-l/2012-08/msg00121.html 得知 Lua 5.1.5 在釋出原始碼之後, 才發現幾個錯誤, 內容記錄於 http://www.lua.org/bugs.html#5.1.5-1, 只要按照說明更新錯誤, 即可利用 mingw32-make mingw 順利編譯出隨後所需的 lua.exe, luac.exe, lua51.dll 與 liblua.a.

下載 Kmol_lua_515_535.7z

編譯 V-rep 核心

第一步必須編輯 y:\vrep360_kmol\v_rep 目錄中的 config.pri 設定檔案, 根據目前所使用的系統設定內容修改如下:

# location of boost headers:
    BOOST_INCLUDEPATH = "y:/boost_1_66_0"    # (e.g. Windows)
    #BOOST_INCLUDEPATH = "/usr/local/include"    # (e.g. MacOS)

# location of lua headers:
    LUA_INCLUDEPATH = "y:/lua-5.1.5/src"    # (e.g. Windows)
    #LUA_INCLUDEPATH = "../../../../../mingw64/include/lua5.1"    # (e.g. Windows-MSYS2)
    #LUA_INCLUDEPATH = "../../lua5_1_4_Linux26g4_64_lib/include"    # (e.g. Ubuntu)
    #LUA_INCLUDEPATH = "/usr/local/include/lua5.1"    # (e.g. MacOS)

# lua libraries to link:
    LUA_LIBS = "y:/lua-5.1.5/src/liblua.a"    # (e.g. Windows)
    #LUA_LIBS = -llua5.1    # (e.g. Windows-MSYS2)
    #LUA_LIBS = -L"../../lua5_1_4_Linux26g4_64_lib/" -llua5.1    # (e.g. Ubuntu)
    #LUA_LIBS = "/usr/local/lib/liblua5.1.dylib"    # (e.g. MacOS)

# qscintilla location:
    QSCINTILLA_DIR = "y:/QScintilla_gpl-2.10.2"    # (e.g. Windows)
    #QSCINTILLA_DIR = "../../QScintilla-commercial-2.7.2"    # (e.g. Windows-MSYS2)
    #QSCINTILLA_DIR = "../../QScintilla-commercial-2.7.2"    # (e.g. Ubuntu)
    #QSCINTILLA_DIR = "../../QScintilla-commercial-2.7.2"    # (e.g. MacOS)

# qscintilla headers:
    QSCINTILLA_INCLUDEPATH = "$${QSCINTILLA_DIR}/include" "$${QSCINTILLA_DIR}/Qt4Qt5"

# qscintilla libraries to link:
    QSCINTILLA_LIBS = "$${QSCINTILLA_DIR}/libqscintilla2_qt5d.dll.a"    # (e.g. Windows)
    #QSCINTILLA_LIBS = "$${QSCINTILLA_DIR}/release/release/libqscintilla2.dll.a"    # (e.g. Windows-MSYS2)    
    #QSCINTILLA_LIBS = "$${QSCINTILLA_DIR}/release/libqscintilla2.so"    # (e.g. Ubuntu)
    #QSCINTILLA_LIBS = "$${QSCINTILLA_DIR}/release/libqscintilla2.9.0.2.dylib"    # (e.g. MacOS)

# Make sure if a config.pri is found one level above, that it will be used instead of this one:
    exists(../config.pri) { include(../config.pri) }


接著在命令列中, 進入 y:\vrep360_kmol\v_rep 目錄, 執行 qmake -o Makefile v_rep.pro, 過程中將取得 Makefile.Release, 可利用 mingw32-make -f Makefile.Release 開始進行 V-rep 核心的編譯流程.

編譯結束後, 可以在 v_rep/release 目錄中得到 V-rep 系統執行所需的 v_rep.dll 與 libv_rep.dll.a.

Sunday, March 3, 2019

在 MSYS2 環境編譯 Solvespace

 以下引用一篇位於 http://project.mde.tw/blog/zai-msys2-huan-jing-bian-yi-solvespace.html 的舊文章.

能夠自行利用隨身碟上的 MSYS2 在 Windows 10 64 位元環境中編譯 https://github.com/solvespace/solvespace, 所代表的意義是, "假如"我們有能力看懂這個小型的參數式 2D/3D 電腦輔助繪圖系統的製作原理, 之後就可以客製化修改此一系統, 加入所要延伸的功能.

只是, 經過四百多天之後, 以下的編譯流程, 還能套用在最新的程式碼嗎?

"假如" 基本的參數式零組件建構軟體已經可以從使用者進階到陽春開發者, 那麼 https://github.com/Range-Software/range3 是否也能夠用類似的流程進行編譯與修改或延伸?

一旦, 協同產品開發者, 擁有最最基本可隨身的 CAD 與 CAE 套件之後, 就終於可以再結合 V-rep, 進行所謂創新產品的開發了嗎?




接下來, "假如"上述彈珠台的每一個立柱, 都裝上感測器, 且被彈珠碰撞後分別代表得分或扣分, "假如" 協同產品設計團隊能夠讓一套所謂具有學習或人工智慧的程式來發球, "它" 有機會可以越學越精準透過發球, 每次都取得彈珠檯遊戲的最高分嗎?

2017.12.25

在 MSYS2 環境編譯 Solvespace 


先前必須在 Ubuntu 或 Windows Visual Studio 環境中, 才能夠編譯 Windows 環境中的 Solvespace 執行檔情況, 在 2014 年 MSYS2 推出之後, 有了截然不同的改變.

MSYS2 建立 Windows 執行程式

MPV 首先發布在 Windows 環境中採用 MSYS2 執行原生編譯, 但是將所依賴的程式庫安裝在 MSYS2 環境中的方法, 並不適用於 Solvespace.

MSYS2 建立 solvespace.exe

在視窗環境, 利用 MSYS2 編譯 Solvespace, 目前已知可行方案為, 只採用 MSYS2 所提供的 gcc 編譯器與 mingw32-make 執行編譯及連結, 但前置處理 Solvespace 所需的 CMake, zlib 與 64 位元 d3dcompiler 程式, 都必須使用 Windows 原生版本. 而且從 Solvespace 下載原始程式後, 必須蓋掉 angle 中搜尋 d3dcompiler_43.dll, d3dcompiler_46.dll 與 d3dcompiler_47.dll 動態連結程式庫的設定.
至於以 CMake 及 mingw32-make 編譯連結得到的 zlib 程式庫, 則必須放入 MSYS2 系統 lib 目錄中, 如此, 一旦在 build 目錄中完成
1
2
cmake .. -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release
mingw32-make
之後, 就可以結合 solvespace.exe, d3dcompiler_43.dll 與 libwinpthread-1.dll, 在 Windows 10 64 位元的環境中啟動執行.

Solvespack 倉儲

根據上述配置所完成的 Solvespace, 專供 KMOLab 程式開發使用, 倉儲位於 Solvespack.

參考資料

下載 kmol_2019.7z

下載 nodejs_with_ungit.7z

p37_adv.7z (下載 5GB, 解開 15 GB)

Qt.7z (下載 8GB, 解開 21 GB)

Solvespace_kmol_2019.7z (100MB)

編譯 Solvespace 流程:

git clone --recursive  https://github.com/solvespace/solvespace

cd solvespace

mkdir build

cd build

cmake .. -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release

mingw32-make

cd bin

solvespace.exe

listdlls64 solvespace.exe

複製執行 Solvespace.exe 所需 dll 或設法將程式庫與 exe 綁定


NX12

NX 12 Help https://docs.plm.automation.siemens.com/tdoc/nx/12/nx_help Python related https://docs.plm.automation.siemens.com/tdoc/nx/...