mirror of https://github.com/pyodide/pyodide.git
Update README for building on Mac
This commit is contained in:
parent
0ab5e8a67c
commit
cf6b8e11e5
18
README.md
18
README.md
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
Loading…
Reference in New Issue