>From e99ca32efb3fd515435ec86112a46d25be016780 Mon Sep 17 00:00:00 2001 From: felix
Date: Wed, 18 Dec 2013 14:36:16 +0100 Subject: [PATCH 1/2] Added Android-specific changes to posix-unit and runtime and added a simple makefile. Signed-off-by: Peter Bex --- Makefile.android | 108 +++++++++++++++++++++++++++++++++++++++++++++++++ README | 24 +++++++++++ chicken.h | 2 + distribution/manifest | 1 + manual/Unit posix | 4 ++ posixunix.scm | 16 ++++++-- runtime.c | 16 +++++++- 7 files changed, 165 insertions(+), 6 deletions(-) create mode 100644 Makefile.android diff --git a/Makefile.android b/Makefile.android new file mode 100644 index 0000000..7aafbd5 --- /dev/null +++ b/Makefile.android @@ -0,0 +1,108 @@ +# Makefile.android - configuration for Android -*- Makefile -*- +# +# Copyright (c) 2013, The Chicken Team +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following +# conditions are met: +# +# Redistributions of source code must retain the above copyright notice, this list of conditions and the following +# disclaimer. +# Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials provided with the distribution. +# Neither the name of the author nor the names of its contributors may be used to endorse or promote +# products derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS +# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +# AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + + +ifneq ($(CONFIG),) +include $(CONFIG) +endif + +SRCDIR ?= ./ + +# platform configuration + +ARCH ?= $(shell sh $(SRCDIR)/config-arch.sh) + +# options + +C_COMPILER_OPTIONS ?= -fno-strict-aliasing -fwrapv -DHAVE_CHICKEN_CONFIG_H +ifdef DEBUGBUILD +C_COMPILER_OPTIMIZATION_OPTIONS ?= -g -Wall -Wno-unused +else +ifdef OPTIMIZE_FOR_SPEED +C_COMPILER_OPTIMIZATION_OPTIONS ?= -O3 -fomit-frame-pointer +else +C_COMPILER_OPTIMIZATION_OPTIONS ?= -Os -fomit-frame-pointer +endif +endif +LINKER_LINK_SHARED_LIBRARY_OPTIONS = -shared +LINKER_LINK_SHARED_DLOADABLE_OPTIONS = -L. -shared -Wl,-R"$(RUNTIME_LINKER_PATH)" +LINKER_LINK_SHARED_PROGRAM_OPTIONS = -Wl,-R"$(RUNTIME_LINKER_PATH)" +# Android NDK build system currently does not understand +# versioned sonames, so don't try to embed a soname. +#LIBCHICKEN_SO_LINKER_OPTIONS = -Wl,-soname,lib$(PROGRAM_PREFIX)chicken$(PROGRAM_SUFFIX).so.$(BINARYVERSION) +LIBRARIES = -lm -ldl -llog +NEEDS_RELINKING = yes +# See above +#USES_SONAME = yes + +# special files + +CHICKEN_CONFIG_H = chicken-config.h + +# select default and internal settings + +include $(SRCDIR)/defaults.make + +chicken-config.h: chicken-defaults.h + echo "/* GENERATED */" >$@ + echo "#define HAVE_DIRENT_H 1" >>$@ + echo "#define HAVE_DLFCN_H 1" >>$@ + echo "#define HAVE_INTTYPES_H 1" >>$@ + echo "#define HAVE_LIMITS_H 1" >>$@ + echo "#define HAVE_LONG_LONG 1" >>$@ + echo "#define HAVE_MEMMOVE 1" >>$@ + echo "#define HAVE_MEMORY_H 1" >>$@ + echo "#define HAVE_SIGACTION 1" >>$@ + echo "#define HAVE_SIGSETJMP 1" >>$@ + echo "#define HAVE_STDINT_H 1" >>$@ + echo "#define HAVE_STDLIB_H 1" >>$@ + echo "#define HAVE_STRERROR 1" >>$@ + echo "#define HAVE_STRINGS_H 1" >>$@ + echo "#define HAVE_STRING_H 1" >>$@ + echo "#define HAVE_STRTOLL 1" >>$@ + echo "#define HAVE_STRTOQ 1" >>$@ + echo "#define HAVE_SYS_STAT_H 1" >>$@ + echo "#define HAVE_SYS_TYPES_H 1" >>$@ + echo "#define HAVE_UNISTD_H 1" >>$@ + echo "#define HAVE_UNSIGNED_LONG_LONG 1" >>$@ + echo "#define STDC_HEADERS 1" >>$@ + echo "#define HAVE_ALLOCA 1" >>$@ + echo "#define HAVE_ALLOCA_H 1" >>$@ + echo "#define HAVE_GRP_H 1" >>$@ + echo "#define HAVE_ERRNO_H 1" >>$@ + echo "#define HAVE_MEMMOVE 1" >>$@ + echo "#define C_STACK_GROWS_DOWNWARD 1" >>$@ +ifdef GCHOOKS + echo "#define C_GC_HOOKS" >>$@ +endif +ifdef SYMBOLGC + echo "#define C_COLLECT_ALL_SYMBOLS" >>$@ +endif +ifneq ($(HACKED_APPLY),) + echo "#define C_HACKED_APPLY" >>$@ +endif + cat chicken-defaults.h >>$@ + +include $(SRCDIR)/rules.make diff --git a/README b/README index 49abb0d..1720952 100644 --- a/README +++ b/README @@ -359,6 +359,30 @@ 5. Platform issues + Android: + + - The Android SDK and NDK are required. Make sure you have + set up a project and have a suitable NDK toolchain + available. You will have to override the make(1) variable + C_COMPILER to contain the correct compiler; see + docs/STANDALONE-TOOLCHAIN.html in your NDK root for notes + on how to call the correct compiler. You will also need to + override the ARCH variable to match the device you're + targeting. The build will produce a libchicken.so that + can then be integrated into your project as a prebuilt + shared library. See the android section on + http://wiki.call-cc.org/embedding for a complete example. + + - It is possible to use eggs, by copying them into the right + place and probably renaming the files. This is somewhat + awkward and requires various hacks to make the + loading/linking of eggs work. It may be easier to build + the eggs you need manually and linking them statically to + your executable. + + - By default debug-logging is enabled and written to the + Android log. + FreeBSD/NetBSD/OpenBSD: - *BSD system users *must* use GNU make ("gmake") - the makefiles diff --git a/chicken.h b/chicken.h index f61708d..95bdbd2 100644 --- a/chicken.h +++ b/chicken.h @@ -657,6 +657,8 @@ static inline int isinf_ld (long double x) #if defined(__CYGWIN__) || defined(__MINGW32__) || defined(_WIN32) || defined(__WINNT__) # define C_SOFTWARE_TYPE "windows" +#elif defined(__ANDROID__) +# define C_SOFTWARE_TYPE "android" #elif defined(__unix__) || defined(C_XXXBSD) || defined(_AIX) # define C_SOFTWARE_TYPE "unix" #elif defined(ECOS) diff --git a/distribution/manifest b/distribution/manifest index 1003489..682587e 100644 --- a/distribution/manifest +++ b/distribution/manifest @@ -218,6 +218,7 @@ apply-hack.ppc.darwin.S apply-hack.ppc.sysv.S chicken.pdf Makefile +Makefile.android Makefile.aix Makefile.linux Makefile.macosx diff --git a/manual/Unit posix b/manual/Unit posix index d27fa88..1ede6c0 100644 --- a/manual/Unit posix +++ b/manual/Unit posix @@ -806,6 +806,10 @@ directory and the default shell. When {{AS-VECTOR}} is {{#t}} a vector of 7 elements is returned instead of a list. If no user with this name or id then {{#f}} is returned. +Note: on Android systems, the user-specific string is always {{""}}, +since {{pw_gecos}} is not available in the C {{passwd}} struct on that +platform. + ==== current-group-id