ut-issl / s2e-core

Spacecraft Simulation Environment Core codes
MIT License
47 stars 19 forks source link

Link internal library as CMake object library #710

Closed sksat closed 2 weeks ago

sksat commented 2 weeks ago

Related issues

N/A

Description

s2e-core-internal libraries like COMPONENT have complex (and cyclic) dependencies with each other, since they are only for build S2E.

However, these libraries are built as static libraries. This causes the final executable link to not succeed unless non-trivial link configuration is performed many times. https://github.com/ut-issl/s2e-core/blob/6ca93ed37cd7b98a922b792d39fd4e237292684f/CMakeLists.txt#L185-L198

This PR change these libraries to be built as object libraries feature provided by CMake. It eliminates the need to specify dependencies mid-build by allowing circular dependencies to exist until the final executable link. https://github.com/ut-issl/s2e-core/blob/7f8ae7c48c1e9dd7e9fc0010af453620ffc24d18/CMakeLists.txt#L183-L200

Test results

N/A

Impact

The build process is a bit changed; S2E users also need to make a similar modification to this PR in their CMakeLists.txt.

Supplementary information

This simplifies the build process and makes it easier to expand use cases, such as interoperation with Rust.

sksat commented 2 weeks ago

Win, 32bit, C2A=ON の時だけこの変更で落ちるのはあまりに変なので、Actions の minor update などを疑って #711 をやったが、違いそう

sksat commented 2 weeks ago

rebase

sksat commented 2 weeks ago

64bit で USE_C2A=ONの時、CI はパスしてるけどビルドがスキップされてる

sksat commented 2 weeks ago

409 で変更されてるな

sksat commented 2 weeks ago

そもそも 64bit ビルドが追加されたのがここか

sksat commented 2 weeks ago

単純に libC2A をリンクしようとした時にリンクエラーになる、のであればまだ make sense。しかし、SILS-S2E の際は 32bit ビルドを強制させたい、のであれば後出しジャンケン的に無かったことにするべきではない。

200km commented 2 weeks ago

しかし、SILS-S2E の際は 32bit ビルドを強制させたい、のであれば後出しジャンケン的に無かったことにするべきではない。

そうですね。これはこれ以外のやり方がいまいちわからなかったので無理やりやったという感じです。 スマートな感じに修正していただけると嬉しいです!

sksat commented 2 weeks ago

@200km #712 で、include という機能を使って存在する組み合わせをベタ書きするようにしてみました

sksat commented 2 weeks ago

rebase

sksat commented 2 weeks ago

Visual Studio のリンカ(link.exe)の挙動が微妙だったためやや dirty hack も入っているが、通った(ここらへんは native Windows のサポートを続けるかどうかも含めて考えたい)

sksat commented 2 weeks ago

@200km いつもの摩訶不思議なことになってしまっている target_link_libraries() をシンプルにするパッチです。ビルドがシンプルになると AE 側の Rust の資産との接続が行いやすくなるといったメリットもあるため、マージできるとうれしいです。

sksat commented 2 weeks ago

FYI: @suzuki-toshihir0 @tarotene