Nginx and libatomic

Hi,

I tried to configure nginx 0.8.29 with libatomic 1.2 (manually built and
installed) by specifying

–with-libatomic=/usr/local/lib
(=> /usr/local/lib/libatomic_ops.a)

OR

–with-libatomic=…/libatomic_ops-1.2
(=> source code only)

but nginx shows no information to indicate if that configuration works
or not


checking for OS

  • Linux 2.6.18-164.el5PAE i686
    checking for C compiler … found
  • using GNU C compiler
  • gcc version: 4.1.2 20080704 (Red Hat 4.1.2-46)
    checking for gcc -pipe switch … found
    checking for gcc builtin atomic operations … not found
    checking for gcc variadic macros … found
    checking for C99 variadic macros … found
    checking for unistd.h … found
    checking for inttypes.h … found
    checking for limits.h … found
    checking for sys/filio.h … not found
    checking for sys/param.h … found
    checking for sys/mount.h … found
    checking for sys/statvfs.h … found
    checking for crypt.h … found
    checking for Linux specific features
    checking for epoll … found
    checking for sendfile() … found
    checking for sendfile64() … found
    checking for sys/prctl.h … found
    checking for prctl(PR_SET_DUMPABLE) … found
    checking for sched_setaffinity() … found
    checking for crypt_r() … found
    checking for sys/vfs.h … found
    checking for poll() … found
    checking for /dev/poll … not found
    checking for kqueue … not found
    checking for crypt() … not found
    checking for crypt() in libcrypt … found
    checking for F_READAHEAD … not found
    checking for posix_fadvise() … found
    checking for O_DIRECT … found
    checking for F_NOCACHE … not found
    checking for directio() … not found
    checking for statfs() … found
    checking for statvfs() … found
    checking for dlopen() … not found
    checking for dlopen() in libdl … found
    checking for sched_yield() … found
    checking for OpenSSL library … found
    checking for zlib library … found
    checking for perl
  • perl version: v5.8.8 built for i386-linux-thread-multi
  • perl interpreter multiplicity found
    creating objs/Makefile
    checking for int size … 4 bytes
    checking for long size … 4 bytes
    checking for long long size … 8 bytes
    checking for void * size … 4 bytes
    checking for uint64_t … found
    checking for sig_atomic_t … found
    checking for sig_atomic_t size … 4 bytes
    checking for socklen_t … found
    checking for in_addr_t … found
    checking for in_port_t … found
    checking for rlim_t … found
    checking for uintptr_t … uintptr_t found
    checking for system endianess … little endianess
    checking for size_t size … 4 bytes
    checking for off_t size … 8 bytes
    checking for time_t size … 4 bytes
    checking for setproctitle() … not found
    checking for pread() … found
    checking for pwrite() … found
    checking for strerror_r() … found but is not working
    checking for gnu style strerror_r() … found
    checking for localtime_r() … found
    checking for posix_memalign() … found
    checking for memalign() … found
    checking for mmap(MAP_ANON|MAP_SHARED) … found
    checking for mmap("/dev/zero", MAP_SHARED) … found
    checking for System V shared memory … found
    checking for struct msghdr.msg_control … found
    checking for ioctl(FIONBIO) … found
    checking for struct tm.tm_gmtoff … found
    checking for struct dirent.d_namlen … not found
    checking for struct dirent.d_type … found

Configuration summary

  • using PCRE library: /usr/local/src/pcre-8.00
  • using system OpenSSL library
  • md5: using OpenSSL library
  • using sha1 library: auto/lib/sha1
  • using system zlib library

nginx path prefix: “/usr/local/nginx”
nginx binary file: “/usr/local/sbin/nginx”
nginx configuration prefix: “/usr/local/nginx”
nginx configuration file: “/usr/local/nginx/nginx.conf”
nginx pid file: “/usr/local/nginx/nginx.pid”
nginx error log file: “/usr/local/nginx/logs/error.log”
nginx http access log file: “/usr/local/nginx/logs/access.log”
nginx http client request body temporary files:
“/usr/local/nginx/temp/client_body”
nginx http proxy temporary files: “/usr/local/nginx/temp/proxy”
nginx http fastcgi temporary files: “/usr/local/nginx/temp/fastcgi”

The warning “checking for gcc builtin atomic operations … not found”
shows that my default compiler gcc 4.1.2 20080704 does not support
atomic operations. I tried to configure CC=gcc44 CXX=g++44 to tell Nginx
use newer GCC44 but it seems to ignore it.

Am I doing wrong here?

Thanks

Dinh

Posted at Nginx Forum:
http://forum.nginx.org/read.php?2,28343,28343#msg-28343

On Sun, Dec 06, 2009 at 02:28:50AM -0500, pcdinh wrote:

I tried to configure nginx 0.8.29 with libatomic 1.2 (manually built and installed) by specifying

–with-libatomic=/usr/local/lib
(=> /usr/local/lib/libatomic_ops.a)

In this case you should use just
–with-libatomic

You should see

checking for atomic_ops library … found

OR

–with-libatomic=…/libatomic_ops-1.2
(=> source code only)

but nginx shows no information to indicate if that configuration works or not

Yes, now ./configure does not show this, I need to fix it.

checking for C99 variadic macros … found
checking for OpenSSL library … found
checking for zlib library … found
checking for perl

  • perl version: v5.8.8 built for i386-linux-thread-multi
  • perl interpreter multiplicity found
    creating objs/Makefile

nginx configuration file: “/usr/local/nginx/nginx.conf”
nginx pid file: “/usr/local/nginx/nginx.pid”
nginx error log file: “/usr/local/nginx/logs/error.log”
nginx http access log file: “/usr/local/nginx/logs/access.log”
nginx http client request body temporary files: “/usr/local/nginx/temp/client_body”
nginx http proxy temporary files: “/usr/local/nginx/temp/proxy”
nginx http fastcgi temporary files: “/usr/local/nginx/temp/fastcgi”

The warning “checking for gcc builtin atomic operations … not found” shows that my default compiler gcc 4.1.2 20080704 does not support atomic operations. I tried to configure CC=gcc44 CXX=g++44 to tell Nginx use newer GCC44 but it seems to ignore it.

Am I doing wrong here?

The gcc built-in atomic operations on x86 (but not on x86-64) are
available
only if -march=-486 or higher is set. You should add either
–with-cc-opt="-march=pentiumpro"
or
–with-cpu-opt=pentiumpro

However, you should not worry about this, since nginx uses own atomic
operations implementation on x86 anyway. As well as on amd64,
sparc32/64,
and ppc32/64. gcc atomic support and libatomic are required for other
platforms.


Igor S.
http://sysoev.ru/en/