Update README for building on Mac

This commit is contained in:
William Lachance 2019-10-18 12:18:26 -04:00 committed by William Lachance
parent 0ab5e8a67c
commit cf6b8e11e5
2 changed files with 332 additions and 3 deletions

View File

@ -49,8 +49,9 @@ this repository's [releases page](https://github.com/iodide-project/pyodide/rele
### Building from source
Building is easiest on Linux. For other platforms, we recommend using
the Docker image (described below) to build Pyodide.
Building is easiest on Linux and relatively straightforward on Mac. For
Windows, we currently recommend using the Docker image (described below) to
build Pyodide.
Make sure the prerequisites for [emsdk](https://github.com/emscripten-core/emsdk) are
installed. Pyodide will build a custom, patched version of emsdk, so there is no
@ -65,6 +66,15 @@ Additional build prerequisites are:
- [uglifyjs](https://github.com/mishoo/UglifyJS) to minify Javascript builds.
- [ccache](https://ccache.samba.org) (optional) recommended for much faster rebuilds.
On Mac, you will also need:
- [Homebrew](https://brew.sh/) for installing dependencies
- System libraries in the root directory (`sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /` should do it, see https://github.com/pyenv/pyenv/issues/1219#issuecomment-428305417)
- coreutils for md5sum and other essential Unix utilities (`brew install coreutils`)
- openssl (`brew install openssl`)
- gfortran (`brew cask install gfortran`)
- f2c: Install wget (`brew install wget`), and then run the buildf2c script from the root directory (`sudo ./tools/buildf2c`)
#### Build using `make`
After installing the build prerequisites, run from the command line:
@ -76,7 +86,9 @@ make
### Using Docker
We provide a Debian-based Docker image on Docker Hub with the dependencies
already installed to make it easier to build Pyodide.
already installed to make it easier to build Pyodide. Note that building from
the Docker image is *very* slow on Mac, building on the host machine is
preferred if at all possible.
1. Install Docker

317
tools/buildf2c Executable file
View File

@ -0,0 +1,317 @@
#!/bin/sh
# Based on http://hpc.sourceforge.net/buildf2c with curl replaced by wget
############################################################
# This UNIX script builds the f2c FORTRAN --> C translator #
# under Mac OS X. #
# Make this script executable with "chmod +x buildf2c" #
############################################################
echo "==================================="
echo "Build f2c FORTRAN --> C translator."
echo "==================================="
echo "USAGE: ./buildf2c"
######################################
# Set trap to allow abort on signal: #
######################################
trap 'echo "Interrupted by signal" >&2; exit' 1 2 3 15
########################################################
# 1. Download f2c source from Bell Labs. #
# (Tar file is not visible - it's created on the fly.) #
########################################################
echo "--------------------------------------------"
echo "1. Downloading f2c source from Bell Labs ..."
echo "--------------------------------------------"
# wget --passive-ftp ftp://netlib.bell-labs.com/netlib/f2c.tar
wget http://netlib.sandia.gov/cgi-bin/netlib/netlibfiles.tar?filename=netlib/f2c -O "f2c.tar"
echo "... done."
#####################################
# 2. Uncompress f2c tarred archive: #
#####################################
echo "-------------------------------"
echo "2. Uncompressing f2c source ..."
echo "-------------------------------"
tar -xvf f2c.tar
gunzip -rf f2c/*
cd f2c
unzip libf2c.zip -d libf2c
cd ..
echo "... done."
###############################################################
# 3. Prepare the unix makefiles for building the f2c library. #
# Note: CC compiler switched from 'cc' to '/usr/bin/cc' #
###############################################################
echo "-------------------------------------------"
echo "3. Preparing makefiles for building f2c ..."
echo "-------------------------------------------"
sed 's/CC = cc/CC = \/usr\/bin\/cc/' f2c/libf2c/makefile.u > f2c/libf2c/makefile
sed 's/CC = cc/CC = \/usr\/bin\/cc/' f2c/src/makefile.u > f2c/src/makefile
echo "... done."
##########################################
# 4. Create and install f2c header file. #
# If you use a C++ compiler: make hadd #
# Otherwise: make f2c.h #
##########################################
echo "----------------------------------------------------"
echo "4. Creating and installing f2c header file f2c.h ..."
echo "----------------------------------------------------"
cd f2c/libf2c
make f2c.h
if test ! -d /usr/local/include; then
mkdir -p /usr/local/include
fi
cp f2c.h /usr/local/include/
echo "... done."
################################################
# 5. Create and install f2c library "libf2c.a" #
################################################
echo "-----------------------------------------------------"
echo "5. Creating and installing f2c library "libf2c.a" ..."
echo "-----------------------------------------------------"
make
if test ! -d /usr/local/lib; then
mkdir -p /usr/local/lib
fi
cp libf2c.a /usr/local/lib/
ranlib /usr/local/lib/libf2c.a
echo "... done."
######################################
# 6. Make executable f2c translator: #
######################################
echo "---------------------------------------------"
echo "6. Creating and installing f2c translator ..."
echo "---------------------------------------------"
cd ../src
gcc -o xsum xsum.c
make veryclean
make f2c
if test ! -d /usr/local/bin; then
mkdir -p /usr/local/bin
fi
cp f2c /usr/local/bin/
echo "... done."
################################################################
# 7. Install fc script: #
# #
# 1. Remove "-Olimit 2000" in the -O processing options within #
# the 'fc' script. #
# 2. Eliminate all references to the math library (-lm) in #
# the script 'fc' since it is included the System framework #
# and is linked by default under Mac OS X. #
# 3. Eliminate '-u MAIN__' at the bottom of the 'fc' script. #
# You will have to explitly load FORTRAN MAIN programs #
# (explicitly mention the relevant .f or .o file). #
################################################################
echo "---------------------------"
echo "7. Installing fc script ..."
echo "---------------------------"
cd ..
mv fc fc.orig
sed 's/ -Olimit 2000//g; s/ -lm//g; s/ -u MAIN__//g' fc.orig > fc
chmod +x fc
cp fc /usr/local/bin/
echo "... done."
#########################
# 8. Install man pages: #
#########################
echo "---------------------------"
echo "8. Installing man pages ..."
echo "---------------------------"
cp f2c.1t /usr/share/man/man1/f2c.1
echo "... done."
################
# 9. Clean up: #
################
echo "------------------"
echo "9. Cleaning up ..."
echo "------------------"
cd src
make clean
cd ../libf2c
make clean
cd ../..
echo "... All done!"
#############################################
# 10. Test f2c on your FORTRAN source code: #
#############################################
echo "======================================================"
echo "======================================================"
echo "======================================================"
echo " === To test f2c on your FORTRAN source code: ==="
echo " === cd ~/wherever/your/code/is ==="
echo " === 1. f2c myprog.f ==="
echo " === cc -O -o myprog.exe myprog.c -lf2c ==="
echo " === myprog.exe ==="
echo " === 2. fc -O -w -o myprog.exe myprog.f ==="
echo " === myprog.exe ==="
echo "======================================================"
echo "======================================================"
echo "======================================================"
exit