ecl/INSTALL
2019-12-08 10:26:52 +01:00

125 lines
No EOL
4.8 KiB
Text

You will find detailed installation instructions in the ECL manual
https://common-lisp.net/project/ecl/static/manual/pr01s06.html
If you do not have access to the online version, follow the following recipies.
* Unix and similar platforms.
1. Type
./configure --help
to get a list of the flags with which ECL can be configured.
2. Enter
./configure ...
where "..." is the set of flags you have chosen.
3. Use "make" followed by "make install" to build and install ECL.
* Windows with Visual Studio C++ 2008
1. Enter the msvc directory
2. Read the file Makefile to find the configuration options. They
typically have the form ECL_UNICODE=1, ECL_THREADS=1, etc
3. Enter
nmake ...
followed by zero or more of those options
4. Use "nmake install" to create a directory called "package" with ECL in it.
5. Move that directory wherever you need.
* Cross-compile for the android platform (from the UNIX machine)
1. Build the host ECL
#+BEGIN_SRC shell-script
# C99 complex numbers are not fully supported on Android
./configure ABI=32 CFLAGS="-m32 -g -O2" LDFLAGS="-m32 -g -O2"\
--prefix=`pwd`/ecl-android-host --disable-c99complex
make -j9
make install
rm -r build
export ECL_TO_RUN=`pwd`/ecl-android-host/bin/ecl
#+END_SRC
2. Configure the toolchain (requires android-ndk version 15 or higher, known to work with version 17c)
and export the necessary paths:
#+BEGIN_SRC shell-script
export NDK_PATH=/opt/android-ndk
export ANDROID_API=23
export TOOLCHAIN_PATH=`pwd`/android-toolchain
${NDK_PATH}/build/tools/make_standalone_toolchain.py --arch arm --install-dir ${TOOLCHAIN_PATH} --api ${ANDROID_API}
export SYSROOT=${TOOLCHAIN_PATH}/sysroot
export PATH=${TOOLCHAIN_PATH}/bin:$PATH
#+END_SRC
3. Build and install the target library
#+BEGIN_SRC shell-script
# boehm GC is not compatible with ld.gold linker, force use of ld.bfd
export LDFLAGS="--sysroot=${SYSROOT} -D__ANDROID_API__=${ANDROID_API} -fuse-ld=bfd"
export CPPFLAGS="--sysroot=${SYSROOT} -D__ANDROID_API__=${ANDROID_API} -isystem ${SYSROOT}/usr/include/arm-linux-androideabi"
export CC=arm-linux-androideabi-clang
./configure --host=arm-linux-androideabi \
--prefix=`pwd`/ecl-android \
--disable-c99complex \
--with-cross-config=`pwd`/src/util/android-arm.cross_config
make -j9
make install
#+END_SRC
4. Library and assets in the ecl-android directory are ready to run on
the Android system.
** Building ecl-android on Darwin (OSX)
If your host platform is darwin, then the host compiler should be
built with the Apple's GCC (not the GCC from Macports). Using the
MacPort command:
#+BEGIN_SRC shell-script
sudo port select --set gcc none
#+END_SRC
Hint provided by Pascal J. Bourguignon.
* Cross-compile for the iOS platform
1. Build the host ECL
#+BEGIN_SRC shell-script
./configure --prefix=`pwd`/ecl-iOS-host --disable-c99complex
make -j9
make install
rm -r build
export ECL_TO_RUN=`pwd`/ecl-iOS-host/bin/ecl
#+END_SRC
2. Configure the toolchain
#+BEGIN_SRC shell-script
export IOS_VERSION_MIN="8.0"
export IOS_SDK_DIR="`xcode-select --print-path`/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/"
export CC="clang"
export CXX="clang++"
export CFLAGS="-arch arm64 -miphoneos-version-min=${IOS_VERSION_MIN} -isysroot ${IOS_SDK_DIR}"
export CFLAGS="$CFLAGS -pipe -Wno-trigraphs -Wreturn-type -Wunused-variable"
export CFLAGS="$CFLAGS -fpascal-strings -fasm-blocks -fmessage-length=0 -fvisibility=hidden"
export CFLAGS="$CFLAGS -O2 -DNO_ASM"
export LD="ld"
export LDFLAGS="-arch arm64 -pipe -std=c99 -gdwarf-2 -isysroot ${IOS_SDK_DIR}"
export LIBS="-framework Foundation"
#+END_SRC
3. Build and install the target library
#+BEGIN_SRC shell-script
export CFLAGS="$CFLAGS -DECL_C_COMPATIBLE_VARIADIC_DISPATCH -DGC_DISABLE_INCREMENTAL -DECL_RWLOCK"
export CXXFLAGS="$CFLAGS"
./configure --host=aarch64-apple-darwin \
--prefix=`pwd`/ecl-iOS \
--disable-c99complex \
--disable-shared \
--with-cross-config=`pwd`/src/util/iOS-arm64.cross_config
make -j9
make install
#+END_SRC
4. Library and assets in the ecl-iOS directory are ready to run on
the iOS system.
** Using ECL on iOS
The Boehm-Demers-Weiser garbage collector cannot find the stack base
automatically on iOS. Therefore, this has to be specified manually. In
the main function, before calling cl_boot, add e.g. (see the garbage
collector documentation for more details):
#+BEGIN_SRC C
const int size = 256;
char* ecl_argv[size];
GC_allow_register_threads();
GC_register_my_thread((const struct GC_stack_base*)ecl_argv);
GC_stackbottom = (char*)(ecl_argv + size - 1);
#+END_SRC