> I have downloaded sqlite-3.2.7.tar.gz from Internet, but I do not know how > to compile it on s3c2410(linux 2.6, arm9, samsung)?
There's some info in the wiki on it, but basically the steps are: 1. change the configure script (see attached patch for 3.2.6) 2. configure with something like this (in my case an arm sa1110): cd $PATH/sqlite-3.2.6 CC=arm-sa1100-linux-gnu-gcc CXX=arm-sa1100-linux-gnu-g++ \ CFLAGS=-I$TOOLCHAIN_BASE/include BUILD_CC=gcc \ ./configure --host=i686-pc-linux --target=arm-sa1100-linux \ --disable-shared --disable-tcl --prefix=$PATH_INSTALL 3. change the Makefile a bit, setting 'BCC' to your regular compiler and (if you want) add the static build flag, for example doing something like this: mv Makefile Makefile.sed cat Makefile.sed | sed 's/^BCC.*/BCC = gcc/' | sed 's/^LTLINK.*/& -all-static/' > Makefile rm Makefile.sed 4. make && make install Mind you, depending on which core you have and whether you want floating point, you might find the other patch attached usefull as well. It is from an earlier posting of myself: "In order to wrap this up: apparently there's a feature / bug (choose one) in any ARM core earlier than v5 due to which a float will be stored in big endian quad order. The processor in this particular case is an SA1110, which is default little endian while having a v4 core..... (and thus is 'swapping' the quads)." -- Best, Frank.
--- configure_orig 2005-09-19 10:46:30.000000000 +0200 +++ configure 2005-09-19 10:46:34.000000000 +0200 @@ -19209,11 +19209,11 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu - if test "$cross_compiling" = "yes"; then - { { echo "$as_me:$LINENO: error: unable to find a compiler for building build tools" >&5 -echo "$as_me: error: unable to find a compiler for building build tools" >&2;} - { (exit 1); exit 1; }; } - fi +# if test "$cross_compiling" = "yes"; then +# { { echo "$as_me:$LINENO: error: unable to find a compiler for building build tools" >&5 +#echo "$as_me: error: unable to find a compiler for building build tools" >&2;} +# { (exit 1); exit 1; }; } +# fi BUILD_CC=$CC default_build_cflags=$CFLAGS else @@ -20165,11 +20165,11 @@ echo $ECHO_N "checking for $dir/include/readline.h... $ECHO_C" >&6 if eval "test \"\${$as_ac_File+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 -else - test "$cross_compiling" = yes && - { { echo "$as_me:$LINENO: error: cannot check for file existence when cross compiling" >&5 -echo "$as_me: error: cannot check for file existence when cross compiling" >&2;} - { (exit 1); exit 1; }; } +#else +# test "$cross_compiling" = yes && +# { { echo "$as_me:$LINENO: error: cannot check for file existence when cross compiling" >&5 +#echo "$as_me: error: cannot check for file existence when cross compiling" >&2;} +# { (exit 1); exit 1; }; } if test -r "$dir/include/readline.h"; then eval "$as_ac_File=yes" else @@ -20191,11 +20191,11 @@ echo $ECHO_N "checking for $dir/include/readline/readline.h... $ECHO_C" >&6 if eval "test \"\${$as_ac_File+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 -else - test "$cross_compiling" = yes && - { { echo "$as_me:$LINENO: error: cannot check for file existence when cross compiling" >&5 -echo "$as_me: error: cannot check for file existence when cross compiling" >&2;} - { (exit 1); exit 1; }; } +#else +# test "$cross_compiling" = yes && +# { { echo "$as_me:$LINENO: error: cannot check for file existence when cross compiling" >&5 +#echo "$as_me: error: cannot check for file existence when cross compiling" >&2;} +# { (exit 1); exit 1; }; } if test -r "$dir/include/readline/readline.h"; then eval "$as_ac_File=yes" else
--- vdbeaux.c_orig 2005-09-17 19:48:56.000000000 +0200 +++ vdbeaux.c 2005-09-19 10:55:50.000000000 +0200 @@ -1509,7 +1509,11 @@ } len = i = sqlite3VdbeSerialTypeLen(serial_type); while( i-- ){ - buf[i] = (v&0xFF); + if( serial_type==7 ){ + buf[(i+4)%8] = (v&0xFF); + }else{ + buf[i] = (v&0xFF); + } v >>= 8; } return len; @@ -1568,28 +1572,20 @@ pMem->flags = MEM_Int; return 6; } - case 6: /* 8-byte signed integer */ + case 6: { /* 8-byte signed integer */ + u64 x = (buf[0]<<24) | (buf[1]<<16) | (buf[2]<<8) | buf[3]; + u32 y = (buf[4]<<24) | (buf[5]<<16) | (buf[6]<<8) | buf[7]; + x = (x<<32) | y; + pMem->i = *(i64*)&x; + pMem->flags = MEM_Int; + return 8; + } case 7: { /* IEEE floating point */ - u64 x; - u32 y; -#ifndef NDEBUG - /* Verify that integers and floating point values use the same - ** byte order. The byte order differs on some (broken) architectures. - */ - static const u64 t1 = ((u64)0x3ff00000)<<32; - assert( 1.0==*(double*)&t1 ); -#endif - - x = (buf[0]<<24) | (buf[1]<<16) | (buf[2]<<8) | buf[3]; - y = (buf[4]<<24) | (buf[5]<<16) | (buf[6]<<8) | buf[7]; + u64 x = (buf[4]<<24) | (buf[5]<<16) | (buf[6]<<8) | buf[7]; + u32 y = (buf[0]<<24) | (buf[1]<<16) | (buf[2]<<8) | buf[3]; x = (x<<32) | y; - if( serial_type==6 ){ - pMem->i = *(i64*)&x; - pMem->flags = MEM_Int; - }else{ - pMem->r = *(double*)&x; - pMem->flags = MEM_Real; - } + pMem->r = *(double*)&x; + pMem->flags = MEM_Real; return 8; } default: {