* [PATCH/RFC] Improve cross-compile support
@ 2013-03-13 2:40 Aaron Carroll
2013-03-13 14:59 ` Jens Axboe
0 siblings, 1 reply; 3+ messages in thread
From: Aaron Carroll @ 2013-03-13 2:40 UTC (permalink / raw)
To: fio
[-- Attachment #1: Type: text/plain, Size: 779 bytes --]
A first attempt at making cross-compile viable is attached.
Specifically we:
- Propagate the target OS from configure to Makefile so we dont need uname
- Allow CROSS_COMPILE for toolchain prefix, which is common (e.g. Linux)
- Allow wordsize and bigendian to be set statically. These are
usually determined by executing a test program, which obviously
doesn't work for cross compiles.
- Make the Android config dynamic (but set wordsize/bigendian)
Now the wordsize/bigendian handling is not ideal but I can't think of
a better approach right now.
Also I've changed the #includes in the socklet_t check. sys/socket.h
appears to be the right thing, but please check.
Compile tested on Linux/i386 native, Linux/i386 to Android cross
compile, and OS X native.
-- Aaron
[-- Attachment #2: 0001-Improve-cross-compile-support.patch --]
[-- Type: application/octet-stream, Size: 5899 bytes --]
From f79b66fb89739ba8b834584ffa23ef4079074683 Mon Sep 17 00:00:00 2001
From: Aaron Carroll <aaronc@cse.unsw.edu.au>
Date: Wed, 13 Mar 2013 13:24:12 +1100
Subject: [PATCH] Improve cross-compile support
- Propagate the target OS from configure to Makefile so we dont need uname
- Allow CROSS_COMPILE for toolchain prefix, which is common (e.g. Linux)
- Allow wordsize and bigendian to be set statically. These are usually
determined by executing a test program, which obviously doesn't work for
cross compiles.
- Make the Android config dynamic (but set wordsize/bigendian)
Signed-off-by: Aaron Carroll <aaronc@cse.unsw.edu.au>
---
Makefile | 21 ++++++++++-----------
configure | 49 +++++++++++++++++++++++++------------------------
2 files changed, 35 insertions(+), 35 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 d1f277d..13cc3e7 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,13 @@ 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
@@ -227,15 +235,10 @@ CYGWIN*)
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 -DFIO_NO_HAVE_SHM_H -D_GNU_SOURCE" >> $config_host_mak
- exit 0
+ # Android is always cross-compile, so force known CPU features
+ wordsize="32"
+ bigendian="no"
+ ;;
esac
if test ! -z "$cpu" ; then
@@ -317,8 +320,9 @@ cc="${CC-${cross_prefix}gcc}"
##########################################
# check endianness
-bigendian="no"
-cat > $TMPC <<EOF
+if test -z "$bigendian" ; then
+ bigendian="no"
+ cat > $TMPC <<EOF
#include <inttypes.h>
int main(void)
{
@@ -326,8 +330,9 @@ 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
fi
@@ -339,8 +344,9 @@ echo
##########################################
# check for wordsize
-wordsize="0"
-cat > $TMPC <<EOF
+if test -z "$wordsize" ; then
+ wordsize="0"
+ cat > $TMPC <<EOF
#include <stdio.h>
int main(void)
{
@@ -349,8 +355,9 @@ int main(void)
return 0;
}
EOF
-if compile_prog "" "" "wordsize"; then
- wordsize=`$TMPE`
+ if compile_prog "" "" "wordsize"; then
+ wordsize=`$TMPE`
+ fi
fi
echo "Wordsize $wordsize"
@@ -829,8 +836,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;
@@ -929,11 +935,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] 3+ messages in thread
* Re: [PATCH/RFC] Improve cross-compile support
2013-03-13 2:40 [PATCH/RFC] Improve cross-compile support Aaron Carroll
@ 2013-03-13 14:59 ` Jens Axboe
2013-03-14 0:09 ` Aaron Carroll
0 siblings, 1 reply; 3+ messages in thread
From: Jens Axboe @ 2013-03-13 14:59 UTC (permalink / raw)
To: Aaron Carroll; +Cc: fio
On Wed, Mar 13 2013, Aaron Carroll wrote:
> A first attempt at making cross-compile viable is attached.
>
> Specifically we:
> - Propagate the target OS from configure to Makefile so we dont need uname
> - Allow CROSS_COMPILE for toolchain prefix, which is common (e.g. Linux)
> - Allow wordsize and bigendian to be set statically. These are
> usually determined by executing a test program, which obviously
> doesn't work for cross compiles.
> - Make the Android config dynamic (but set wordsize/bigendian)
>
> Now the wordsize/bigendian handling is not ideal but I can't think of
> a better approach right now.
>
> Also I've changed the #includes in the socklet_t check. sys/socket.h
> appears to be the right thing, but please check.
>
> Compile tested on Linux/i386 native, Linux/i386 to Android cross
> compile, and OS X native.
Looks OK to me, I can test on other platforms too. But it does not apply
against current -git:
patching file Makefile
patching file configure
Hunk #3 FAILED at 235.
1 out of 9 hunks FAILED -- saving rejects to file configure.rej
Can you update and resend? Thanks!
--
Jens Axboe
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH/RFC] Improve cross-compile support
2013-03-13 14:59 ` Jens Axboe
@ 2013-03-14 0:09 ` Aaron Carroll
0 siblings, 0 replies; 3+ messages in thread
From: Aaron Carroll @ 2013-03-14 0:09 UTC (permalink / raw)
To: Jens Axboe; +Cc: fio
On 14/03/13 1:59 AM, Jens Axboe wrote:
> On Wed, Mar 13 2013, Aaron Carroll wrote:
>> A first attempt at making cross-compile viable is attached.
>> [..]
>
> Looks OK to me, I can test on other platforms too. But it does not apply
> against current -git:
>
> patching file Makefile
> patching file configure
> Hunk #3 FAILED at 235.
> 1 out of 9 hunks FAILED -- saving rejects to file configure.rej
>
> Can you update and resend? Thanks!
I've made more progress with this, so I'll send a new/updated series
through soon.
Thanks,
-- Aaron
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2013-03-14 0:09 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-03-13 2:40 [PATCH/RFC] Improve cross-compile support Aaron Carroll
2013-03-13 14:59 ` Jens Axboe
2013-03-14 0:09 ` Aaron Carroll
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.