[PATCH] Support OpenMP for task parallelism on Android-ICS/GCC-4.6.3

2012-12-26 Thread Geunsik Lim
From: Geunsik Lim 

The patch supports OpenMP library to parallelize the existing
C/C++ code rapidly/easily without any modification of android platform
on multicore embedded devices.

The original patch is made by Keith Obenschain (using GCC 4.4.3).
. Archive - https://android-review.googlesource.com/#/c/34491/

I just moved GCC version from 4.4.3 to 4.6.3 for ktoolchain ver 2.5. 
The patch is good to me when I evaluate a lot of C/C++ source code with 
OpenMP's #parama.

Please, refer to the "kandroid toolchain" menu in www.kandroid.org to compile  
source code including bionic and openmp library on real Android devices. 
http://kandroid.org/board/board.php?board=toolchain&command=body&no=16

I tested Openmp library with the latest GCC 4.6.3 on Android/ARM devices as 
following. 
Please refer to the below example. 

geunsik@rhel6$> ./arm-linux-androideabi-gcc   openmptest.c  -L
/usr/local/ktoolchain-cortexa9-ver2.5-20120515-bionic/arm-linux-androideabi/lib
 -lgomp  -o openmptest   [ENTER]
geunsik@rhel6$>
geunsik@rhel6$>
geunsik@rhel6$> file ./openmptest
./openmptest: ELF 32-bit LSB executable, ARM, version 1 (SYSV), 
dynamically linked (uses shared libs), not stripped



Signed-off-by: Geunsik Lim 
Acked-by: Geunsik Lim 
---
 gcc/config/arm/linux-eabi.h |2 +-
 gcc/config/linux-android.h  |3 ++-
 libgomp/configure   |   52 ++-
 libgomp/configure.ac|9 +++-
 libgomp/env.c   |1 +
 5 files changed, 63 insertions(+), 4 deletions(-)

diff --git a/gcc/config/arm/linux-eabi.h b/gcc/config/arm/linux-eabi.h
index 8330052..c3e632c 100644
--- a/gcc/config/arm/linux-eabi.h
+++ b/gcc/config/arm/linux-eabi.h
@@ -82,7 +82,7 @@
 #undef  LIB_SPEC
 #define LIB_SPEC   \
   LINUX_OR_ANDROID_LD (GNU_USER_TARGET_LIB_SPEC,   \
-  GNU_USER_TARGET_LIB_SPEC " " ANDROID_LIB_SPEC)
+  ANDROID_LIB_SPEC " " GNU_USER_TARGET_LIB_SPEC )
 
 #undef STARTFILE_SPEC
 #define STARTFILE_SPEC \
diff --git a/gcc/config/linux-android.h b/gcc/config/linux-android.h
index 94c5274..b1a9021 100644
--- a/gcc/config/linux-android.h
+++ b/gcc/config/linux-android.h
@@ -50,7 +50,8 @@
   "%{!frtti:%{!fno-rtti: -fno-rtti}}"
 
 #define ANDROID_LIB_SPEC \
-  "%{!static: -ldl}"
+  "%{!static: -ldl}" \
+  "%{pthread:-lc}"
 
 #define ANDROID_STARTFILE_SPEC \
   "%{!shared:" \
diff --git a/libgomp/configure b/libgomp/configure
index 6f25c6f..3d8ce6b 100755
--- a/libgomp/configure
+++ b/libgomp/configure
@@ -15015,7 +15015,54 @@ _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
   XPCFLAGS=" -Wc,-pthread"
 else
-  CFLAGS="$save_CFLAGS" LIBS="-lpthread $LIBS"
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+CFLAGS="$save_CFLAGS" LIBS="$LIBS"
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include 
+ void *g(void *d) { return NULL; }
+int
+main ()
+{
+pthread_t t; pthread_create(&t,NULL,g,NULL);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+{ ac_try='test -z "$ac_c_werror_flag"
+|| test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+{ ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+CFLAGS="$save_CFLAGS" LIBS="-lpthread $LIBS"
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include 
@@ -15038,6 +15085,9 @@ rm -f core conftest.err conftest.$ac_objext \
 fi
 rm -f core conftest.err conftest.$ac_objext \
 conftest$ac_exeext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext \
+conft

[PATCH] Support OpenMP for task parallelism on Android-ICS/GCC-4.7.2

2012-12-26 Thread Geunsik Lim
From: Geunsik Lim 

The patch supports OpenMP library to parallelize the existing
C/C++ code (e.g: for task parallelism) rapidly/easily without
any modification of android platform on multicore embedded devices.

The original patch is made by Keith Obenschain (using GCC 4.4.3).
. Archive - https://android-review.googlesource.com/#/c/34491/

I just moved GCC version from 4.4.3 to 4.7.2 for ktoolchain
version 2.5. The patch is good to me when I evaluate a lot of
C/C++ source code with OpenMP's #parama. we move the version
of OpenMP from version 2.5 to version 3.1.

Please, refer to the "kandroid toolchain" menu in www.kandroid.org
to compile source code including bionic and openmp library on real
Android devices.
http://kandroid.org/board/board.php?board=toolchain&command=body&no=16

I tested Openmp library with the latest GCC 4.7.2 on Android/ARM
devices as following. Please refer to the below example.

geunsik@rhel6$> ./arm-linux-androideabi-gcc   openmptest.c  -L
/usr/local/ktoolchain-cortexa9-ver2.5-20120515-bionic/arm-linux-androideabi/lib
 -lgomp  -o openmptest   [ENTER]
geunsik@rhel6$>
geunsik@rhel6$>
geunsik@rhel6$> file ./openmptest
./openmptest: ELF 32-bit LSB executable, ARM, version 1 (SYSV),
dynamically linked (uses shared libs), not stripped

Change-Id: I20cb3c1ac5c000445c043310158179723bd69fe2
Signed-off-by: Geunsik Lim 
Acked-by: Geunsik Lim 
---
 gcc-4.7/gcc/config/arm/linux-eabi.h |2 +-
 gcc-4.7/gcc/config/linux-android.h  |3 +-
 gcc-4.7/libgomp/configure   |   52 ++-
 gcc-4.7/libgomp/configure.ac|9 +-
 gcc-4.7/libgomp/env.c   |1 +
 5 files changed, 63 insertions(+), 4 deletions(-)

diff --git a/gcc-4.7/gcc/config/arm/linux-eabi.h 
b/gcc-4.7/gcc/config/arm/linux-eabi.h
index 88811b7..ddeb627 100644
--- a/gcc-4.7/gcc/config/arm/linux-eabi.h
+++ b/gcc-4.7/gcc/config/arm/linux-eabi.h
@@ -87,7 +87,7 @@
 #undef  LIB_SPEC
 #define LIB_SPEC   \
   LINUX_OR_ANDROID_LD (GNU_USER_TARGET_LIB_SPEC,   \
-  GNU_USER_TARGET_LIB_SPEC " " ANDROID_LIB_SPEC)
+  ANDROID_LIB_SPEC " " GNU_USER_TARGET_LIB_SPEC )
 
 #undef STARTFILE_SPEC
 #define STARTFILE_SPEC \
diff --git a/gcc-4.7/gcc/config/linux-android.h 
b/gcc-4.7/gcc/config/linux-android.h
index 033cfef..c6d9cdd 100644
--- a/gcc-4.7/gcc/config/linux-android.h
+++ b/gcc-4.7/gcc/config/linux-android.h
@@ -53,7 +53,8 @@
   "--noexecstack"
 
 #define ANDROID_LIB_SPEC \
-  "%{!static: -ldl}"
+  "%{!static: -ldl}" \
+  "%{pthread:-lc}"
 
 #define ANDROID_STARTFILE_SPEC \
   "%{shared: crtbegin_so%O%s;:"
\
diff --git a/gcc-4.7/libgomp/configure b/gcc-4.7/libgomp/configure
index 8ed841a..3c99b25 100755
--- a/gcc-4.7/libgomp/configure
+++ b/gcc-4.7/libgomp/configure
@@ -15013,7 +15013,54 @@ _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
   XPCFLAGS=" -Wc,-pthread"
 else
-  CFLAGS="$save_CFLAGS" LIBS="-lpthread $LIBS"
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+CFLAGS="$save_CFLAGS" LIBS="$LIBS"
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include 
+ void *g(void *d) { return NULL; }
+int
+main ()
+{
+pthread_t t; pthread_create(&t,NULL,g,NULL);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+{ ac_try='test -z "$ac_c_werror_flag"
+|| test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+{ ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+CFLAGS="$save_CFLAGS" LIBS="-lpthread $LIBS"
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end