source: rtems/cpukit/configure.ac @ f1738ed

4.115
Last change on this file since f1738ed was f1738ed, checked in by Sebastian Huber <sebastian.huber@…>, on 11/04/12 at 20:04:39

score: PR1607: Add and use CPU_SIZEOF_POINTER

Add and use new CPU port define CPU_SIZEOF_POINTER. It must be an
integer literal that can be used by the assembler. This value will be
used to calculate offsets of structure members. These offsets will be
used in assembler code.

The size of a pointer is part of the application binary interface (ABI)
and thus independent of the actual programming language. The compiler
will provide defines to determine the current ABI. We use these defines
to select the appropriate CPU_SIZEOF_POINTER value.

Static assertions in the new file "cpukit/score/src/percpuasm.c" will
ensure that the value of CPU_SIZEOF_POINTER is consistent with the
current compiler settings. Also the offset values used by assembler
code are verfied.

  • Property mode set to 100644
File size: 11.3 KB
Line 
1## Process this file with autoconf to produce a configure script.
2
3AC_PREREQ([2.69])
4AC_INIT([rtems-cpukit],[_RTEMS_VERSION],[http://www.rtems.org/bugzilla])
5AC_CONFIG_SRCDIR([score])
6RTEMS_TOP([..],[])
7
8RTEMS_CANONICAL_TARGET_CPU
9
10AM_INIT_AUTOMAKE([no-define nostdinc subdir-objects foreign 1.12.2])
11AM_MAINTAINER_MODE
12
13RTEMS_ENABLE_MULTILIB
14RTEMS_ENABLE_MULTIPROCESSING
15RTEMS_ENABLE_POSIX
16RTEMS_ENABLE_RTEMS_DEBUG
17RTEMS_ENABLE_NETWORKING
18
19RTEMS_ENV_RTEMSCPU
20RTEMS_CHECK_RTEMS_DEBUG
21
22# Is this a supported CPU?
23AC_MSG_CHECKING([if cpu $RTEMS_CPU is supported])
24if test -d "$srcdir/score/cpu/$RTEMS_CPU"; then
25  AC_MSG_RESULT(yes)
26else
27  AC_MSG_ERROR(no)
28fi
29
30RTEMS_PROG_CC_FOR_TARGET
31RTEMS_PROG_CCAS
32RTEMS_CANONICALIZE_TOOLS
33AM_PROG_CC_C_O
34AC_PROG_RANLIB
35
36RTEMS_CHECK_NEWLIB
37
38# BSD-isms, used throughout the sources
39# Not really used by this configure script
40# FIXME: They should be eliminated if possible.
41AC_CHECK_FUNCS([strsep strcasecmp snprintf])
42AC_CHECK_FUNCS([strdup strndup strncasecmp])
43AC_CHECK_FUNCS([bcopy bcmp])
44AC_CHECK_FUNCS([isascii fileno])
45
46# <FIXME>
47#   Check for functions supplied by newlib >= 1.17.0
48# Newlib's posix/ directory
49AC_CHECK_FUNCS([readdir_r isatty])
50AC_CHECK_FUNCS([creat \
51  opendir closedir readdir rewinddir scandir seekdir \
52  sleep \
53  telldir \
54  usleep],,
55  [rtems_missing_func="$ac_func";break])
56AS_IF([test -n "$rtems_missing_func"],
57  AC_MSG_ERROR([Missing function $rtems_missing_func in libc])])
58AC_CHECK_FUNCS([__assert])
59AC_CHECK_FUNCS([execl execlp execle execv execvp execve])
60AC_CHECK_FUNCS([regcomp regexec regerror regfree])
61
62# Mandated by POSIX, decls not present in some versions of newlib
63AC_CHECK_DECLS([flockfile],[AC_CHECK_FUNCS([flockfile])],,[#include <stdio.h>])
64AC_CHECK_DECLS([funlockfile],[AC_CHECK_FUNCS([funlockfile])],,[#include <stdio.h>])
65AC_CHECK_DECLS([ftrylockfile],[AC_CHECK_FUNCS([ftrylockfile])],,[#include <stdio.h>])
66
67# Newlib proprietary
68AC_CHECK_HEADERS([envlock.h])
69AC_CHECK_DECLS([__env_lock],,,[#include <envlock.h>])
70AC_CHECK_DECLS([__env_unlock],,,[#include <envlock.h>])
71
72# Mandated by POSIX, older newlibs bogusly provided CLOCK_PROCESS_CPUTIME+CLOCK_THREAD_CPUTIME
73AC_CHECK_DECL([CLOCK_PROCESS_CPUTIME_ID],[],[AC_MSG_ERROR([missing define CLOCK_PROCESS_CPUTIME_ID])],[#include <time.h>])
74AC_CHECK_DECL([CLOCK_THREAD_CPUTIME_ID],[],[AC_MSG_ERROR([missing define CLOCK_THREAD_CPUTIME_ID])],[#include <time.h>])
75
76# Mandated by POSIX, decls not present in some versions of newlib,
77# some versions stubbed in newlib's rtems crt0
78RTEMS_CHECK_FUNC([seteuid],[#include <unistd.h>])
79RTEMS_CHECK_FUNC([geteuid],[#include <unistd.h>])
80RTEMS_CHECK_FUNC([setegid],[#include <unistd.h>])
81RTEMS_CHECK_FUNC([getegid],[#include <unistd.h>])
82RTEMS_CHECK_FUNC([setuid],[#include <unistd.h>])
83RTEMS_CHECK_FUNC([getuid],[#include <unistd.h>])
84RTEMS_CHECK_FUNC([setgid],[#include <unistd.h>])
85RTEMS_CHECK_FUNC([getgid],[#include <unistd.h>])
86RTEMS_CHECK_FUNC([setsid],[#include <unistd.h>])
87RTEMS_CHECK_FUNC([getsid],[#include <unistd.h>])
88RTEMS_CHECK_FUNC([setpgid],[#include <unistd.h>])
89RTEMS_CHECK_FUNC([getpgid],[#include <unistd.h>])
90RTEMS_CHECK_FUNC([setpgrp],[#include <unistd.h>])
91RTEMS_CHECK_FUNC([getpgrp],[#include <unistd.h>])
92
93# pthread-functions not declared in some versions of newlib.
94RTEMS_CHECK_FUNC([pthread_attr_getguardsize],[#include <pthread.h>])
95RTEMS_CHECK_FUNC([pthread_attr_setguardsize],[#include <pthread.h>])
96RTEMS_CHECK_FUNC([pthread_attr_setstack],[#include <pthread.h>])
97RTEMS_CHECK_FUNC([pthread_attr_getstack],[#include <pthread.h>])
98
99# Mandated by POSIX, not declared in some versions of newlib.
100AC_CHECK_DECLS([getrusage],,,[#include sys/resource.h])
101
102# Newlib's unix/ directory
103AC_CHECK_FUNCS([ttyname getcwd])
104# </FIXME>
105
106# Check if the installed toolchain provides these headers
107# and error out if not.
108AC_CHECK_HEADERS([tar.h errno.h sched.h sys/cdefs.h sys/queue.h],,
109  [rtems_missing_header="$ac_header";break])
110AS_IF([test -n "$rtems_missing_header"],
111  AC_MSG_ERROR([Missing required header $rtems_missing_header])])
112
113## error out if libc doesn't provide stdint.h
114AS_IF([test x"${ac_cv_header_stdint_h}" != xyes],
115[AC_MSG_ERROR([Required header stdint.h not found])])
116
117## error out if libc doesn't provide inttypes.h
118AS_IF([test x"${ac_cv_header_inttypes_h}" != xyes],
119[AC_MSG_ERROR([Required header inttypes.h not found])])
120
121AC_HEADER_STDBOOL
122AS_IF([test x"${ac_cv_header_stdbool_h}" != xyes],
123[AC_MSG_ERROR([No sufficient stdbool.h found])])
124
125AC_CHECK_TYPES([ uint8_t,  int8_t])
126AC_CHECK_TYPES([uint16_t, int16_t])
127AC_CHECK_TYPES([uint32_t, int32_t])
128AC_CHECK_TYPES([uint64_t, int64_t])
129AC_CHECK_TYPES([uintmax_t, intmax_t])
130AC_CHECK_TYPES([uintptr_t, intptr_t])
131
132# Some toolchain sanity checks and diagnostics
133RTEMS_CHECK_GCC_SANITY
134
135# These are conditionally defined by the toolchain
136# FIXME: we should either conditionally compile those parts in
137# RTEMS depending on them, or abort - For now, simply check.
138AC_CHECK_HEADER([pthread.h],[
139  AC_CHECK_TYPES([pthread_rwlock_t])
140  AC_CHECK_TYPES([pthread_barrier_t])
141  AC_CHECK_TYPES([pthread_spinlock_t])
142])
143
144AC_CHECK_HEADER([signal.h],[
145  AC_CHECK_TYPES([sighandler_t])
146])
147
148RTEMS_CHECK_MULTIPROCESSING
149RTEMS_CHECK_POSIX_API
150RTEMS_CHECK_NETWORKING
151RTEMS_CHECK_SMP
152
153rtems_major=`echo _RTEMS_VERSION | sed "s/\..*//"`
154rtems_minor=`echo _RTEMS_VERSION | sed "s/[[0-9]][[0-9]]*\.//;s/\..*//"`
155rtems_revision=`echo _RTEMS_VERSION | sed "s/[[0-9]][[0-9]]*\.//;s/[[0-9]][[0-9]]*\.//;s/\..*//"`
156
157_RTEMS_CPUOPT_INIT
158
159RTEMS_CPUOPT([RTEMS_DEBUG],
160  [test x"${enable_rtems_debug}" = x"yes"],
161  [1],
162  [if RTEMS_DEBUG is enabled])
163
164RTEMS_CPUOPT([RTEMS_MULTIPROCESSING],
165  [test x"$enable_multiprocessing" = xyes],
166  [1],
167  [if multiprocessing is enabled])
168
169RTEMS_CPUOPT([RTEMS_NEWLIB],
170  [test x"$RTEMS_USE_NEWLIB" = xyes],
171  [1],
172  [if using newlib])
173
174RTEMS_CPUOPT([RTEMS_POSIX_API],
175  [test x"$rtems_cv_HAS_POSIX_API" = xyes],
176  [1],
177  [if posix api is supported])
178
179RTEMS_CPUOPT([RTEMS_SMP],
180  [test x"$RTEMS_HAS_SMP" = xyes],
181  [1],
182  [if SMP is enabled])
183
184RTEMS_CPUOPT([RTEMS_NETWORKING],
185  [test x"$rtems_cv_HAS_NETWORKING" = xyes],
186  [1],
187  [if networking is enabled])
188
189RTEMS_CPUOPT([RTEMS_VERSION],
190  [true],
191  ["]_RTEMS_VERSION["],
192  [RTEMS version string])
193
194RTEMS_CPUOPT([__RTEMS_USE_TICKS_FOR_STATISTICS__],
195  [test x"${USE_TICKS_FOR_STATISTICS}" = x"1"],
196  [1],
197  [disable nanosecond granularity for statistics])
198
199## This improves both the size and coverage analysis.
200RTEMS_CPUOPT([__RTEMS_DO_NOT_INLINE_THREAD_ENABLE_DISPATCH__],
201  [test x"${RTEMS_DO_NOT_INLINE_THREAD_ENABLE_DISPATCH}" = x"1"],
202  [1],
203  [disable inlining _Thread_Enable_dispatch])
204
205## This improves both the size and coverage analysis.
206RTEMS_CPUOPT([__RTEMS_DO_NOT_INLINE_CORE_MUTEX_SEIZE__],
207  [test x"${RTEMS_DO_NOT_INLINE_CORE_MUTEX_SEIZE}" = x"1"],
208  [1],
209  [disable inlining _Thread_Enable_dispatch])
210
211## This improves both the size and coverage analysis.
212RTEMS_CPUOPT([__RTEMS_DO_NOT_UNROLL_THREADQ_ENQUEUE_PRIORITY__],
213  [test x"${RTEMS_DO_NOT_UNROLL_THREADQ_ENQUEUE_PRIORITY}" = x"1"],
214  [1],
215  [disable inlining _Thread_queue_Enqueue_priority])
216
217## This gives the same behavior as 4.8 and older
218RTEMS_CPUOPT([__RTEMS_STRICT_ORDER_MUTEX__],
219  [test x"${ENABLE_STRICT_ORDER_MUTEX}" = x"1"],
220  [1],
221  [disable strict order mutex])
222
223## Deactivate ada bindings
224RTEMS_CPUOPT([__RTEMS_ADA__],
225  [test x"${enable_ada}" = x"yes"],
226  [1],
227  [Define to 1 if ada/gnat bindings are built-in])
228
229## Then we propagate a private copy of the value into cpuopts.h
230## so it is always available to the RTEMS header files.
231
232RTEMS_CPUOPT([__RTEMS_MAJOR__],
233  [true],
234  [$rtems_major],
235  [major version portion of an RTEMS release])
236
237RTEMS_CPUOPT([__RTEMS_MINOR__],
238  [true],
239  [$rtems_minor],
240  [minor version portion of an RTEMS release])
241
242RTEMS_CPUOPT([__RTEMS_REVISION__],
243  [true],
244  [$rtems_revision],
245  [revision version portion of an RTEMS release])
246
247_RTEMS_CPUOPT_FINI
248
249AC_ENABLE_MULTILIB([Makefile],[..])
250
251# libmisc/shell/* wants to assign file descriptors to stdio file descriptors.
252AC_MSG_CHECKING([for assignable stdio])
253AC_COMPILE_IFELSE(
254  [AC_LANG_PROGRAM(
255    [#include <stdio.h>],
256    [stdin = fopen("/tmp", "r")])],
257  [HAVE_ASSIGNABLE_STDIO=yes],
258  [HAVE_ASSIGNABLE_STDIO=no])
259AC_MSG_RESULT([$HAVE_ASSIGNABLE_STDIO])
260
261# libmisc/serdbg exploits weak symbols
262RTEMS_CHECK_GCC_WEAK
263
264# FIXME: These checks are only in here to provide
265# configuration-time diagnostics and are not really used.
266AC_CHECK_DECLS([_POSIX_LOGIN_NAME_MAX],,,[#include <limits.h>])
267AC_CHECK_DECLS([CHAR_BIT],,,[#include <limits.h>])
268
269# FIXME: We should get rid of this.
270# So far, only used in libfs/src/nfsclient/src/dirutils.c
271AC_CHECK_SIZEOF([mode_t])
272AC_CHECK_SIZEOF([off_t])
273
274# FIXME: We should get rid of this. It's a cludge.
275AC_CHECK_SIZEOF([time_t])
276
277# FIXME: Mandatory in SUSv4, optional in SUSv3.
278#   Not implemented in GCC/newlib, so far.
279AC_CHECK_DECLS([WORD_BIT],,,[#include <limits.h>])
280AC_CHECK_DECLS([LONG_BIT],,,[#include <limits.h>])
281
282## BSD-ism, excluded from POSIX, but available on most platforms
283AC_CHECK_DECLS([sbrk],,,[#include <unistd.h>])
284AC_CHECK_DECLS([rcmd],,,[#include <unistd.h>])
285
286## Check if libc provides BSD's strlcpy/strlcat
287AC_CHECK_FUNCS(strlcpy strlcat)
288
289## Check if libc provides decl of utime
290## FIXME: utime has been deprecated in SUSv4.
291##        and is likely to be removed in future versions.
292## FIXME (BUG in newlib): SUSv4 saids including <utime.h> should be sufficient.
293AC_CHECK_DECLS([utime],,,[#include <sys/types.h>
294#include <utime.h>])
295## Check if libc provides decl of utimes
296AC_CHECK_DECLS([utimes],,,[#include <sys/time.h>])
297
298# ... far too many conditionals ...
299AM_CONDITIONAL(LIBRPC,[test x"$rtems_cv_HAS_NETWORKING" = x"yes"])
300AM_CONDITIONAL(NEWLIB,test x"$RTEMS_USE_NEWLIB" = x"yes")
301
302AM_CONDITIONAL(HAS_MP,test x"$enable_multiprocessing" = x"yes" )
303AM_CONDITIONAL(HAS_SMP,[test "$RTEMS_HAS_SMP" = "yes"])
304
305AM_CONDITIONAL(HAS_PTHREADS,test x"$rtems_cv_HAS_POSIX_API" = x"yes")
306AM_CONDITIONAL(LIBNETWORKING,test x"$rtems_cv_HAS_NETWORKING" = x"yes")
307
308AM_CONDITIONAL([LIBSHELL],[test x"$HAVE_ASSIGNABLE_STDIO" = x"yes"])
309AM_CONDITIONAL([LIBSERDBG],[test x"$rtems_cv_cc_attribute_weak" = x"yes"])
310AM_CONDITIONAL([LIBGNAT],[test x"$rtems_cv_HAS_POSIX_API" = x"yes" \
311&& test x"$enable_ada" = x"yes"])
312
313AM_CONDITIONAL([LIBDOSFS],[dnl
314test x"$ac_cv_type_uint8_t" = xyes \
315&& test x"$ac_cv_type_uint16_t" = xyes])
316
317AC_CONFIG_HEADER(config.h)
318
319## These are needed by the NFS Client
320AC_CHECK_PROG(RPCGEN,rpcgen,rpcgen)
321AM_CONDITIONAL([RPCTOOLS],[test "$RPCGEN" = rpcgen \
322&& test -n "$AWK" \
323&& test "$enable_rpcgen" = yes])
324
325RTEMS_AMPOLISH3
326
327# Explicitly list all Makefiles here
328AC_CONFIG_FILES([
329Doxyfile
330Makefile
331rtems/Makefile
332sapi/Makefile
333score/Makefile
334score/cpu/Makefile
335score/cpu/arm/Makefile
336score/cpu/bfin/Makefile
337score/cpu/avr/Makefile
338score/cpu/h8300/Makefile
339score/cpu/i386/Makefile
340score/cpu/lm32/Makefile
341score/cpu/m68k/Makefile
342score/cpu/m32c/Makefile
343score/cpu/m32r/Makefile
344score/cpu/mips/Makefile
345score/cpu/nios2/Makefile
346score/cpu/powerpc/Makefile
347score/cpu/sh/Makefile
348score/cpu/sparc/Makefile
349score/cpu/sparc64/Makefile
350score/cpu/v850/Makefile
351score/cpu/no_cpu/Makefile
352posix/Makefile
353libblock/Makefile
354libfs/Makefile
355libfs/src/nfsclient/Makefile
356libgnat/Makefile
357libcsupport/Makefile
358libnetworking/Makefile
359librpc/Makefile
360libmisc/Makefile
361libi2c/Makefile
362libmd/Makefile
363zlib/Makefile
364ftpd/Makefile
365telnetd/Makefile
366pppd/Makefile
367mghttpd/Makefile
368wrapup/Makefile])
369
370AC_CONFIG_COMMANDS([preinstall-stamp],
371[test -z "$with_multisubdir" && ${MAKE} preinstall-stamp],
372[MAKE=${MAKE}
373with_multisubdir="$with_multisubdir"])
374
375AC_OUTPUT
Note: See TracBrowser for help on using the repository browser.