obsidiansystems / obelisk

Functional reactive web and mobile applications, with batteries included.
https://reflex-frp.org
BSD 3-Clause "New" or "Revised" License
954 stars 104 forks source link

Building for Android requires all home-modules to be present in .cabal file #1054

Open walseb opened 9 months ago

walseb commented 9 months ago

Hello!

It seems that when building for Android, Obelisk expects all home modules to be present in other-modules. This is not the case when running ob run.

I think ideally, when running an Android build, it should error or at least warn when all home modules aren't present in the .cabal file, as the error message when one isn't included is a cryptic linking error:

Linking dist/build/frontend/frontend ...
/nix/store/jfkmqz20q8fsaqizcml86adxqyzlwllx-binutils-2.38/bin/ld: /build/frontend/dist/build/libHSfrontend-0.1-3H5TQNpcrWIGkwWxyRkSDc.a(Frontend.o): in function `u1NVz_srt':
(.data.u1NVz_srt+0x8): undefined reference to `frontendzm0zi1zm3H5TQNpcrWIGkwWxyRkSDc_PagesziArticle_app_closure'
/nix/store/jfkmqz20q8fsaqizcml86adxqyzlwllx-binutils-2.38/bin/ld: /build/frontend/dist/build/libHSfrontend-0.1-3H5TQNpcrWIGkwWxyRkSDc.a(Frontend.o): in function `c1NRX_info':
(.text.s1NsT_info+0x106): undefined reference to `frontendzm0zi1zm3H5TQNpcrWIGkwWxyRkSDc_PagesziArticle_app_info'
/nix/store/jfkmqz20q8fsaqizcml86adxqyzlwllx-binutils-2.38/bin/ld: (.text.s1NsT_info+0x154): undefined reference to `frontendzm0zi1zm3H5TQNpcrWIGkwWxyRkSDc_PagesziArticle_app_info'
/nix/store/jfkmqz20q8fsaqizcml86adxqyzlwllx-binutils-2.38/bin/ld: (.text.s1NsT_info+0x1a2): undefined reference to `frontendzm0zi1zm3H5TQNpcrWIGkwWxyRkSDc_PagesziArticle_app_info'
/nix/store/jfkmqz20q8fsaqizcml86adxqyzlwllx-binutils-2.38/bin/ld: (.text.s1NsT_info+0x1f0): undefined reference to `frontendzm0zi1zm3H5TQNpcrWIGkwWxyRkSDc_PagesziArticle_app_info'
/nix/store/jfkmqz20q8fsaqizcml86adxqyzlwllx-binutils-2.38/bin/ld: (.text.s1NsT_info+0x23e): undefined reference to `frontendzm0zi1zm3H5TQNpcrWIGkwWxyRkSDc_PagesziArticle_app_info'
/nix/store/jfkmqz20q8fsaqizcml86adxqyzlwllx-binutils-2.38/bin/ld: /build/frontend/dist/build/libHSfrontend-0.1-3H5TQNpcrWIGkwWxyRkSDc.a(Frontend.o):(.text.s1NsT_info+0x28c): more undefined references to `frontendzm0zi1zm3H5TQNpcrWIGkwWxyRkSDc_PagesziArticle_app_info' follow
collect2: error: ld returned 1 exit status
`cc' failed in phase `Linker'. (Exit code: 1)

A quick fix might be running the android build with -Wmissing-home-modules by default, or maybe simply setting up the starting ob init project with -Wmissing-home-modules, or the error equivalent of that flag if that exists.

See https://github.com/obsidiansystems/obelisk/issues/1053 for more details.