* [PATCH 0/4] Cross compile improvements
@ 2013-03-14 5:57 Aaron Carroll
2013-03-14 5:57 ` [PATCH 1/4] Propagate target OS from configure to Makefile Aaron Carroll
` (4 more replies)
0 siblings, 5 replies; 6+ messages in thread
From: Aaron Carroll @ 2013-03-14 5:57 UTC (permalink / raw)
To: fio
This set improves handling of cross compilation to the point where
Android can now build with no special-casing in the configure script.
Tested on Linux/x86 and Darwin/x86_64 native, and cross compile from
Linux/x86 to Android/arm and Linux/arm. I dont have access to any
big endian machine, so a sanity check of the endianess changes would
be appreciated.
Aaron Carroll (4):
Propagate target OS from configure to Makefile
configure: compile-time word size detection
configure: endianness check for cross compile
Android: remove static Android configuration
Makefile | 21 +++++++--------
configure | 79 +++++++++++++++++++++++++++++++++++++++++-------------------
2 files changed, 64 insertions(+), 36 deletions(-)
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 1/4] Propagate target OS from configure to Makefile
2013-03-14 5:57 [PATCH 0/4] Cross compile improvements Aaron Carroll
@ 2013-03-14 5:57 ` Aaron Carroll
2013-03-14 5:57 ` [PATCH 2/4] configure: compile-time word size detection Aaron Carroll
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Aaron Carroll @ 2013-03-14 5:57 UTC (permalink / raw)
To: fio
Propagate target OS from configure to Makefile (CONFIG_TARGET_OS) to avoid
duplicating the check in Makefile. Also allow CROSS_COMPILE for the toolchain
prefix, which is common (e.g. Linux).
Signed-off-by: Aaron Carroll <aaronc@cse.unsw.edu.au>
---
Makefile | 21 ++++++++++-----------
configure | 12 +++++++-----
2 files changed, 17 insertions(+), 16 deletions(-)
diff --git a/Makefile b/Makefile
index 7a17555..ea96a89 100644
--- a/Makefile
+++ b/Makefile
@@ -5,7 +5,6 @@ CFLAGS = -std=gnu99 -Wwrite-strings -Wall $(OPTFLAGS)
LIBS = -lm $(EXTLIBS)
PROGS = fio
SCRIPTS = fio_generate_plots
-UNAME := $(shell uname)
ifneq ($(wildcard config-host.mak),)
all:
@@ -80,42 +79,42 @@ ifndef CONFIG_INET_ATON
SOURCE += lib/inet_aton.c
endif
-ifeq ($(UNAME), Linux)
+ifeq ($(CONFIG_TARGET_OS), Linux)
SOURCE += diskutil.c fifo.c blktrace.c cgroup.c trim.c engines/sg.c \
engines/binject.c profiles/tiobench.c
LIBS += -lpthread -ldl
LDFLAGS += -rdynamic
endif
-ifeq ($(UNAME), Android)
+ifeq ($(CONFIG_TARGET_OS), Android)
SOURCE += diskutil.c fifo.c blktrace.c trim.c profiles/tiobench.c
LIBS += -ldl
LDFLAGS += -rdynamic
endif
-ifeq ($(UNAME), SunOS)
+ifeq ($(CONFIG_TARGET_OS), SunOS)
LIBS += -lpthread -ldl
CPPFLAGS += -D__EXTENSIONS__
endif
-ifeq ($(UNAME), FreeBSD)
+ifeq ($(CONFIG_TARGET_OS), FreeBSD)
LIBS += -lpthread -lrt
LDFLAGS += -rdynamic
endif
-ifeq ($(UNAME), NetBSD)
+ifeq ($(CONFIG_TARGET_OS), NetBSD)
LIBS += -lpthread -lrt
LDFLAGS += -rdynamic
endif
-ifeq ($(UNAME), AIX)
+ifeq ($(CONFIG_TARGET_OS), AIX)
LIBS += -lpthread -ldl -lrt
CPPFLAGS += -D_LARGE_FILES -D__ppc__
LDFLAGS += -L/opt/freeware/lib -Wl,-blibpath:/opt/freeware/lib:/usr/lib:/lib -Wl,-bmaxdata:0x80000000
endif
-ifeq ($(UNAME), HP-UX)
+ifeq ($(CONFIG_TARGET_OS), HP-UX)
LIBS += -lpthread -ldl -lrt
CFLAGS += -D_LARGEFILE64_SOURCE -D_XOPEN_SOURCE_EXTENDED
endif
-ifeq ($(UNAME), Darwin)
+ifeq ($(CONFIG_TARGET_OS), Darwin)
LIBS += -lpthread -ldl
endif
-ifneq (,$(findstring CYGWIN,$(UNAME)))
+ifneq (,$(findstring CYGWIN,$(CONFIG_TARGET_OS)))
SOURCE := $(filter-out engines/mmap.c,$(SOURCE))
SOURCE += os/windows/posix.c
LIBS += -lpthread -lpsapi -lws2_32
@@ -169,7 +168,7 @@ INSTALL = install
prefix = /usr/local
bindir = $(prefix)/bin
-ifeq ($(UNAME), Darwin)
+ifeq ($(CONFIG_TARGET_OS), Darwin)
mandir = /usr/share/man
else
mandir = $(prefix)/man
diff --git a/configure b/configure
index d364971..1fa9b63 100755
--- a/configure
+++ b/configure
@@ -126,6 +126,7 @@ output_sym() {
targetos=""
cpu=""
+cross_prefix=${cross_prefix-${CROSS_COMPILE}}
cc="${CC-${cross_prefix}gcc}"
show_help="no"
@@ -173,6 +174,12 @@ else
targetos=`uname -s`
fi
+echo "# Automatically generated by configure - do not modify" > $config_host_mak
+printf "# Configured with:" >> $config_host_mak
+printf " '%s'" "$0" "$@" >> $config_host_mak
+echo >> $config_host_mak
+echo "CONFIG_TARGET_OS=$targetos" >> $config_host_mak
+
# Some host OSes need non-standard checks for which CPU to use.
# Note that these checks are broken for cross-compilation: if you're
# cross-compiling to one of these OSes then you'll need to specify
@@ -929,11 +936,6 @@ echo "RLIMIT_MEMLOCK $rlimit_memlock"
#############################################################################
-echo "# Automatically generated by configure - do not modify" > $config_host_mak
-printf "# Configured with:" >> $config_host_mak
-printf " '%s'" "$0" "$@" >> $config_host_mak
-echo >> $config_host_mak
-
if test "$wordsize" = "64" ; then
output_sym "CONFIG_64BIT"
elif test "$wordsize" = "32" ; then
--
1.7.0.4
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/4] configure: compile-time word size detection
2013-03-14 5:57 [PATCH 0/4] Cross compile improvements Aaron Carroll
2013-03-14 5:57 ` [PATCH 1/4] Propagate target OS from configure to Makefile Aaron Carroll
@ 2013-03-14 5:57 ` Aaron Carroll
2013-03-14 5:57 ` [PATCH 3/4] configure: endianness check for cross compile Aaron Carroll
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Aaron Carroll @ 2013-03-14 5:57 UTC (permalink / raw)
To: fio
Signed-off-by: Aaron Carroll <aaronc@cse.unsw.edu.au>
---
configure | 14 +++++++++-----
1 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/configure b/configure
index 1fa9b63..84c6af2 100755
--- a/configure
+++ b/configure
@@ -348,16 +348,20 @@ echo
# check for wordsize
wordsize="0"
cat > $TMPC <<EOF
-#include <stdio.h>
+#include <limits.h>
+#define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)]))
int main(void)
{
- unsigned int wsize = sizeof(long) * 8;
- printf("%d\n", wsize);
+ BUILD_BUG_ON(sizeof(long)*CHAR_BIT != WORDSIZE);
return 0;
}
EOF
-if compile_prog "" "" "wordsize"; then
- wordsize=`$TMPE`
+if compile_prog "-DWORDSIZE=32" "" "wordsize"; then
+ wordsize="32"
+elif compile_prog "-DWORDSIZE=64" "" "wordsize"; then
+ wordsize="64"
+else
+ fatal "Unknown wordsize"
fi
echo "Wordsize $wordsize"
--
1.7.0.4
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 3/4] configure: endianness check for cross compile
2013-03-14 5:57 [PATCH 0/4] Cross compile improvements Aaron Carroll
2013-03-14 5:57 ` [PATCH 1/4] Propagate target OS from configure to Makefile Aaron Carroll
2013-03-14 5:57 ` [PATCH 2/4] configure: compile-time word size detection Aaron Carroll
@ 2013-03-14 5:57 ` Aaron Carroll
2013-03-14 5:57 ` [PATCH 4/4] Android: remove static Android configuration Aaron Carroll
2013-03-14 14:09 ` [PATCH 0/4] Cross compile improvements Jens Axboe
4 siblings, 0 replies; 6+ messages in thread
From: Aaron Carroll @ 2013-03-14 5:57 UTC (permalink / raw)
To: fio
- Add a cross compile check: assume yes if we can't run a test binary
- If cross compiling, revert to a compile-time endianess check. This tries
a few possible ways to detect big endian, but otherwise assumes little. We
rely on the run-time check to save us if the build-time check is wrong.
Signed-off-by: Aaron Carroll <aaronc@cse.unsw.edu.au>
---
configure | 40 +++++++++++++++++++++++++++++++++++++---
1 files changed, 37 insertions(+), 3 deletions(-)
diff --git a/configure b/configure
index 84c6af2..965623d 100755
--- a/configure
+++ b/configure
@@ -323,9 +323,26 @@ fi
cc="${CC-${cross_prefix}gcc}"
##########################################
+# check cross compile
+
+cross_compile="no"
+cat > $TMPC <<EOF
+int main(void)
+{
+ return 0;
+}
+EOF
+if compile_prog "" "" "cross"; then
+ $TMPE 2>/dev/null || cross_compile="yes"
+else
+ fatal "compile test failed"
+fi
+
+##########################################
# check endianness
bigendian="no"
-cat > $TMPC <<EOF
+if test "$cross_compile" = "no" ; then
+ cat > $TMPC <<EOF
#include <inttypes.h>
int main(void)
{
@@ -333,8 +350,24 @@ int main(void)
return (*((uint8_t*)(&i))) == 0x67;
}
EOF
-if compile_prog "" "" "endian"; then
- $TMPE && bigendian="yes"
+ if compile_prog "" "" "endian"; then
+ $TMPE && bigendian="yes"
+ fi
+else
+ # If we're cross compiling, try our best to work it out and rely on the
+ # run-time check to fail if we get it wrong.
+ cat > $TMPC <<EOF
+#include <endian.h>
+int main(void)
+{
+#if __BYTE_ORDER != __BIG_ENDIAN
+# error "Unknown endianness"
+#endif
+}
+EOF
+ compile_prog "" "" "endian" && bigendian="yes"
+ check_define "__ARMEB__" && bigendian="yes"
+ check_define "__MIPSEB__" && bigendian="yes"
fi
@@ -342,6 +375,7 @@ echo "Operating system $targetos"
echo "CPU $cpu"
echo "Big endian $bigendian"
echo "Compiler $cc"
+echo "Cross compile $cross_compile"
echo
##########################################
--
1.7.0.4
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 4/4] Android: remove static Android configuration
2013-03-14 5:57 [PATCH 0/4] Cross compile improvements Aaron Carroll
` (2 preceding siblings ...)
2013-03-14 5:57 ` [PATCH 3/4] configure: endianness check for cross compile Aaron Carroll
@ 2013-03-14 5:57 ` Aaron Carroll
2013-03-14 14:09 ` [PATCH 0/4] Cross compile improvements Jens Axboe
4 siblings, 0 replies; 6+ messages in thread
From: Aaron Carroll @ 2013-03-14 5:57 UTC (permalink / raw)
To: fio
Android can now be configured dynamically, so remove the static config.
For this we need to modify the socklen_t check #includes which appear to
be wrong anyway.
Signed-off-by: Aaron Carroll <aaronc@cse.unsw.edu.au>
---
configure | 13 +------------
1 files changed, 1 insertions(+), 12 deletions(-)
diff --git a/configure b/configure
index 965623d..2859891 100755
--- a/configure
+++ b/configure
@@ -233,16 +233,6 @@ CYGWIN*)
echo "EXTFLAGS=$CFLAGS -include config-host.h -D_GNU_SOURCE" >> $config_host_mak
exit 0
;;
-Android)
- output_sym "CONFIG_32BIT"
- output_sym "CONFIG_LITTLE_ENDIAN"
- output_sym "CONFIG_SOCKLEN_T"
- output_sym "CONFIG_GETTIMEOFDAY"
- output_sym "CONFIG_CLOCK_GETTIME"
- output_sym "CONFIG_CLOCK_MONOTONIC"
- echo "CC=$cc" >> $config_host_mak
- echo "EXTFLAGS=$CFLAGS -include config-host.h -D_GNU_SOURCE" >> $config_host_mak
- exit 0
esac
if test ! -z "$cpu" ; then
@@ -874,8 +864,7 @@ echo "inet_aton $inet_aton"
# socklen_t probe
socklen_t="no"
cat > $TMPC << EOF
-#include <string.h>
-#include <netinet/in.h>
+#include <sys/socket.h>
int main(int argc, char **argv)
{
socklen_t len = 0;
--
1.7.0.4
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 0/4] Cross compile improvements
2013-03-14 5:57 [PATCH 0/4] Cross compile improvements Aaron Carroll
` (3 preceding siblings ...)
2013-03-14 5:57 ` [PATCH 4/4] Android: remove static Android configuration Aaron Carroll
@ 2013-03-14 14:09 ` Jens Axboe
4 siblings, 0 replies; 6+ messages in thread
From: Jens Axboe @ 2013-03-14 14:09 UTC (permalink / raw)
To: Aaron Carroll; +Cc: fio
On Thu, Mar 14 2013, Aaron Carroll wrote:
> This set improves handling of cross compilation to the point where
> Android can now build with no special-casing in the configure script.
>
> Tested on Linux/x86 and Darwin/x86_64 native, and cross compile from
> Linux/x86 to Android/arm and Linux/arm. I dont have access to any
> big endian machine, so a sanity check of the endianess changes would
> be appreciated.
Thanks Aaron, applied. I give it the most nasty of tests, seeing if
configure runs and fio builds on HPUX/ia64:
bash-4.2# ./configure
Operating system HP-UX
CPU ia64
Big endian yes
Compiler gcc
Cross compile no
[...]
bash-4.2# /usr/local/bin/gmake -j8
FIO_VERSION = fio-2.0.14
[...]
LINK fio
bash-4.2#
So I think you can consider this a pass.
--
Jens Axboe
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2013-03-14 14:10 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-03-14 5:57 [PATCH 0/4] Cross compile improvements Aaron Carroll
2013-03-14 5:57 ` [PATCH 1/4] Propagate target OS from configure to Makefile Aaron Carroll
2013-03-14 5:57 ` [PATCH 2/4] configure: compile-time word size detection Aaron Carroll
2013-03-14 5:57 ` [PATCH 3/4] configure: endianness check for cross compile Aaron Carroll
2013-03-14 5:57 ` [PATCH 4/4] Android: remove static Android configuration Aaron Carroll
2013-03-14 14:09 ` [PATCH 0/4] Cross compile improvements Jens Axboe
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox