ecl/INSTALL
2020-03-01 18:49:49 +01:00

126 lines
No EOL
4.9 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. Open the Visual Studio x86 or x64 native tools command prompt
2. Enter the msvc directory
3. Read the file Makefile to find the configuration options. They
typically have the form ECL_UNICODE=1, ECL_THREADS=1, etc
4. Enter
nmake ...
followed by zero or more of those options
5. Use "nmake install" to create a directory called "package" with ECL in it.
6. 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