Skip to content

OSLwright: A C/C++ Open Source Library Builder for Windows

License

Notifications You must be signed in to change notification settings

qz4wr246/oslwright

Repository files navigation

OSLwright: A C/C++ Open Source Library Builder for Windows

Version License: MIT Language: python OS: Windows

OSLwright は、C/C++オープンソースライブラリ・ビルダーです。 Windows向けのC/C++ネイティブ・ライブラリをスクラッチビルドします。

Warning

🚧 !工事中! 👷‍♀️

ほとんどテストを実施していません。デフォルト設定(リリースビルド)でのビルドを実施しました。

Features

  • Windows向けにC/C++オープンソースライブラリをビルドします。
  • GUIで簡単にパッケージのビルドが出来ます。
  • いくつかパッケージはCMakeConfigを追加しています。pkg-configは相対パスへ変更済み
  • 気まぐれで商業利用に制限の少ないライセンスのパッケージを収集しています。
  • ソースファイルをダウンロードしてスクラッチ・ビルドするので、バージョン管理やソースの追跡が容易です。
  • 特に理由がなければ、vcpkg をお勧めします。

Requirements

次のアプリケーションをインストールしてください。

Get start

  1. Python, VisualStudioなどOSLwrightが依存するアプリケーションをインストールします。

  2. OSLwrightを起動します。
    python仮想環境が作成されOSLwrightが起動します。

    > launch-oslwright.bat
    
  3. 追加ツールダイアログが表示された場合は「Install tools」ボタンを押してください。

  4. ビルドする対象のパッケージを選択します。

  5. [Build all] を押すと、選択されたパッケージが順次ビルドされます。

  6. ビルドされたパッケージは、<OSLwright ディレクトリ>/dist/以下にインストールされます。

How to use the packages

パッケージを使用するには、いくつかの方法があります。

A. パッケージをアプリケーションの開発フォルダへコピーして使用する方法

開発メンバーで開発環境を共有する場合に適しています。

  1. 使用したいパッケージフォルダを<開発フォルダ>/3rdparty以下にコピーする。
    > cd <workdir>
    > xcopy <OSLwright>\dist 3rdparty /E /H /C /I
    
  2. <OSLwright ディレクトリ>の cmake フォルダを<開発フォルダ>へコピーする。
    > cd <workdir>
    > xcopy <OSLwright>\cmake cmake /E /H /C /I
    
  3. CMakeLists.txt に oslwrite module をロードするコードを記述する
    if(MSVC)
      if (NOT CMAKE_TOOLCHAIN_FILE)
        # oslwrite module load
        include(${CMAKE_SOURCE_DIR}/cmake/oslwright.cmake)
      endif()
      if(OSLW_FRAMEWORK_PATH)
        # oslwrite framework path
        set(CMAKE_PREFIX_PATH "${OSLW_FRAMEWORK_PATH}")
      endif()
    endif()

B. CMAKE_TOOLCHAIN_FILEを設定してパッケージを使用する方法

  1. CMakeLists.txtに、CMAKE_PREFIX_PATHの設定を記述する
    if(OSLW_FRAMEWORK_PATH)
      # oslwrite framework path
      set(CMAKE_PREFIX_PATH "${OSLW_FRAMEWORK_PATH}")
    endif()
  2. オプションにCMAKE_TOOLCHAIN_FILEを設定しcmake コマンドを実行する
    > cmake.exe -G "Visual Studio 17 2022" -A x64 -DCMAKE_TOOLCHAIN_FILE="<OSLwright>/cmake/oslwright.cmake" -S . -B .\build_64
    

Functions

DLLが再帰的な依存関係を有する場合は、cmakeは参照先のDLLを発見できません。
依存するDLLのコピーをサポートする関数を定義しました。

oslw_copy_depdll

ターゲットに依存するDLLを$<TARGET_FILE_DIR:${target}>へコピーする

oslw_copy_depdll(TARGET   <target>       target name
                 [PATH    <directories>] Semicolon-separated list of OSLW's package directories.
                 [EXCLUDE <dll-list>]    exclude dll list
                )

Example

# copy external dlls to bindir.
oslw_copy_depdll(
  TARGET ${target_name}
)

oslw_install_depdll

ターゲットに依存するDLLをインストールする

oslw_install_depdll(TARGET      <target>       target name
                   [DESTINATION <dir>]         Specify the directory which files will be installed.
                   [COMPONENT   <component>]   Specify an installation component name.
                   [PATH        <directories>] Semicolon-separated list of OSLW's package directories.
                   [EXCLUDE     <dll-list>]    exclude dll list
                   )

Exmaple

# install external dlls
oslw_install_depdll(
  TARGET ${target_name}
  DESTINATION bin
  COMPONENT Application
)

oslw_find_depdll

DLLが依存するDLLのパスを検索する。

oslw_find_depdll(<VARNAME>                variable is assigned the result.
                  DLLS     <dll paths>    Semicolon-separated list of DLLs path.
                  [PATH    <directories>] Semicolon-separated list of OSLW's package directories.
                  [EXCLUDE <dll-list>]    exclude dll list
                  [WORKDIR <directory>]   workinng directory
                 )

Exmaple

# find dependent dlls and copy
set(PLUGINS_DLLS a.dll b.dll)
oslw_find_depdll(DEPENDENT_DLLS
                DLLS ${PLUGINS_DLLS}
                WORKDIR ${PLUGINS_PATH}
)
add_custom_command(TARGET ${target_name} POST_BUILD
                      COMMAND ${CMAKE_COMMAND} -E copy_if_different
                      ${DEPENDENT_DLLS}
                      "$<TARGET_FILE_DIR:${target_name}>"
                      COMMAND_EXPAND_LISTS)

Note

OSLwrightは、各パッケージをリリースビルドしています。MSVCランタイムライブラリのコンパイルオプションはMultiThreadedDLL(/MD)に設定されます。
開発するアプリケーションにおいて、MSVCランタイムライブラリのコンパイルオプションの設定は、リリース・デバックの両方ともにMultiThreadedDLL(/MD)へ変更してください。

Appendix

ファルダ命名規則(Folder naming conventions)

インストールされたパッケージのファルダ名は、次の命名規則に従います。
<package>-<version>[-<arch>][-<vc-version>][-<vc-runtime>][-<cu-versoin>][-static][-debug|-release]

Folder name Mean
<package>-<version>-x64-vc144-md A 64-bit build with either both release and debug configurations or release only, and either both shared and static libraries or shared libraries only.
<package>-<version>-x64-vc144-md-cu124 with cuda
<package>-<version>-x64-vc144-md-static static library only
<package>-<version>-x64-vc144-md-release release only
<package>-<version>-x64-vc144-md-debug debug only
<package>-<version> header only

License

OSLwright のライセンスは MIT License です。
サンプルソースコードのライセンスは MIT License と CC0 1.0 Universal です。
各パッケージは、それぞれのライセンスに従ってください。
本ソフトウェアおよび生成物について、作者は一切の責任を負いません。利用による結果はすべて利用者の責任とします。