Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cross-compilation Rust 0mq #11

Closed
GuilhemHnr opened this issue Apr 2, 2022 · 2 comments
Closed

Cross-compilation Rust 0mq #11

GuilhemHnr opened this issue Apr 2, 2022 · 2 comments

Comments

@GuilhemHnr
Copy link
Collaborator

Bonsoir Monsieur,

Concernant l'interface graphique que l'on trouve sur https://github.com/GuilhemHnr/trackui
Dans la branche zeroMQ, le premier travail qui doit permettre de récupérer les avions des messages 0mq et les afficher sur la carte a été fait. Cependant, au moment de commencer les tests, nous sommes confrontés à une erreur indésirable liée à 0mq :

error: failed to run custom build command for `zmq-sys v0.11.0`

Caused by:
  process didn't exit successfully: `/home/guilhem/git/trackui/trackui/target/debug/build/zmq-sys-a7bda30f61cfdd68/build-script-main` (exit status: 101)
  --- stdout
  cargo:rerun-if-env-changed=LIBZMQ_NO_PKG_CONFIG
  cargo:rerun-if-env-changed=PKG_CONFIG_ALLOW_CROSS_wasm32-unknown-unknown
  cargo:rerun-if-env-changed=PKG_CONFIG_ALLOW_CROSS_wasm32_unknown_unknown
  cargo:rerun-if-env-changed=TARGET_PKG_CONFIG_ALLOW_CROSS
  cargo:rerun-if-env-changed=PKG_CONFIG_ALLOW_CROSS
  cargo:rerun-if-env-changed=PKG_CONFIG_wasm32-unknown-unknown
  cargo:rerun-if-env-changed=PKG_CONFIG_wasm32_unknown_unknown
  cargo:rerun-if-env-changed=TARGET_PKG_CONFIG
  cargo:rerun-if-env-changed=PKG_CONFIG
  cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_wasm32-unknown-unknown
  cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_wasm32_unknown_unknown
  cargo:rerun-if-env-changed=TARGET_PKG_CONFIG_SYSROOT_DIR
  cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR

  --- stderr
  thread 'main' panicked at 'Unable to locate libzmq:
  pkg-config has not been configured to support cross-compilation.

  Install a sysroot for the target platform and configure it via
  PKG_CONFIG_SYSROOT_DIR and PKG_CONFIG_PATH, or install a
  cross-compiling wrapper for pkg-config and set it via
  PKG_CONFIG environment variable.', /home/guilhem/.cargo/registry/src/github.com-1ecc6299db9ec823/zmq-sys-0.11.0/build/pkg_config.rs:26:17
  note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
Apr 02 22:52:00.270 ERROR ❌ error
error from HTML pipeline

Caused by:
    0: error from asset pipeline
    1: error during cargo build execution
    2: cargo call returned a bad status

J'ai l'impression que le log montre deux erreurs différentes, même l'on suppose que la seconde (error from HTML pipeline ...) vient probablement du code qui devra être corrigé, la première nous pose plus problèmes.

Il me semble comprendre que le système n’autorise pas que deux compilations s'effectuent en même temps, et la compilation passe par trunk (le builder pour faire du Web Assembly avec Rust) sauf que 0mq a besoin de cargo pour se build, ce qui générerai la cross-compliation ?

Une solution qui semble revenir et qui est expliquée sur l'issue que je trouve ici :
https://github.com/erickt/rust-zmq/issues/179
serait d'avoir les fichiers compilés de 0mq directement dans le build du projet.

Cependant c'est d'un niveau assez technique, ainsi on apprécierai avoir votre expertise sur le sujet.

Merci d'avance.

@rgrunbla

@rgrunbla
Copy link
Collaborator

rgrunbla commented Apr 3, 2022

Tout d'abord, un petit mot sur ce qu'est la cross-compilation: c'est l'action de compiler sur une architecture donnée (par exemple, x86_64, votre laptop) un programme qui doit fonctionner sur une autre architecture donnée (par exemple, ARM64, ou… wasm i.e. WebAssembly, i.e. l'intérieur de votre navigateur web).

WebAssembly c'est une architecture spécifique qui est prévue pour être lancée dans le navigateur. Yew utilise wasm sous le capot ( https://yew.rs/#wait-why-webassembly ) : le rust est compilé vers wasm, qui est ensuite lancé dans le navigateur. Votre UI est-elle bien affichée dans un navigateur web ?

Bref, vous utilisez la crate "zmq", qui est https://docs.rs/zmq/0.9.2/zmq/, dont la dernière version date de septembre 2019 (donc pas forcément ultra maintenue à jour), et qui ne supporte pas wasm: erickt/rust-zmq#258 Il n'est donc pas possible d'utiliser cette librairie pour utiliser zeromq dans du wasm exécuté dans le navigateur.

Mon conseil d'il y a quelques semaines reste donc le même: utiliser une websocket (bien supportée dans les navigateurs) pour communiquer vos données depuis le "backend" vers le "frontend".

Un exemple de mini-serveur websocket en rust, utilisant une librairie, est disponible sur https://github.com/snapview/tungstenite-rs ou https://github.com/snapview/tokio-tungstenite/blob/master/examples/server.rs

Dans l'exemple, ce serveur sera joignable sur ws://127.0.0.1:9001 ou ws://127.0.0.1:12345 et il est possible d'échanger des données depuis un navigateur en s'inspirant de https://developer.mozilla.org/fr/docs/Web/API/WebSockets_API/Writing_WebSocket_client_applications#exemples

Si vous voulez, vous pouvez aussi ne pas coder ce truc en rust: vous pouvez faire un tout petit code python qui reçoit les messages du backend rust (via zeromq) et expose ces données via websocket au frontend !

@GuilhemHnr

@g-tejas
Copy link

g-tejas commented Dec 27, 2023

@rgrunbla Is there a specific way to interface with websockets bind using zeromq library, and a client socket using tungstenite? Im trying to do this, but i get some handshake error when i try to connect to the zeromq ws socket, from wasm

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants