Skip to content

Instantly share code, notes, and snippets.

@Potherca
Last active April 13, 2024 16:05
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save Potherca/866dfc72de9bfe0fc5627945446826a6 to your computer and use it in GitHub Desktop.
Save Potherca/866dfc72de9bfe0fc5627945446826a6 to your computer and use it in GitHub Desktop.
Steps to compile the Lynx web browser to Web Assembly
# Sources used in figuring this out:
#
# - https://developer.mozilla.org/en-US/docs/WebAssembly/C_to_wasm
# - https://emscripten.org/docs/compiling/Building-Projects.html#building-projects
# Set up Emscripten SDK
git clone https://github.com/emscripten-core/emsdk.git
cd emsdk/
./emsdk install latest
./emsdk activate latest
source ./emsdk_env.sh
# Test compile so we know EMScripten works
cd -
wget https://raw.githubusercontent.com/emscripten-core/emscripten/master/src/shell_minimal.html
wget https://gist.githubusercontent.com/Potherca/89a4ce1f018c7d39a6fa0320673c8d57/raw/hello3.c
emcc -o hello3.html hello3.c -O3 -s WASM=1 --shell-file shell_minimal.html -s NO_EXIT_RUNTIME=1 -s "EXTRA_EXPORTED_RUNTIME_METHODS=['ccall']"
# Compile Lynx so we know that works
sudo touch /usr/local/etc/lynx.cfg && sudo chown $USER /usr/local/etc/lynx.cfg
sudo touch /usr/local/etc/lynx.lss && sudo chown $USER /usr/local/etc/lynx.lss
wget https://invisible-mirror.net/archives/lynx/tarballs/lynx2.9.0dev.6.zip
unzip lynx2.9.0dev.6.zip
cd ../lynx2.9.0dev.6/
./configure --with-ssl
make
./lynx https://invisible-mirror.net/archives/lynx/tarballs/
# Compile Lynx with EMScripten
emconfigure ./configure --with-ssl
emmake make
@danielktaylor
Copy link

How did you get ncurses to work with emscripten?

@Potherca
Copy link
Author

@sandkoan
Copy link

Have you figured out how to get ncurses working with emscripten?

@Potherca
Copy link
Author

Sadly, due to the influence of the pandemic, I was not able to continue working on this for the last few years. I _do _ plan on picking this up again, but I do not have a timetable yet.

@sandkoan
Copy link

Ahh, okay. If I only want to be able to run lynx -dump and don't particularly need the curses component of the browser, is there some way I might be able to circumvent the requirement? Do you have any insight on how I might go about compiling lynx without curses?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment