WIP: pretend to handle C99 float in hex format specifiers ('a' & 'A') and long double...
[AROS.git] / configure.in
blob1454e72f4149fac51ccf86ce1da56dcc812c0e17
1 dnl Copyright © 1997-2016, The AROS Development Team. All rights reserved.
2 dnl $Id$
3 dnl
4 dnl Desc: Autoconf source for configuration file
5 dnl Lang: english 
7 # Note: After file changes, generate configure anew and commit _both_ files.
9 #TODO
10 # method of getting shared/non-shared ld/ar tool for target.
12 # ------------------------------------------------------------------------
13 # Here starts the first section of the configure.in file.
14 # ------------------------------------------------------------------------
16 AC_INIT(mmakefile)
17 AC_PREREQ(2.61)
18 AC_CONFIG_AUX_DIR(scripts/autoconf)
20 # Check what host we are running on.
21 # If a target is not suggested, we use this one.
22 # Note that what we call a target, Autoconf calls a host.
23 AC_CANONICAL_HOST
25 # Default versions for the gnu tools we build
26 default_gcc_version="4.6.4"
27 default_binutils_version="2.23.2"
29 # The AROS target is slightly different to the normal GNU style
30 # format. We don't have the middle part, and we reverse the order
31 # of the $(CPU) and $(OS) bits.
33 # Don't strip the version of the target yet, it might be
34 # useful on some systems.
36 AC_MSG_CHECKING([for AROS style target])
38 if test "$target" = "NONE" ; then
39     target=$host_os-$host_cpu
40 else
41     if test "$target" = "" ; then
42         target=$host_os-$host_cpu
43     fi
45 AC_MSG_RESULT($target)
47 if test "$host_os" = "mingw32" ; then
48     PWDCMD="pwd -W"
51 # Don't know where else to put this...
52 AC_MSG_CHECKING([building AROS in])
53 AROS_BUILDDIR=`${PWDCMD-pwd}`
54 AROS_BUILDDIR_UNIX=${PWD}
55 AC_MSG_RESULT($AROS_BUILDDIR)
57 AC_MSG_CHECKING([AROS source in])
58 srcpwd=`cd ${srcdir} ; ${PWDCMD-pwd}`
59 SRCDIR=${srcpwd}
60 AC_MSG_RESULT($SRCDIR)
62 # Parse the target field into something useful.
63 changequote(<<,>>)
64 target_os=`echo $target | sed 's/^\([^-].*\)-\(.*\)$/\1/'`
65 target_cpu=`echo $target | sed 's/^\([^-].*\)-\(.*\)$/\2/'`
66 changequote([,])
68 # Some debug output, to be removed again.
69 AC_MSG_CHECKING([for target system (debug output)])
70 AC_MSG_RESULT($target_os)
71 AC_MSG_CHECKING([for target cpu (debug output)])
72 AC_MSG_RESULT($target_cpu)
74 dnl --------------------------------------------------------------------
75 dnl Set the default Workbench resolution
76 dnl --------------------------------------------------------------------
77 aros_nominal_width=800
78 aros_nominal_height=600
79 aros_nominal_depth=4
81 dnl --------------------------------------------------------------------
82 dnl Host Configuration Section
83 dnl --------------------------------------------------------------------
84 dnl
85 dnl The idea here is to find out all the information we need about the
86 dnl host. This means things like tools for building directory structures,
87 dnl copying files around and the like.
89 default_c_compilers="gcc clang cc"
90 AC_ARG_WITH(c-compiler,AC_HELP_STRING([--with-c-compiler=VERSION],[Use specified c compiler for building AROS]),use_c_compiler="$withval",use_c_compiler="")
91 if test "$use_c_compiler" = ""; then
92     host_c_compilers="$default_c_compilers"
93 else
94     host_c_compilers="$use_c_compiler"
97 default_cxx_compilers="g++ clang++ c++"
98 AC_ARG_WITH(cxx-compiler,AC_HELP_STRING([--with-cxx-compiler=VERSION],[Use specified c++ compiler building AROS]),use_cxx_compiler="$withval",use_cxx_compiler="")
99 if test "$use_cxx_compiler" = ""; then
100         host_cxx_compilers="$default_cxx_compilers"
101 else
102     host_cxx_compilers="$use_cxx_compiler"
106 # The first step is to find the host binaries.
107 # Check for a compiler.
108 # Due to a bug in autoconf check for c++ compiler first.
109 # For mor info see, http://osdir.com/ml/bug-autoconf-gnu/2010-05/msg00001.html.
110 AC_PROG_CXX([${host_cxx_compilers}])
111 AC_PROG_CC([${host_c_compilers}])
112 aros_host_def_cc="$CC"
113 AC_PROG_CC_STDC
114 AC_PROG_CPP
116 # Check for a compatible awk
117 AC_CHECK_PROGS(AWK,[gawk nawk])
118 AROS_REQUIRED(gawk,$AWK)
119 AROS_PROG(MMAKE,mmake)
121 # Perform some default variable assignments. Note all of these will be
122 # Regenerated from the script, so there is no need to cache them.
124 aros_build_host=$host
125 aros_host_cpp="$CPP"
126 aros_host_cc="$CC"
127 aros_host_cxx="$CXX"
128 AROS_TOOL_CCPATH(aros_host_ld,ld)
129 AROS_REQUIRED(ld,$aros_host_ld)
130 aros_host_make="make"
131 aros_host_cflags="$CFLAGS"
132 aros_host_cxxflags="$CXXFLAGS"
133 aros_host_ldflags="$LDFLAGS"
134 aros_host_debug="-g -O0"
135 aros_host_mkdep="\$(SRCDIR)/scripts/mkdep"
136 aros_host_mkargs="--no-print-directory"
137 aros_host_exe_suffix="$EXEEXT"
138 aros_host_lib_suffix=""
140 # Ignore all compliance, AROS ROMs = 0
141 # KickStart v1.0 = 30
142 # KickStart v1.3 = 34
143 # KickStart v2.0 = 37
144 # KickStart v3.0 = 39
145 # KickStart v3.1 = 40
146 # AmigaOS   v3.5 = 44
147 aros_amigaos_compliance=0
149 AC_CHECK_PROGS(aros_host_aclocal,[aclocal aclocal19 aclocal-1.9])
150 AC_CHECK_PROGS(aros_host_autoconf,[autoconf autoconf259 autoconf253])
151 AC_CHECK_PROGS(aros_host_autoheader,[autoheader autoheader259 autoheader253])
152 AC_CHECK_PROGS(aros_host_automake,[automake automake19 automake-1.9])
154 AROS_REQUIRED(aclocal/aclocal19/aclocal-1.9, $aros_host_aclocal)
155 AROS_REQUIRED(automake/automake19/automake-1.9, $aros_host_automake)
157 case "$aros_host_cc" in
158     *clang*)
159         aros_host_cc_pipe=""
160         ;;
161     *gcc*)
162         aros_host_cc_pipe="-pipe"
163         ;;
164     icc)
165         aros_host_cc_pipe=""
166         ;;
167     *)
168         aros_host_cc_pipe=""
169         ;;
170 esac
172 aros_kernel_cc_includes=""
173 aros_target_cc_includes=""
174 host_cc_elf=yes
176 # ----------------------------------------------------------------------------------------
177 # Host-specific defaults
179 # This is the main host configuration section. It is where the host
180 # can change the values of any variables it needs to change. We do
181 # not look at anything that compiles to the target yet, we'll get
182 # to that later.
184 case "$host_os" in
185     aros*)
186         aros_host_arch="aros"
187         aros_host_cflags="$aros_host_cflags $aros_host_cc_pipe"
188         case "$host_cpu" in
189             *i?86*)
190                 aros_host_cpu="i386"
191                 ;;
192             *x86_64*)
193                 aros_host_cpu="x86_64"
194                 ;;
195             *powerpc*)
196                 aros_host_cpu="ppc"
197                 ;;
198             *)
199                 AC_MSG_WARN("Unknown CPU for host -- $host_cpu")
200                 aros_host_cpu="$host_cpu"
201                 ;;
202         esac
203         ;;
205     linux*)
206         aros_host_arch="linux"
207         aros_host_cflags="$aros_host_cflags $aros_host_cc_pipe"
208         android_build_os="linux-x86"
209         android_tool="android"
210         default_android_sdk="/opt/android-sdk-linux_x86"
211         case "$host_cpu" in
212             *i?86*)
213                 aros_host_cpu="i386"
214                 ;;
215             *x86_64*)
216                 aros_host_cpu="x86_64"
217                 ;;
218             *m68k*)
219                 aros_host_cpu="m68k"
220                 ;;
221             *powerpc*)
222                 aros_host_cpu="ppc"
223                 ;;
224             *arm*)
225                 aros_host_cpu="arm"
226                 ;;
227             *)
228                 AC_MSG_WARN("Unknown CPU for host -- $host_cpu")
229                 aros_host_cpu="$host_cpu"
230                 ;;
231         esac
232         ;;
234     freebsd*)
235         aros_host_cflags="$aros_host_cflags $aros_host_cc_pipe -I/usr/local/include"
236         aros_host_make="gmake"
237         aros_host_arch="freebsd"
238         aros_host_cpu="i386"
240         aros_host_ldflags="$aros_host_ldflags -L/usr/local/lib -liconv"
242         dnl FreeBSD 5.x (and later) has changed the default object format.
243         dnl The double [[]] is necessary to get around m4's quoting rules.
244         case $host_os in
245             freebsd[[234]]*)
246                 aros_object_format="elf_i386"
247                 ;;
249             *)
250                 aros_object_format="elf_i386_fbsd"
251                 ;;
252         esac
254         ;;
256     darwin*)
257         AC_CHECK_FILE(/usr/include/stddef.h,,
258                 AC_MSG_ERROR([XCode incorrectly configured!
259 please run 'xcode-select --install' before
260 re-running configure])
261         )
262         aros_host_cflags="$aros_host_cflags $aros_host_cc_pipe"
263         aros_host_arch="darwin"
264         host_cc_elf=no
265         if [[ -z ${SED+x} ]]; then SED="gsed"; fi
266         android_build_os="darwin-x86"
267         android_tool="android"
268         default_android_sdk="/android-sdk-mac_x86"
269         case "$host_cpu" in
270             *i?86*)
271                 aros_host_cpu="i386"
272                 ;;
273             *x86_64*)
274                 aros_host_cpu="x86_64"
275                 ;;
276             *powerpc*)
277                 aros_host_cpu="ppc"
278                 ;;
279             *)
280                 AC_MSG_WARN("Unknown CPU for Darwin host -- $host_cpu")
281                 aros_host_cpu="$host_cpu"
282                 ;;
283         esac
285         aros_host_ldflags="$aros_host_ldflags -liconv"
287         ;;
289     dragonfly*)
290         aros_host_cflags="$aros_host_cflags $aros_host_cc_pipe"
291         aros_host_make="gmake"
292         aros_host_arch="dragonfly"
293         case $host_cpu in
294             *i?86*)
295                 aros_host_cpu="i386"
296                 ;;
297             *amd64*)
298                 aros_host_cpu="x86_64"
299                 ;;
300             *)
301                 AC_MSG_WARN("Unknown CPU for host -- $host_cpu")
302                 aros_host_cpu="$host_cpu"
303                 ;;
304         esac
305         ;;
307     netbsd*)
308         aros_host_cflags="$aros_host_cflags $aros_host_cc_pipe"
309         aros_host_make="gmake"
310         aros_host_arch="netbsd"
311         case "$host_cpu" in
312             *i?86*)
313                 aros_host_cpu="i386"
314                 ;;
315             *m68k*)
316                 aros_host_cpu="m68k"
317                 ;;
318             *)
319                 AC_MSG_WARN("Unknown CPU for host -- $host_cpu")
320                 aros_host_cpu="$host_cpu"
321                 ;;
322         esac    
323         aros_host_lib_suffix=".0.0"
324         ;;
326     openbsd*)
327         aros_host_cflags="$aros_host_cflags $aros_host_cc_pipe"
328         aros_host_make="gmake"
329         aros_host_arch="openbsd"
330         case "$host_cpu" in
331             *i?86*)
332                 aros_host_cpu="i386"
333                 ;;
334             *)
335                 AC_MSG_WARN("Unknown CPU for host -- $host_cpu")
336                 aros_host_cpu="$host_cpu"
337                 ;;
338         esac
339         ;;
340         
341     solaris*)
342         aros_host_arch="solaris"
343         aros_host_cflags="$aros_host_cflags $aros_host_cc_pipe"
344         case "$host_cpu" in
345             *i?86*)
346                 aros_host_cpu="i386"
347                 ;;
348             *sparc*)
349                 aros_host_cpu="sparc"
350                 ;;
351             *)
352                 AC_MSG_WARN("Unknown CPU for host -- $host_cpu")
353                 aros_host_cpu="$host_cpu"
354                 ;;
355         esac
356         ;;
358     morphos*)
359         aros_host_arch="morphos"
360         aros_host_cpu="ppc"
361         host_cc_elf=no
362         ;;
364     amiga*)
365         aros_host_arch="amiga"
366         host_cc_elf=no
367         SORT="/gg/bin/sort"
368         TEST="/gg/bin/test"
369         UNIQ="/gg/bin/uniq"
370         FOR="for"
371         TOUCH="/gg/bin/touch"
372         case "$host_cpu" in
373             *m68k*)
374                 aros_host_cpu="m68k"
375                 ;;
376             *powerpc*)
377                 aros_host_cpu="ppc"
378                 ;;
379             *)
380                 AC_MSG_WARN("Unknown CPU for host -- $host_cpu")
381                 aros_host_cpu="$host_cpu"
382                 ;;
383         esac
384         ;;
386     cygwin*)
387         aros_host_arch="cygwin"
388         aros_host_cflags="$aros_host_cflags $aros_host_cc_pipe"
389         host_cc_elf=no
390         android_build_os="windows"
391         android_tool="android.bat"
392         default_android_sdk="/cygdrive/c/android-sdk-windows-1.6_r1"
394         case "$host_cpu" in
395             *i?86*)
396                 aros_host_cpu="i386"
397                 ;;
398             *)
399                 AC_MSG_WARN("Unknown CPU for host -- $host_cpu")
400                 aros_host_cpu="$host_cpu"
401                 ;;
402         esac
403         ;;
405     mingw32*)
406         aros_host_arch="mingw32"
407         aros_host_cflags="$aros_host_cflags $aros_host_cc_pipe"
408         host_cc_elf=no
409         android_build_os="windows"
410         android_tool="android.bat"
411         default_android_sdk="/c/android-sdk-windows-1.6_r1"
413         libpng_libextra="-lws2_32"
415         case "$host_cpu" in
416         *i?86*)
417             dnl Currently there's neither 64-bit MinGW nor MSYS. Both environments are 32-bit
418             dnl and run under emulation. Consequently, uname reports i386 even on 64-bit systems.
419             dnl Here we attempt to detect Windows home platform by asking gcc about its target.
420             dnl 64-bit gcc will output "x86_64-w64-mingw32" here.
422             AC_MSG_CHECKING([for Windows native gcc target])
423             host_cpu=`gcc -dumpmachine`
424             AC_MSG_RESULT($host_cpu)
425             ;;
427         esac
429         case "$host_cpu" in
430         *i?86*)
431             aros_host_cpu="i386"
432             ;;
434         mingw32*)
435             dnl Native i386 gcc for MinGW32 reports 'mingw32' with -dumpmachine switch
436             aros_host_cpu="i386"
437             ;;
439         *x86_64*)
440             aros_host_cpu="x86_64"
441             dnl Dragon's x86_64-w64-mingw32-gcc is a bit broken. It ignores standard $prefix/include
442             dnl directory, so we have to add it explicitly here.
443             aros_host_cflags="$aros_host_cflags -isystem /mingw/include"
444             ;;
446         *)
447             AC_MSG_WARN("Unknown CPU for host -- $host_cpu")
448             aros_host_cpu="$host_cpu"
449             ;;
450         esac
451         ;;
452     *)
453         AC_MSG_ERROR([Unsupported host architecture $host])
454         ;;
455 esac
457 AROS_PROG(aros_host_ar,[ar],[cr])
458 AROS_REQUIRED(ar,$aros_host_ar)
459 AROS_PROG(aros_host_ranlib,ranlib)
460 AROS_REQUIRED(ranlib,$aros_host_ranlib)
461 AROS_PROG(aros_host_strip,strip)
462 AROS_REQUIRED(strip,$aros_host_strip)
464 AROS_PROG(RM,[rm],[-rf])
465 AROS_REQUIRED(rm,$RM)
466 AROS_PROG(CP,[cp])
467 AROS_REQUIRED(cp,$CP)
468 AROS_PROG(MV,[mv])
469 AROS_REQUIRED(mv,$MV)
470 AROS_PROG(ECHO,[echo])
471 AROS_REQUIRED(echo,$ECHO)
472 AROS_PROG(MKDIR,[mkdir],[-p])
473 AROS_REQUIRED(mkdir,$MKDIR)
474 AROS_PROG(TOUCH,[touch])
475 AROS_REQUIRED(touch,$TOUCH)
476 AROS_PROG(SORT,[sort])
477 AROS_REQUIRED(sort,$SORT)
478 AROS_PROG(UNIQ,[uniq])
479 AROS_REQUIRED(uniq,$UNIQ)
480 AROS_PROG(NOP,[true])
481 AROS_REQUIRED(true,$NOP)
482 AROS_PROG(CAT,[cat])
483 AROS_REQUIRED(cat,$CAT)
484 AROS_PROG(BISON,[bison])
485 AROS_REQUIRED(bison,$BISON)
486 AROS_PROG(FLEX,[flex])
487 AROS_REQUIRED(flex,$FLEX)
488 AROS_PROG(PNGTOPNM,[pngtopnm])
489 AROS_REQUIRED(pngtopnm,$PNGTOPNM)
490 AROS_PROG(PPMTOILBM,[ppmtoilbm])
491 AROS_REQUIRED(ppmtoilbm,$PPMTOILBM)
492 AROS_PROG(SED,[sed])
493 AROS_REQUIRED(sed,$SED)
494 AROS_PROG(CHMOD,[chmod])
495 AROS_REQUIRED(chmod,$CHMOD)
496 AROS_PROG(PATCH,[patch])
497 AROS_REQUIRED(patch,$PATCH)
499 AM_PATH_PYTHON(2.5)
501 AC_ARG_ENABLE([libpng-config], [--disable-libpng-config    disable libpng-config test and configuration])
502 if test "$enable_libpng_config" != "no"; then
503   AC_CHECK_PROG([arosconfig_use_libpngconfig],[libpng-config],[yes],[no])
505 if test "$arosconfig_use_libpngconfig" = "yes"; then
506     AC_MSG_CHECKING([libpng-config library])
507     libpng_incdir="`libpng-config --cflags`"
508     libpng_libextra="$libpng_libextra `libpng-config --ldflags`"
509     libpng="`libpng-config --libs`"
510     AC_MSG_RESULT($libpng)
511 else
512     AC_CHECK_LIB(png, png_read_png, [libpng="-lpng"], [libpng="no"])
513     if test "$libpng_libextra" != ""; then
514         if test "$libpng" != "no"; then
515             libpng_libextra="$libpng_libextra $libpng"
516         fi
517     fi
519 AROS_REQUIRED(libpng, $libpng)
520 AC_SUBST(libpng)
521 AC_SUBST(libpng_libextra)
522 AC_SUBST(libpng_incdir)
524 AC_SUBST(FOR, for)
525 AC_SUBST(IF, if)
526 AC_SUBST(TEST, test)
527 AC_SUBST(CMP, cmp)
529 dnl ---------------------------------------------------------------------------
530 dnl Look for things about the host system, good for hosted targets.
531 dnl ---------------------------------------------------------------------------
533 # Check for some includes for the X11 HIDD and the kernel
534 AC_CHECK_HEADERS([sys/ipc.h sys/shm.h \
535     sys/mmap.h sys/mman.h sysexits.h \
536     sys/statfs.h sys/statvfs.h sys/vfs.h sys/param.h \
539 AC_CHECK_HEADERS([sys/mount.h],,,[#include <sys/param.h>])
541 AC_HEADER_DIRENT
542 AC_HEADER_STAT
543 AC_HEADER_STDC
544 AC_HEADER_SYS_WAIT
545 AC_HEADER_TIME
546 AC_STRUCT_ST_BLKSIZE
547 AC_STRUCT_ST_BLOCKS
548 AC_STRUCT_ST_RDEV
549 AC_STRUCT_TM
550 AC_STRUCT_TIMEZONE
551 AC_TYPE_OFF_T
552 AC_TYPE_PID_T
553 AC_TYPE_SIZE_T
554 AC_TYPE_UID_T
556 AC_CHECK_MEMBERS(struct tm.tm_gmtoff)
558 # Look for some functions
559 AC_CHECK_FUNCS([getpagesize kqueue statfs statvfs \
560     clone kse_create rfork_thread thr_create sa_register \
561     getcontext makecontext setcontext sigaltstack swapcontext])
563 AC_FUNC_MMAP
565 #-----------------------------------------------------------------------------
568 # GCC 4.1+ has a stack protection feature that requires OS support. Ubuntu has
569 # it switched on by default, and we use the host compiler, so it compiles AROS
570 # code with this enabled resulting in link failures as we don't have support
571 # for it.
573 # We use two methods to disable it. For the host compiler (used to compile
574 # some hosted modules), we test to see if the compiler supports stack
575 # protection, and if it does we disable it in AROS_CONFIG_CFLAGS. This should
576 # work on all platforms.
579 AC_MSG_CHECKING([whether ${CC} accepts -fno-stack-protector])
580 save_cflags="$CFLAGS"
581 CFLAGS="$CFLAGS -fno-stack-protector"
582 AC_TRY_COMPILE(,, use_no_stack_protector="yes", use_no_stack_protector="no")
583 AC_MSG_RESULT($use_no_stack_protector)
584 if test "x-$use_no_stack_protector" = "x-yes" ; then
585     aros_host_cflags="$aros_host_cflags -fno-stack-protector"
587 CFLAGS="$save_cflags"
589 #-----------------------------------------------------------------------------
591 # Disable pointer-signedness warnings if the compiler recognises the option
592 # (this only works for the host compiler at the moment)
594 AC_MSG_CHECKING([whether ${CC} accepts -Wno-pointer-sign])
595 save_cflags="$CFLAGS"
596 CFLAGS="$CFLAGS -Wno-pointer-sign"
597 AC_TRY_COMPILE(,, use_no_sign_warning="yes", use_no_sign_warning="no")
598 AC_MSG_RESULT($use_no_sign_warning)
599 if test "x-$use_no_sign_warning" = "x-yes" ; then
600     aros_host_cflags="$aros_host_cflags -Wno-pointer-sign"
602 CFLAGS="$save_cflags"
604 #-----------------------------------------------------------------------------
606 # Check if host compiler supports -fgnu89-inline, can be needed for crosstools.
608 AC_MSG_CHECKING([whether ${CC} accepts -fgnu89-inline])
609 save_cflags="$CFLAGS"
610 CFLAGS="$CFLAGS -fgnu89-inline"
611 AC_TRY_COMPILE(,, use_gnu89_inline="yes", use_gnu89_inline="no")
612 AC_MSG_RESULT($use_gnu89_inline)
613 if test "x-$use_gnu89_inline" = "x-yes" ; then
614     gnu89_inline="-fgnu89-inline"
616 CFLAGS="$save_cflags"
619 # For GCC < 4.0 -I- is used for giving the search path for '#include "..."'
620 # On GCC >= 4.0 -iquote should be used
622 AC_MSG_CHECKING([whether ${CC} accepts -iquote])
623 CFLAGS="$CFLAGS -iquote."
624 AC_TRY_COMPILE(,, has_iquote="yes", has_iquote="no")
625 AC_MSG_RESULT($has_iquote)
626 if test "x-$has_iquote" = "x-yes" ; then
627     host_cflags_iquote=-iquote
628     host_cflags_iquote_end=
629 else
630     host_cflags_iquote=-I
631     host_cflags_iquote_end=-I-
634 AC_MSG_NOTICE([Performing target configuration...])
636 dnl --------------------------------------------------------------------
637 dnl Target Configuration Section
638 dnl --------------------------------------------------------------------
640 dnl The target configuration section is responsible for setting up all
641 dnl the paths for includes, and tools required to build AROS to some
642 dnl particular target.
644 aros_nowarn_flags="NOWARN_UNUSED_COMMAND_LINE_ARGUMENT NOWARN_UNKNOWN_WARNING_OPTION NOWARN_POINTER_SIGN NOWARN_PARENTHESES"
646 toolchain_needs_sysroot=no
648 aros_warn_flags=
649 aros_isa_flags=
650 aros_config_cflags=
651 aros_config_cxxflags=
652 aros_config_aflags="-Wall -x assembler-with-cpp -c"
653 aros_config_ldflags=""
655 aros_shared_default=yes
657 aros_shared_cflags="-fPIC"
658 aros_shared_aflags=""
659 aros_shared_ldflags="-Wl,-rpath,./lib -shared"
660 aros_kernel_ldflags="-Wl,-rpath,./lib"
662 aros_kernel_ar_flags="cr"
663 aros_target_ar_flags="cr"
664 aros_target_nm_flags="-C -ul"
665 aros_target_strip_flags="--strip-unneeded -R.comment"
667 aros_compiler_libs=
668 aros_arch_libs=
670 aros_target_genmap="-Wl,-Map -Xlinker"
672 # Native flavour stuff
673 aros_serial_debug="0"
675 # Palm native flavour stuff
676 aros_palm_debug_hack="0"
678 # Unix flavour stuff
679 aros_nesting_supervisor="0"
681 # Collect-aros stuff: "-ius" to ignore undefined symbols
682 ignore_undefined_symbols=""
684 # Check for X11 by default
685 need_x11="auto"
687 host_x_gfx=no
688 host_sdl_gfx=no
689 host_android_gfx=no
692 AC_MSG_CHECKING([Which toolchain family to use ...])
693 AC_ARG_WITH(toolchain,AC_HELP_STRING([--with-toolchain=family],[Which toolchain family to crosscompile with (defaults to gnu)]),aros_toolchain="$withval",aros_toolchain="gnu")
694 AC_MSG_RESULT($aros_toolchain)
697 AC_MSG_CHECKING([if we should enable link time optimizations (LTO)])
698 AC_ARG_ENABLE(lto,AC_HELP_STRING([--enable-lto=[yes|no]],[Enable link time optimizations if the target compiler supports them (default=no)]),
699  aros_config_lto="$enableval",aros_config_lto="no")
700 if test "$aros_config_lto" != "no"; then
701     aros_config_lto="yes"
703 AC_MSG_RESULT($aros_config_lto)
705 use_ld_wrapper=yes
707 case "$aros_toolchain" in
708     *llvm*)
709         # toolchain_needs_sysroot=yes
710         toolchain_c_compiler="clang"
711         toolchain_cxx_compiler="clang++"
712         toolchain_cpp_preprocessor="clang -E"
713         toolchain_ld="ld.lld"
714         aros_ld="ld"
715         toolchain_as="llvm-as"
716         toolchain_ar="llvm-ar"
717         toolchain_ranlib="llvm-ranlib"
718         toolchain_nm="llvm-nm"
719         toolchain_strip="true"
720         toolchain_objcopy="llvm-objcopy"
721         toolchain_objdump="llvm-objdump"
722         ;;
723     *gnu*)
724         toolchain_c_compiler="gcc"
725         toolchain_cxx_compiler="g++"
726         toolchain_cpp_preprocessor="gcc -E"
727         toolchain_as="as"
728         aros_ld="ld"
729         if test "$aros_config_lto" != "yes"; then
730             toolchain_ld="ld"
731             toolchain_ar="ar"
732             toolchain_ranlib="ranlib"
733             toolchain_nm="nm"
734         else
735             toolchain_ld="ld.bfd"
736             toolchain_ar="gcc-ar"
737             toolchain_ranlib="gcc-ranlib"
738             toolchain_nm="gcc-nm"
739         fi
740         toolchain_strip="strip"
741         toolchain_objcopy="objcopy"
742         toolchain_objdump="objdump"
743         ;;
744     *)
745         AC_MSG_WARN("Unknown toolchain family!")
746         toolchain_c_compiler="cc"
747         toolchain_cxx_compiler="c++"
748         toolchain_cpp_preprocessor="cpp"
749         toolchain_ld="ld"
750         aros_ld="ld"
751         toolchain_as="as"
752         toolchain_ar="ar"
753         toolchain_ranlib="ranlib"
754         toolchain_nm="nm"
755         toolchain_strip="strip"
756         toolchain_objcopy="objcopy"
757         toolchain_objdump="objdump"
758         ;;
759 esac
761 #-----------------------------------------------------------------------------
763 AC_MSG_CHECKING([which type of build to do])
764 AC_ARG_ENABLE(build_type,AC_HELP_STRING([--enable-build-type=TYPE],[Select the build type. Available types are: personal, nightly, snapshot, milestone, release. Do NOT use this option unless you know what you are doing! (default=personal)]),build_type=$enableval,build_type="personal")
766 if test "$build_type" = "nightly"; then
767     build_type_string="NIGHTLY"
768 elif test "$build_type" = "snapshot"; then
769     build_type_string="SNAPSHOT"
770 elif test "$build_type" = "milestone"; then
771     build_type_string="MILESTONE"
772 elif test "$build_type" = "release"; then
773     build_type_string="RELEASE"
774 else
775     build_type_string="PERSONAL"
776     build_type="personal"
779 aros_config_cflags="$aros_config_cflags -DAROS_BUILD_TYPE=AROS_BUILD_TYPE_$build_type_string"
780 aros_config_cxxflags="$aros_config_cxxflags -DAROS_BUILD_TYPE=AROS_BUILD_TYPE_$build_type_string"
782 AC_MSG_RESULT($build_type)
784 #-----------------------------------------------------------------------------
785 all_debug_types="messages stack modules mungwall symbols"
787 AC_MSG_CHECKING([which debug types to enable])
788 AC_ARG_ENABLE(debug,AC_HELP_STRING([--enable-debug=list],[Enable different types of debug. Commas or whitespaces can be used to separate the items in the list. Available types of debug are: all, none, messages, stack, mungwall, modules, symbols. If no list is provided then "all" is assumed. (default=none)]),
789  debug="$enableval",debug="")
791 if test "$debug" = "" -o "$debug" = "no"; then
792     debug="none"
793 elif test "$debug" = "yes"; then
794     debug="all"
797 if test "$debug" = "all" ; then
798     debug="messages stack modules symbols"
799     for d in $all_debug_types; do
800         export aros_${d}_debug="1"
801     done
802 else
803     for d in $all_debug_types; do
804         export aros_${d}_debug="0"
805     done
808 if test "$debug" != "none"; then
809     debug=`echo $debug | sed s/,/\ /g`
810     for d in $debug; do
811         found="0"
812         for d2 in $all_debug_types; do
813             if test "$d2" = "$d"; then
814                 found="1"
815                 break
816             fi
817         done
818         if test "$found" = "0"; then
819             AC_MSG_ERROR([unrecognized debug type "$d". Available types are: all none $all_debug_types])
820         fi
821         export aros_${d}_debug="1"
822     done
823     aros_debug="yes"
825 AC_MSG_RESULT($debug)
827 if test "$aros_messages_debug" = "1"; then
828     aros_messages_debug="-DADEBUG=1 -DMDEBUG=1"
829 else
830     aros_messages_debug=""
832 if test "$aros_symbols_debug" = "1"; then
833     aros_symbols_debug="-g"
834 else
835     aros_symbols_debug=""
838 # These are the flags to pass when compiling debugged programs
839 aros_debug_cflags="$aros_symbols_debug $aros_messages_debug"
840 aros_debug_aflags=""
841 aros_debug_ldflags="$aros_symbols_debug"
843 #-----------------------------------------------------------------------------
844 #   Checking for distcc and ccache.
846 #   Always apply the transforms in this particular order. Basically you should
847 #   always run 'ccache distcc compiler' in that order for the best performance.
849 AC_MSG_CHECKING([whether to enable distcc])
850 AC_ARG_ENABLE(distcc,AC_HELP_STRING([--enable-distcc],[Use distcc as a front end to the compiler (default=no).]),distcc="$enableval",distcc="no")
851 if test "$distcc" != "" -a "$distcc" != "no"; then
852     # AC_CHECK_PROG will print out the result in this case
853     AC_PATH_PROG(DISTCC,[distcc],distcc,)
854 else
855     AC_MSG_RESULT(no)
858 AC_MSG_CHECKING([whether to enable ccache])
859 AC_ARG_ENABLE(ccache,AC_HELP_STRING([--enable-ccache],[Use ccache as a front end to the compiler (default=no).]),ccache="$enableval",ccache="no")
860 if test "$ccache" != "" -a "$ccache" != "no"; then
861     # AC_CHECK_PROG will print out the result in this case
862     AC_CHECK_PROG(CCACHE,[ccache],ccache,)
863 else
864     AC_MSG_RESULT(no)
867 #-----------------------------------------------------------------------------
868 AC_MSG_CHECKING([what specific host gcc version to use])
869 AC_ARG_WITH(kernel-gcc-version,AC_HELP_STRING([--with-kernel-gcc-version=VERSION],[Use gcc-VERSION for building bootstrap]),kernel_tool_version="$withval",kernel_tool_version="")
870 if test "$kernel_tool_version" != "" ; then
871     msg_result=$kernel_tool_version
872 else
873     msg_result="default"
875 AC_MSG_RESULT($msg_result)
877 #-----------------------------------------------------------------------------
878 AC_MSG_CHECKING([what optimization flags to use])
879 AC_ARG_WITH(optimization,AC_HELP_STRING([--with-optimization=FLAGS],[Use optimization flags FLAGS (default=-O2).]),optimization="$withval",optimization="unknown")
880 if test "$optimization" = "unknown"; then
881     dnl default is -O2 for normal builds, -O0 for debug builds
882     if test "$debug" != "none"; then
883         optimization="-O0"
884     else
885         optimization="-O2"
886     fi
888 aros_optimization_cflags="$optimization"
889 AC_MSG_RESULT($optimization)
891 paranoia_default=yes
892 #-----------------------------------------------------------------------------
893 AC_MSG_CHECKING([which paranoia flags to use])
894 AC_ARG_WITH(paranoia,AC_HELP_STRING([--with-paranoia=(yes|no|FLAGS)],[Specific compiler warning FLAGS to enable for paranoia builds (default=-Wall -Werror)]),[paranoia_flags="$withval"],[paranoia_flags="$paranoia_default"])
895 if test "$paranoia_flags" = "no"; then
896         paranoia_flags="-Wall -Werror-implicit-function-declaration"
897         msg_result="none"
898 else
899     if test "$paranoia_flags" = "yes"; then
900         paranoia_flags="-Wall -Werror"
901     fi
902     msg_result="$paranoia_flags"
904 AC_MSG_RESULT($msg_result)
905 aros_warn_flags="$aros_warn_flags $paranoia_flags"
907 #-----------------------------------------------------------------------------
908 AC_MSG_CHECKING([what target variant to enable])
909 AC_ARG_ENABLE(target_variant,AC_HELP_STRING([--enable-target-variant=NAME],[Enable a specific target variant (default=none)]),target_variant=$enableval,target_variant="")
910 if test "$target_variant" = ""; then
911     aros_target_variant=""
912     aros_target_suffix=""
913     enableval="none"
914 else
915     aros_target_variant="$target_variant"
916     aros_target_suffix="-$target_variant"
918 AC_MSG_RESULT($enableval)
920 #-----------------------------------------------------------------------------
921 # Target-specific defaults. You can override then on a per-target basis.
923 # Bootloader name. Currently used by PC target.
924 target_bootloader="none"
925 PLATFORM_EXECSMP=
926 ENABLE_EXECSMP=
928 #-----------------------------------------------------------------------------
929 # Additional options for some specific targets
931 case "$aros_target_variant" in
932 ios)
933     AC_MSG_CHECKING([XCode path])
934     AC_ARG_WITH(xcode,AC_HELP_STRING([--with-xcode=PATH],[Specify XCode path for iOS targets (default=/Developer).]),aros_xcode_path="$withval",aros_xcode_path="/Developer")
935     AC_MSG_RESULT($aros_xcode_path)
937     AC_MSG_CHECKING([what iOS SDK version to use])
938     AC_ARG_WITH(sdk-version,AC_HELP_STRING([--with-sdk-version=VERSION],[Use iOS SDK version VERSION (default=4.1).]),aros_sdk_version="$withval",aros_sdk_version="4.1")
939     AC_MSG_RESULT($aros_sdk_version)
941     ;;
943 "android")
944     AC_MSG_CHECKING([Android SDK path])
945     AC_ARG_WITH(sdk,AC_HELP_STRING([--with-sdk=PATH],[Specify Android SDK path (default=$default_android_sdk).]),aros_android_sdk="$withval",aros_android_sdk=$default_android_sdk)
946     AC_MSG_RESULT($aros_android_sdk)
948     AC_MSG_CHECKING([Android NDK path])
949     AC_ARG_WITH(ndk,AC_HELP_STRING([--with-ndk=PATH],[Specify Android NDK path (default=none).]),aros_android_ndk="$withval",aros_android_ndk="none")
950     AC_MSG_RESULT($aros_android_ndk)
952     AC_MSG_CHECKING([what Android SDK version to use])
953     AC_ARG_WITH(sdk-version,AC_HELP_STRING([--with-sdk-version=LEVEL],[Use Android SDK for API LEVEL (default=12).]),aros_sdk_version="$withval",aros_sdk_version="12")
954     AC_MSG_RESULT($aros_sdk_version)
956     aros_android_level=android-$aros_sdk_version
957     if test ! -d $aros_android_sdk/platforms/$aros_android_level; then
958         echo "Platform $aros_android_level is not installed in your SDK"
959         echo "Use --with-sdk-version=<API level number> to select another platform version"
960         echo "You can check what plaform versions are installed in your SDK"
961         echo "by examining contents of $aros_android_sdk/platforms directory"
962         AC_MSG_ERROR([Android platform $aros_android_level is not installed])
963     fi
965     export PATH="$aros_android_sdk/tools:$PATH"
966     AC_PATH_PROG(android_tool, $android_tool)
967     AROS_REQUIRED(android,$android_tool)
969     if test "$aros_android_ndk" != "none"; then
970         AC_MSG_CHECKING([what Android NDK version to use])
971         AC_ARG_WITH(ndk-version,AC_HELP_STRING([--with-ndk-version=LEVEL],[Use Android NDK for API LEVEL (default=9).]),aros_ndk_version="$withval",aros_ndk_version="9")
972         AC_MSG_RESULT($aros_ndk_version)
973     fi
975     AC_PATH_PROG(ant, ant)
976     if test "$ant" = ""; then
977         AC_MSG_WARN([Apache Ant is missing, Java bootstrap can't be built automatically])
978     fi
980     AC_MSG_CHECKING([Build debug or release apk])
981     AC_ARG_WITH(apk-version,AC_HELP_STRING([--with-apk-version=(release|debug)],[Which version of AROSBootstrap.apk to compile. Release version needs key for signing, debug version will only run in emulator. (default=release)]),aros_android_antapk=$withval,aros_android_antapk=release)
982     if test $aros_android_antapk != release -a $aros_android_antapk != debug; then
983         AC_MSG_ERROR([apk-version has to be release or debug])
984     fi
985     AC_MSG_RESULT($aros_android_antapk)
987     dnl MSYS bash can't run .bat files directly, then need to be started via cmd.exe
988     if test "$host_os" = "mingw32"; then
989         android_tool="cmd //c $android_tool"
990     fi
992     need_dlopen="no"
994     ;;
995 esac
997 #-----------------------------------------------------------------------------
998 # External toolchains
999 kernel_tool_prefix="none"
1000 aros_tool_prefix="none"
1001 elf_tool_prefix="${target_cpu}-elf-"
1003 # This is the target configuration switch.
1004 case "$target_os" in
1005     linux*)
1006         aros_target_arch="linux"
1007         aros_target_family="unix"
1008         case "$target_cpu" in
1009             *m68k*)
1010                 aros_target_cpu="m68k"
1011                 aros_object_format="m68kelf"
1012                 aros_flavour="emulcompat"
1013                 aros_target_mkdep="$aros_target_mkdep -D__GNUC__ -D__mc68000 -D__linux__"
1014                 aros_shared_ldflags="-Wl,-T,\$(TOP)/config/linux/m68k/script.so"
1015                 aros_kernel_ldflags="-Wl,-rpath,./lib,-T,\$(TOP)/config/linux/m68k/script.normal"
1016                 gcc_target_cpu="mc68000"
1017                 ;;
1018             *i?86*)
1019                 aros_target_cpu="i386"
1020                 aros_object_format="elf_i386"
1021                 aros_flavour="emulation"
1022                 aros_target_mkdep="$aros_target_mkdep -D__GNUC__ -Di386 -D__linux__"
1023                 aros_kernel_ldflags="-Wl,-melf_i386"
1024                 aros_nominal_depth=8
1025                 gcc_target_cpu="i386"
1026                 pci_hidd_target="hidd-pci-linux"
1027                 android_tool_dir_prefix="x86"
1028                 android_tool_prefix="i686-android-linux"
1029                 android_ndk_arch="x86"
1030                 ;;
1031             *x86_64*)
1032                 aros_target_cpu="x86_64"
1033                 aros_object_format="elf_x86_64"
1034                 aros_flavour="emulation"
1035                 aros_target_mkdep="$aros_target_mkdep -D__GNUC__ -Dx86_64 -D__linux__"
1036                 aros_isa_flags="$aros_isa_flags -mcmodel=large -mno-red-zone"
1037                 aros_config_cflags="$aros_config_cflags -fno-omit-frame-pointer"
1038                 aros_config_cxxflags="$aros_config_cxxflags -fno-omit-frame-pointer"
1039                 aros_nominal_depth=8
1040                 pci_hidd_target="hidd-pci-linux"
1041                 ;;
1042             *powerpc*)
1043                 aros_target_cpu="ppc"
1044                 aros_object_format="elf32ppc"
1045                 aros_flavour="emulation"
1046                 aros_target_mkdep="$aros_target_mkdep -D__GNUC__ -Dppc -D__linux__"
1047                 aros_nominal_depth=8
1048                 gcc_target_cpu="ppc"
1049                 ;;
1050 # TODO
1051 # Same as powerpc, but I need this for the nightly build to work again.
1052 # Actually, the nightly should be made working with powerpc target.
1053 # That just was too much work for the moment, another week or two.
1054             *ppc*)
1055                 aros_target_cpu="ppc"
1056                 aros_object_format="elf32ppc"
1057                 aros_flavour="emulation"
1058                 aros_target_mkdep="$aros_target_mkdep -D__GNUC__ -Dppc -D__linux__"
1059                 aros_nominal_depth=8
1060                 gcc_target_cpu="ppc"
1061                 ;;
1062             *aarch64*)
1063                 aros_target_cpu="aarch64"
1064                 target_cpu="aarch64"
1065                 aros_object_format="aarch64elf_aros"
1066                 aros_flavour="emulation"
1067                 aros_target_mkdep="$aros_target_mkdep -D__GNUC__ -Darm -D__linux__"
1068                 gcc_target_cpu="aarch64"
1069                 aros_config_cflags="$aros_config_cflags -fno-strict-aliasing -fno-omit-frame-pointer"
1070                 aros_config_cxxflags="$aros_config_cxxflags -fno-strict-aliasing -fno-omit-frame-pointer"
1071                 aros_config_aflags="$aros_config_aflags -fno-strict-aliasing"
1072                 aros_arch_libs="-laeabi"
1073                 gcc_default_float_abi="hard"
1074                 kernel_tool_prefix="aarch64-linux-gnueabihf-"
1075                 ;;
1076             *armhf*)
1077                 aros_target_cpu="arm"
1078                 target_cpu="arm"
1079                 aros_object_format="armelf_aros"
1080                 aros_flavour="emulation"
1081                 aros_target_mkdep="$aros_target_mkdep -D__GNUC__ -Darm -D__linux__"
1082                 gcc_target_cpu="arm"
1083                 aros_config_cflags="$aros_config_cflags -fno-strict-aliasing -fno-omit-frame-pointer"
1084                 aros_config_cxxflags="$aros_config_cxxflags -fno-strict-aliasing -fno-omit-frame-pointer"
1085                 aros_config_aflags="$aros_config_aflags -fno-strict-aliasing"
1086                 aros_arch_libs="-laeabi"
1087                 gcc_default_float_abi="hard"
1088                 android_tool_dir_prefix="arm-linux-androideabi"
1089                 android_tool_prefix="arm-linux-androideabi"
1090                 android_ndk_arch="arm"
1091                 kernel_tool_prefix="arm-linux-gnueabihf-"
1092                 ;;
1093             *arm*)
1094                 aros_target_cpu="arm"
1095                 aros_object_format="armelf_aros"
1096                 aros_flavour="emulation"
1097                 aros_target_mkdep="$aros_target_mkdep -D__GNUC__ -Darm -D__linux__"
1098                 gcc_target_cpu="arm"
1099                 aros_config_cflags="$aros_config_cflags -fno-strict-aliasing -fno-omit-frame-pointer"
1100                 aros_config_cxxflags="$aros_config_cxxflags -fno-strict-aliasing -fno-omit-frame-pointer"
1101                 aros_config_aflags="$aros_config_aflags -fno-strict-aliasing"
1102                 aros_arch_libs="-laeabi"
1103                 android_tool_dir_prefix="arm-linux-androideabi"
1104                 android_tool_prefix="arm-linux-androideabi"
1105                 android_ndk_arch="arm"
1106                 kernel_tool_prefix="arm-linux-gnueabi-"
1107                 ;;
1108             *)
1109                 AC_MSG_ERROR("Unknown CPU for Linux -- $target_cpu")
1110                 ;;
1111         esac
1112         case "$aros_target_variant" in
1113             android)
1115                 dnl Not all Linux CPUs are supported by Android
1116                 if test "$android_ndk_arch" = ""; then
1117                     AC_MSG_ERROR("Unsupported CPU for Android -- $target_cpu")
1118                 fi
1120                 aros_nominal_width=320
1121                 aros_nominal_height=480
1122                 if test "$aros_android_ndk" = "none"; then
1123                     dnl Use standalone toolchain, don't adjust paths
1124                     aros_kernel_cflags="-mandroid"
1125                     aros_kernel_ldflags="-mandroid"
1126                     CFLAGS="-mandroid"
1127                 else
1128                     dnl In Android NDK toolchains are placed in own directories,
1129                     dnl but tool names are not suffixed with version 
1130                     export PATH="$aros_android_ndk/toolchains/$android_tool_dir_prefix-$kernel_tool_version/prebuilt/$android_build_os/bin:$PATH"
1131                     kernel_tool_version=""
1132                     aros_android_ndk="$aros_android_ndk/platforms/android-$aros_ndk_version/arch-$android_ndk_arch"
1133                     aros_kernel_cflags="--sysroot $aros_android_ndk -mandroid"
1134                     aros_kernel_ldflags="--sysroot $aros_android_ndk -mandroid"
1135                     CFLAGS="$CFLAGS --sysroot $aros_android_ndk -mandroid"
1136                     aros_kernel_includes="-isystem $aros_android_ndk/usr/include"
1137                 fi
1138                 need_x11=no
1139                 host_android_gfx=yes
1140                 # Disable implicit PIC mode
1141                 aros_config_cflags="$aros_config_cflags -fno-pic"
1142                 kernel_tool_prefix="$android_tool_prefix-"
1143             ;;
1144         esac
1145     ;;
1147     pc)
1148         aros_target_arch="pc"
1149         aros_shared_default="no"
1150         target_bootloader="grub2"
1151         case "$target_cpu" in
1152             *i?86*)
1153                 aros_target_cpu="i386"
1155                 dnl If somebody hasn't already set the target object
1156                 dnl format, then use this value. Mostly to support
1157                 dnl FreeBSD cross-compilation.
1158                 dnl TODO: Remove when we always use our compiler.
1160                 if test "$aros_object_format" = "" ; then
1161                     aros_object_format="elf_i386"
1162                 fi
1163                 aros_flavour="standalone"
1164                 aros_target_mkdep="$aros_target_mkdep -D__GNUC__ -Di386"
1165                 aros_kernel_ldflags="-Wl,-melf_i386"
1166                 aros_nominal_width=640
1167                 aros_nominal_height=480
1168                 gcc_target_cpu="i386"
1169                 ;;
1170             *x86_64*)
1171                 PLATFORM_EXECSMP="#define __AROSPLATFORM_SMP__"
1172                 aros_target_cpu="x86_64"
1173                 aros_serial_debug=1
1174                 if test "$aros_object_format" = "" ; then
1175                     aros_object_format="elf_x86_64"
1176                 fi
1177                 aros_flavour="standalone"
1178                 aros_target_mkdep="$aros_target_mkdep -D__GNUC__ -Dx86_64"
1179                 aros_isa_flags="$aros_isa_flags -mcmodel=large  -mno-red-zone"
1180                 aros_config_cflags="$aros_config_cflags -fno-asynchronous-unwind-tables -fno-omit-frame-pointer"
1181                 aros_config_cxxflags="$aros_config_cxxflags -fno-asynchronous-unwind-tables -fno-omit-frame-pointer"
1182                 aros_kernel_ldflags=""
1183                 aros_nominal_width=640
1184                 aros_nominal_height=480
1185                 case "$aros_target_variant" in
1186                     smp)
1187                         ENABLE_EXECSMP="#define __AROSEXEC_SMP__"
1188                     ;;
1189                 esac
1190                 ;;
1191             *)
1192                 AC_MSG_ERROR("Unknown native CPU -- $target_cpu")
1193                 ;;
1194         esac
1195         ;;
1197     prep)
1198         aros_target_arch="prep"
1199         aros_shared_default="no"
1200         aros_target_cpu="ppc"
1201         aros_object_format="elf32ppc"
1202         aros_flavour="ppcnative"
1203         aros_target_mkdep="$aros_target_mkdep -D__GNUC__ -Dppc"
1204         aros_kernel_ldflags=""
1205         aros_nominal_width=640
1206         aros_nominal_height=480
1207         gcc_target_cpu="ppc"
1208         ;;
1210     freebsd*)
1211         aros_target_arch="freebsd"
1212         aros_target_family="unix"
1213         aros_target_cpu="i386"
1214         aros_flavour="emulation"
1215         aros_target_mkdep="$aros_target_mkdep -D__GNUC__ -Di386"
1216         gcc_target_cpu="i386"
1218         aros_target_strip_flags="-x"
1219         ;;
1221     darwin*)
1222         aros_target_arch="darwin"
1223         aros_target_family="unix"
1224         aros_flavour="emulation"
1225         case "$target_cpu" in
1226             *i?86*)
1227                 aros_ios_platform="iPhoneSimulator"
1228                 aros_target_cpu="i386"
1229                 aros_target_mkdep="$aros_target_mkdep -D__GNUC__ -Di386"
1230                 aros_kernel_ldflags=""
1231                 aros_macosx_version="10.4"
1232                 aros_nominal_depth=8
1233                 gcc_target_cpu="i386"
1234                 aros_object_format="elf_i386"
1235                 aros_kernel_ar_flags="-cr"
1236                 aros_target_strip_flags="-x"
1237                 kernel_tool_flags="-m32"
1238                 ;;
1239             *x86_64*)
1240                 aros_target_cpu="x86_64"
1241                 aros_object_format="elf_x86_64"
1242                 aros_target_mkdep="$aros_target_mkdep -D__GNUC__ -Dx86_64"
1243                 aros_macosx_version="10.6"
1244                 aros_isa_flags="$aros_isa_flags -mcmodel=large"
1245                 aros_config_cflags="$aros_config_cflags -fno-omit-frame-pointer"
1246                 aros_config_cxxflags="$aros_config_cxxflags -fno-omit-frame-pointer"
1247                 aros_kernel_cflags="-m64"
1248                 aros_kernel_ldflags="-m64"
1249                 aros_nominal_depth=8
1250                 aros_kernel_ar="ar"
1251                 aros_kernel_ar_flags="-cr"
1252                 aros_kernel_ld="ld"
1253                 aros_kernel_as="as"
1254                 aros_kernel_ranlib="ranlib"
1255                 aros_kernel_nm="nm"
1256                 aros_kernel_strip="strip"
1257                 kernel_tool_prefix="i686-apple-darwin10-"
1258                 ;;
1259             *ppc*)
1260                 aros_target_cpu="ppc"
1261                 aros_object_format="elf32ppc"
1262                 aros_target_mkdep="$aros_target_mkdep -D__GNUC__ -Dppc"
1263                 aros_kernel_ldflags=""
1264                 aros_macosx_version="10.0"
1265                 aros_nominal_depth=8
1266                 gcc_target_cpu="ppc"
1267                 aros_kernel_ar="ar"
1268                 aros_kernel_ar_flags="-cr"
1269                 aros_kernel_ld="ld -arch ppc"
1270                 aros_kernel_as="as -arch ppc"
1271                 aros_kernel_ranlib="ranlib -arch ppc"
1272                 aros_kernel_nm="nm -arch ppc"
1273                 aros_kernel_strip="strip -arch ppc"
1274                 kernel_tool_prefix="powerpc-apple-darwin10-"
1275                 ;;
1276             *arm*)
1277                 aros_ios_platform="iPhoneOS"
1278                 aros_target_cpu="arm"
1279                 aros_object_format="armelf_aros"
1280                 aros_target_mkdep="$aros_target_mkdep -D__GNUC__ -Darm"
1281                 aros_arch_libs="-laeabi"
1282                 aros_nominal_depth=8
1283                 gcc_target_cpu="arm"
1284                 aros_kernel_ar="ar"
1285                 aros_kernel_ar_flags="-cr"
1286                 aros_kernel_ld="ld -arch arm"
1287                 aros_kernel_ranlib="ranlib -arch arm"
1288                 kernel_tool_prefix="arm-apple-darwin10-" 
1289                 export PATH="$aros_xcode_path/Platforms/$aros_ios_platform.platform/Developer/usr/bin:$PATH"
1290                 ;;
1291             *)
1292                 AC_MSG_ERROR("Unsupported target CPU for darwin hosted flavour -- $target_cpu")
1293                 ;;
1294         esac
1295         case "$aros_target_variant" in
1296             ios)
1297                 aros_ios_version="3.0"
1298                 aros_nominal_width=320
1299                 aros_nominal_height=480
1300                 aros_ios_sdk="$aros_xcode_path/Platforms/$aros_ios_platform.platform/Developer/SDKs/$aros_ios_platform$aros_sdk_version.sdk"
1301                 kernel_tool_flags="$target_tool_flags -isysroot $aros_ios_sdk"
1302                 aros_kernel_includes="-isystem $aros_ios_sdk/usr/include"
1303                 need_x11=no
1304                 # This is here because it may depend on iOS or SDK version
1305                 aros_kernel_cflags="$aros_kernel_cflags -miphoneos-version-min=$aros_ios_version"
1306                 aros_kernel_ldflags="$aros_kernel_ldflags -miphoneos-version-min=$aros_ios_version"
1307                 aros_kernel_objcflags="-fobjc-abi-version=2 -fobjc-legacy-dispatch"
1308             ;;
1309             *)
1310                 aros_kernel_cflags="$aros_kernel_cflags -mmacosx-version-min=$aros_macosx_version"
1311                 aros_kernel_ldflags="$aros_kernel_ldflags -mmacosx-version-min=$aros_macosx_version"
1312             ;;
1313         esac
1314         ;;
1316     dragonfly*)
1317         aros_target_arch="dragonfly"
1318         aros_target_family="unix"
1319         aros_flavour="emulation"
1320         case "$target_cpu" in
1321             *i?86*)
1322                 aros_target_cpu="i386"
1323                 aros_object_format="elf_i386"
1324                 aros_target_mkdep="$aros_target_mkdep -D__GNUC__ -Di386 -D__DragonFly__"
1325                 ;;
1326             *x86_64*)
1327                 aros_config_cflags="$aros_config_cflags -fno-omit-frame-pointer"
1328                 aros_config_cxxflags="$aros_config_cxxflags -fno-omit-frame-pointer"
1329                 aros_target_cpu="x86_64"
1330                 aros_object_format="elf_x86_64"
1331                 aros_target_mkdep="$aros_target_mkdep -D__GNUC__ -Dx86_64 -D__DragonFly__"
1332                 ;;
1333             *)
1334                 AC_MSG_ERROR("Unknown CPU for DragonFly -- $target_cpu")
1335                 ;;
1336         esac
1337         ;;
1339     netbsd*)
1340         aros_target_arch="netbsd"
1341         aros_target_family="unix"
1342         case "$target_cpu" in
1343             *m68k*)
1344                 aros_target_cpu="m68k"
1345                 aros_object_format="m68kelf"
1346                 aros_flavour="emulcompat"
1347                 aros_target_mkdep="$aros_target_mkdep -D__GNUC__ -D__mc68000 -D__NetBSD__"
1348                 gcc_target_cpu="mc68000"
1349                 ;;
1350             *i?86*)
1351                 aros_target_cpu="i386"
1352                 aros_object_format="elf_i386"
1353                 aros_flavour="emulation"
1354                 aros_target_mkdep="$aros_target_mkdep -D__GNUC__ -Di386 -D__NetBSD__"
1355                 aros_nominal_depth=8
1356                 gcc_target_cpu="i386"
1357                 ;;
1358             *)
1359                 AC_MSG_ERROR("Unknown CPU for NetBSD -- $target_cpu")
1360                 ;;
1361         esac
1362         aros_target_genmap="-Wl,-M -Xlinker >"
1363         aros_flavour="emulation"
1364         aros_target_mkdep="$aros_target_mkdep -D__GNUC__ -Di386"
1365         ;;   
1367     openbsd*)
1368         aros_target_arch="openbsd"
1369         aros_target_family="unix"
1370         case "$target_cpu" in
1371             *i?86*)
1372                 aros_target_cpu="i386"
1373                 aros_object_format="elf_i386"
1374                 aros_flavour="emulation"
1375                 aros_target_mkdep="$aros_target_mkdep -D__GNUC__ -Di386 -D__OpenBSD__"
1376                 gcc_target_cpu="i386"
1377                 ;;
1378             *)
1379                 AC_MSG_ERROR("Unknown CPU for OpenBSD -- $target_cpu")
1380                 ;;
1381         esac
1382         aros_target_genmap="-Wl,-M -Xlinker >"
1383         aros_target_nm_flags="-u"
1384         aros_flavour="emulation"
1385         ;;
1387     solaris*)
1388         aros_target_arch="solaris"
1389         aros_target_family="unix"
1390         case "$target_cpu" in
1391            *i?86*)
1392                aros_target_cpu="i386"
1393                aros_object_format="elf_i386"
1394                aros_flavour="emulation"
1395                aros_target_mkdep="$aros_target_mkdep -D__GNUC__ -Di386 -D__Solaris__"
1396                aros_nominal_depth=8
1397                gcc_target_cpu="i386"
1398                ;;
1399             *sparc*)
1400                 aros_target_cpu="sparc"
1401                 aros_object_format="elf_sparc"
1402                 aros_target_mkdep="$aros_target_mkdep -D__GNUC__ -Dsparc -D__Solaris__"
1403                 gcc_target_cpu="sparc"
1404                 ;;
1405             *)
1406                 AC_MSG_ERROR("Unknown CPU for Solaris -- $target_cpu")
1407                 ;;
1408         esac
1409         aros_config_cflags="$aros_config_cflags -D$aros_target_cpu"
1410         aros_config_cxxflags="$aros_config_cxxflags -D$aros_target_cpu"
1411         aros_flavour="emulation"
1412         ;;
1414     morphos*)
1415         aros_target_arch="morphos"
1416         aros_shared_default="no"
1417         aros_target_cpu="ppc"
1418         aros_object_format="elf_ppc"
1419         aros_flavour="nativecompat"
1420         aros_target_mkdep="$aros_target_mkdep -D__GNUC__ -Dppc"
1421         gcc_target_cpu="ppc"
1422         ;;
1424     sam440)
1425         aros_target_arch="sam440"
1426         aros_shared_default="no"
1427         aros_target_cpu="ppc"
1428         aros_object_format="elf32ppc"
1429         aros_flavour="ppcnative"
1430         aros_target_mkdep="$aros_target_mkdep -D__GNUC__ -Dppc"
1431         aros_kernel_ldflags=""
1432         aros_nominal_width=1024
1433         aros_nominal_height=768
1434         aros_nominal_depth=24
1435         aros_isa_flags="$aros_isa_flags -mcpu=440fp -mno-toc"
1436         aros_config_cflags="$aros_config_cflags -fno-asynchronous-unwind-tables"
1437         aros_config_cxxflags="$aros_config_cxxflags -fno-asynchronous-unwind-tables"
1438         gcc_target_cpu="powerpc"
1439         ;;
1441     efika)
1442         aros_target_arch="efika"
1443         aros_shared_default="no"
1444         aros_target_cpu="arm"
1445         aros_object_format="armelf_aros"
1446         aros_flavour="standalone"
1447         aros_target_mkdep="$aros_target_mkdep -D__GNUC__ -Darm"
1448         aros_kernel_ldflags=""
1449         aros_nominal_width=1024
1450         aros_nominal_height=600
1451         aros_arch_libs="-laeabi"
1452         gcc_default_cpu="armv7-a"
1453         gcc_default_fpu="vfpv3"
1454         aros_isa_flags="$aros_isa_flags -mtune=cortex-a8"
1455         aros_config_cflags="$aros_config_cflags -fno-strict-aliasing -fno-asynchronous-unwind-tables"
1456         aros_config_cxxflags="$aros_config_cxxflags -fno-strict-aliasing -fno-asynchronous-unwind-tables"
1457         aros_config_aflags="$aros_config_aflags -fno-strict-aliasing -fno-asynchronous-unwind-tables"
1458         aros_optimization_cflags="$aros_optimization_cflags -Os"
1459         case "$target_cpu" in
1460             *armhf*)
1461                 gcc_default_float_abi="hard"
1462                 target_cpu=arm
1463                 aros_target_cpu=arm
1464                 ;;
1465             *arm*)
1466                 gcc_default_float_abi="softfp"
1467                 ;;
1468             *)
1469                 AC_MSG_ERROR("Unknown CPU for EfikaMX $target_cpu")
1470                 ;;
1471         esac
1472         ;;
1473         
1474     chrp)
1475         aros_target_arch="chrp"
1476         aros_shared_default="no"
1477         aros_target_cpu="ppc"
1478         aros_object_format="elf32ppc"
1479         aros_flavour="ppcnative"
1480         aros_target_mkdep="$aros_target_mkdep -D__GNUC__ -Dppc"
1481         aros_kernel_ldflags=""
1482         aros_nominal_width=640
1483         aros_nominal_height=480
1484         aros_isa_flags="$aros_isa_flags -mno-toc"
1485         aros_config_cflags="$aros_config_cflags -fno-asynchronous-unwind-tables"
1486         aros_config_cxxflags="$aros_config_cxxflags -fno-asynchronous-unwind-tables"
1487         gcc_target_cpu="powerpc"
1488         case "$aros_target_variant" in
1489             efika)
1490                 aros_isa_flags="$aros_isa_flags -mcpu=603e"
1491                 aros_config_cflags="$aros_config_cflags -DBIG_ENDIAN_OHCI=1"
1492                 aros_config_cxxflags="$aros_config_cxxflags -DBIG_ENDIAN_OHCI=1"
1493             ;;
1494         esac
1495         ;;
1497     r*pi)
1498         PLATFORM_EXECSMP="#define __AROSPLATFORM_SMP__"
1499         aros_flavour="standalone"
1500         aros_target_arch="raspi"
1502         aros_shared_default="no"
1504         aros_target_mkdep="$aros_target_mkdep -D__GNUC__"
1505         
1506         case "$target_cpu" in
1507             *aarch64*)
1508                 aros_target_cpu="aarch64"
1509                 gcc_default_cpu="aarch64"
1510                 aros_object_format="aarch64elf_aros"
1511                 ;;
1512             *armhf*)
1513                 aros_target_cpu="arm"
1514                 gcc_default_cpu="armv6zk"
1515                 gcc_default_cpu_tune="arm1176jzf-s"
1516                 aros_object_format="armelf_aros"
1517                 aros_isa_flags="$aros_isa_flags -marm"
1518                 aros_config_cflags="$aros_config_cflags"
1519                 aros_config_cxxflags="$aros_config_cxxflags"
1520                 aros_config_aflags="$aros_config_aflags -marm"
1521                 aros_kernel_cflags="$aros_kernel_cflags -marm"
1522                 aros_target_mkdep="$aros_target_mkdep -Darm"
1523                 aros_arch_libs="-laeabi"
1524                 ;;
1525             *arm*)
1526                 aros_target_cpu="arm"
1527                 gcc_default_cpu="armv6zk"
1528                 gcc_default_cpu_tune="arm1176jzf-s"
1529                 aros_object_format="armelf_aros"
1530                 aros_isa_flags="$aros_isa_flags -marm"
1531                 aros_config_cflags="$aros_config_cflags"
1532                 aros_config_cxxflags="$aros_config_cxxflags"
1533                 aros_config_aflags="$aros_config_aflags -marm"
1534                 aros_kernel_cflags="$aros_kernel_cflags -marm"
1535                 aros_target_mkdep="$aros_target_mkdep -Darm"
1536                 aros_arch_libs="-laeabi"
1537                 ;;
1538             *)
1539                 AC_MSG_ERROR("Unknown CPU for RasPi $target_cpu")
1540                 ;;
1541         esac
1543         aros_config_cflags="$aros_config_cflags -fno-asynchronous-unwind-tables -fno-exceptions"
1544         aros_config_cxxflags="$aros_config_cxxflags -fno-asynchronous-unwind-tables -fno-exceptions"
1545         aros_config_aflags="$aros_config_aflags -fno-asynchronous-unwind-tables -fno-exceptions"
1546         aros_kernel_cflags="$aros_kernel_cflags -fno-asynchronous-unwind-tables -fno-exceptions"
1548         case "$aros_target_variant" in
1549             smp)
1550                 ENABLE_EXECSMP="#define __AROSEXEC_SMP__"
1551             ;;
1552         esac
1553         ;;
1555     stm32f7_discovery)
1556         aros_flavour="standalone"
1557         aros_target_arch="stm32f7_discovery"
1558         aros_target_cpu="arm"
1559         aros_target_cpu_mode="thumb2"
1560         aros_object_format="armelf_aros"
1561         aros_shared_default="no"
1563         gcc_default_cpu="armv7e-m"
1564         gcc_default_cpu_tune="cortex-m7"
1565         gcc_default_fpu="fpv5-sp-d16"
1566         gcc_default_float_abi="hard"
1568         aros_target_mkdep="$aros_target_mkdep -D__GNUC__ -Dthumb"
1569         ;;
1571     amiga*)
1572         aros_target_arch="amiga"
1573         aros_target_mkdep="$aros_target_mkdep -D__GNUC__ -D_AMIGA -DAMIGA"
1574         aros_shared_default="no"
1576         case "$target_cpu" in
1577             *m68k*)
1578                 AC_ARG_ENABLE(amigaos_compliance,AC_HELP_STRING([--enable-amigaos-compliance=VERSION],[Enforce userspace AmigaOS compliance to a specific KickStart version (default=none).]),aros_amigaos_compliance="$enableval")
1579                 aros_enable_mmu=no
1580                 aros_target_cpu="m68k"
1581                 aros_object_format="m68kelf"
1582                 aros_flavour="standcompat"
1583                 gcc_target_cpu="m68000"
1584                 aros_nowarn_flags="$aros_nowarn_flags NOWARN_VOLATILE_REGISTER_VAR"
1585                 aros_config_cflags="$aros_config_cflags -fno-strict-aliasing -ffreestanding -fomit-frame-pointer -fbuiltin -DNOLIBINLINE"
1586                 aros_config_cxxflags="$aros_config_cxxflags -fno-strict-aliasing -ffreestanding -fomit-frame-pointer -fbuiltin -DNOLIBINLINE"
1587                 aros_optimization_cflags="$aros_optimization_cflags -Os"
1588                 aros_config_aflags="$aros_config_aflags"
1589                 aros_target_strip_flags="-R.comment --strip-debug"
1590                 aros_nominal_width=640
1591                 aros_nominal_height=256
1592                 aros_nominal_depth=2
1593                 ;;
1594             *ppc*)
1595                 aros_cpu="ppc"
1596                 aros_flavour="native"
1597                 gcc_target_cpu="ppc"
1598                 ;;
1599             *)
1600                 AC_MSG_ERROR("Unknown CPU for Amiga $target_cpu")
1601                 ;;
1602         esac
1603         ;;
1605     mingw*)
1606         aros_target_arch="mingw32"
1607         aros_shared_default="no"
1608         aros_flavour="emulation"
1609         aros_shared_cflags=""
1610         need_crosstools="yes"
1611         need_dlopen="no"
1612         rescomp="windres"
1613         case "$target_cpu" in
1614             *i?86*)
1615                 aros_target_cpu="i386"
1616                 aros_object_format="elf_i386"
1617                 aros_target_mkdep="$aros_target_mkdep -D__GNUC__ -Di386"
1618                 aros_nominal_depth=8
1619                 gcc_target_cpu="i386"
1621                 kernel_tool_prefix="i386-mingw32-"
1622                 ;;
1623             *x86_64*)
1624                 aros_target_cpu="x86_64"
1625                 aros_object_format="elf_x86_64"
1626                 aros_target_mkdep="$aros_target_mkdep -D__GNUC__ -Dx86_64"
1627                 aros_config_cflags="$aros_config_cflags -fno-omit-frame-pointer"
1628                 aros_config_cxxflags="$aros_config_cxxflags -fno-omit-frame-pointer"
1629                 aros_nominal_depth=8
1630                 kernel_tool_prefix="x86_64-w64-mingw32-"
1631                 ;;
1632             *arm*)
1633                 aros_target_cpu="arm"
1634                 aros_object_format="armelf_aros"
1635                 aros_target_mkdep="$aros_target_mkdep -D__GNUC__ -Darm"
1636                 aros_arch_libs="-laeabi"
1637                 aros_nominal_depth=8
1638                 gcc_target_cpu="arm"
1639                 gcc_default_float_abi="soft"
1640                 kernel_tool_prefix="arm-mingw32ce-"
1641                 aros_nominal_width=160
1642                 aros_nominal_height=160
1643                 ;;
1644             *)
1645                 AC_MSG_ERROR("Unknown CPU for Mingw32 -- $target_cpu")
1646                 ;;
1647         esac
1648         if test $host_os = "cygwin"; then
1649                 aros_kernel_cflags="-mno-cygwin"
1650         fi
1651     ;;
1652     pp*)
1653         aros_target_arch="pp"
1654         aros_shared_default="no"
1655         case "$target_cpu" in
1656             *m68k*)
1657                 aros_target_cpu="m68k"
1658                 aros_object_format="m68kelf"
1659                 aros_flavour="palmnative"
1660                 aros_target_mkdep="$aros_target_mkdep -D__GNUC__ -Dm68k"
1661                 aros_nominal_width=160
1662                 aros_nominal_height=160
1663                 aros_nominal_depth=1
1664                 aros_target_ar_flags="cru"
1665                 aros_compiler_libs="-lgcc1"
1666                 aros_shared_default=no
1667                 aros_shared_cflags="-fpic"
1668                 aros_shared_aflags=""
1669                 aros_shared_ldflags="-Wl,-rpath,./lib -shared"
1670                 aros_kernel_ldflags="-Wl,-rpath,./lib"
1671                 aros_debug_cflags="$aros_symbols_debug  $aros_messages_debug"
1672                 aros_debug_aflags=""
1673                 aros_debug_ldflags="$aros_symbols_debug"
1674                 aros_mungwall_debug="0"
1675                 aros_modules_debug="0"
1676                 gcc_target_cpu="mc68000"
1677                 ignore_undefined_symbols="-ius"
1678                 ;;
1679            *)
1680                 AC_MSG_ERROR("Unknown CPU for PalmPilot -- $target_cpu")
1681                 ;;
1682         esac
1683         ;;
1685     mac*)
1686         aros_target_arch="mac"
1687         aros_shared_default="no"
1688         case "$target_cpu" in
1689             *m68k*)
1690                 aros_target_cpu="m68k"
1691                 aros_object_format="m68kelf"
1692                 aros_flavour="mac68knative"
1693                 aros_target_mkdep="$aros_target_mkdep -D__GNUC__ -Dm68k"
1694                 aros_nominal_width=512
1695                 aros_nominal_height=384
1696                 aros_nominal_depth=8
1697                 aros_target_ar_flags="cru"
1698                 aros_compiler_libs="-lgcc1"
1699                 aros_shared_default=no
1700                 aros_shared_cflags="-fpic"
1701                 aros_shared_aflags=""
1702                 aros_shared_ldflags="-Wl,-rpath,./lib -shared"
1703                 aros_kernel_ldflags="-Wl,-rpath,./lib"
1704                 aros_debug_cflags="$aros_symbols_debug $aros_messages_debug"
1705                 aros_debug_aflags=""
1706                 aros_debug_ldflags="$aros_symbols_debug"
1707                 aros_mungwall_debug="0"
1708                 aros_modules_debug="0"
1709                 gcc_target_cpu="mc68000"
1710                 ignore_undefined_symbols="-ius"
1711                 ;;
1712            *)
1713                 AC_MSG_ERROR("Unknown CPU for Mac68k -- $target_cpu")
1714                 ;;
1715         esac
1716         ;;
1718     *)
1719         AC_MSG_ERROR([Unsupported target architecture $target])
1720         ;;
1721 esac
1723 #-----------------------------------------------------------------------------
1724 crosstools_guess="yes"
1725 aros_target_toolchain="no"
1726 aros_config_sysroot=""
1727 aros_kernel_sysroot=""
1729 AC_MSG_CHECKING([Kernel toolchain prefix])
1730 AC_ARG_WITH(kernel-toolchain-prefix,AC_HELP_STRING([--with-kernel-toolchain-prefix=...],[Specify crosscompile toolchain prefix for kernel objects]),[kernel_tool_prefix="$withval"])
1731 AC_MSG_RESULT($kernel_tool_prefix)
1733 AC_MSG_CHECKING([ELF toolchain prefix])
1734 AC_ARG_WITH(elf-toolchain-prefix,AC_HELP_STRING([--with-elf-toolchain-prefix=...],[Specify crosscompile toolchain prefix to wrap for AROS objects]),[elf_tool_prefix="$withval"
1735                                                  crosstools_guess="no"])
1736 AC_MSG_RESULT($elf_tool_prefix)
1738 AC_MSG_CHECKING([AROS toolchain prefix])
1739 AC_ARG_WITH(aros-toolchain,AC_HELP_STRING([--with-aros-toolchain=PREFIX],[Specify prebuilt AROS toolchain. Use yes for default name]),[aros_tool_prefix="$withval"
1740                 crosstools_guess="no"])
1741 if test "$aros_tool_prefix" = "yes" ; then
1742     aros_tool_prefix=$aros_target_cpu-aros-
1744 AC_MSG_RESULT($aros_tool_prefix)
1746 #-----------------------------------------------------------------------------
1747 #   Checking if we should build crosstools..
1748 AC_MSG_CHECKING([whether to build crosstools])
1749 AC_ARG_ENABLE(crosstools,AC_HELP_STRING([--disable-crosstools],[Do not build cross-compiler toolchain]),crosstools="$enableval",crosstools="$crosstools_guess")
1750 AC_MSG_RESULT($crosstools)
1752 if test "${crosstools}" = "yes"; then
1753     if test "${crosstools_guess}" = "no"; then
1754         AC_MSG_ERROR([Cannot build external toolchain if an external ELF or AROS toolchain is specified])
1755     fi
1758 if test "${crosstools}" = "yes" || test "${crosstools_guess}" = "no"; then
1759     aros_target_toolchain="yes"
1762 AC_MSG_CHECKING([where to install the crosstools binaries])
1763 AC_ARG_WITH(aros-toolchain-install,AC_HELP_STRING([--with-aros-toolchain-install=DIR],[Where to install or search for cross tools binaries]),[aros_toolchain_install=$withval])
1764 if test "x$aros_toolchain_install" = "x"; then
1765     AROS_CROSSTOOLSDIR="$AROS_BUILDDIR_UNIX/bin/$aros_host_arch-$aros_host_cpu/tools/crosstools"
1766 else
1767     AROS_CROSSTOOLSDIR="$aros_toolchain_install"
1768     PATH="$AROS_CROSSTOOLSDIR:$PATH"
1769     if test "$crosstools_guess" = "no" ; then
1770         toolchain_needs_sysroot=yes
1772         if test "x-$aros_flavour" != "x-emulation" -a "x-$aros_flavour" != "x-emulcompat" ; then
1773             aros_kernel_sysroot = $aros_config_sysroot
1774         fi
1775     fi
1777 AC_MSG_RESULT($AROS_CROSSTOOLSDIR)
1779 AC_MSG_CHECKING([If we need to use --sysroot])
1780 if test "$toolchain_needs_sysroot" = "yes" ; then
1781     aros_config_sysroot="--sysroot $AROS_BUILDDIR_UNIX/bin/${aros_target_arch}-${aros_target_cpu}${aros_target_suffix}/AROS/Developer"
1783 AC_MSG_RESULT($toolchain_needs_sysroot)
1785 #-----------------------------------------------------------------------------
1786 if test "$aros_toolchain" = "gnu" ; then
1787     AC_MSG_CHECKING([what specific target binutils version to use])
1789 AC_ARG_WITH(binutils-version,AC_HELP_STRING([--with-binutils-version=VERSION],[Use binutils-VERSION for building AROS]),use_binutils_version="$withval",use_binutils_version="")
1790 if test "$use_binutils_version" = ""; then
1791         target_binutils_version="$default_binutils_version"
1792 else
1793     target_binutils_version="$use_binutils_version"
1795 if test "$aros_toolchain" = "gnu" ; then
1796     AC_MSG_RESULT($target_binutils_version)
1800 # Helper to identify gcc version
1801 AC_DEFUN([CROSS_GCC_VERSION], [
1802   target_gcc_version=""
1803   AC_CACHE_CHECK([gcc version],[ax_cv_gcc_version],[
1804     ax_cv_gcc_version="`$AROS_CROSSTOOLSDIR/${aros_tool_prefix}${toolchain_cpp_preprocessor} -dumpversion`"
1805     AS_IF([test "x$ax_cv_gcc_version" = "x"],[
1806       ax_cv_gcc_version=""
1807     ])
1808   ])
1809   target_gcc_version=$ax_cv_gcc_version
1810   AC_SUBST([target_gcc_version])
1813 #-----------------------------------------------------------------------------
1814 if test "$aros_toolchain" = "gnu" ; then
1815     AC_MSG_CHECKING([what specific target gcc version to use])
1817 AC_ARG_WITH(gcc-version,AC_HELP_STRING([--with-gcc-version=VERSION],[Compile gcc-VERSION for AROS]),use_gcc_version="$withval",use_gcc_version="")
1818 if test "$use_gcc_version" = ""; then
1819     if test "${crosstools}" = "no"; then
1820       if test "x$aros_toolchain_install" != "x"; then
1821           CROSS_GCC_VERSION
1822       fi
1823     fi
1824     if test "$use_gcc_version" = ""; then
1825         target_gcc_version="$default_gcc_version"
1826     fi
1827 else
1828     target_gcc_version="$use_gcc_version"
1830 if test "$aros_toolchain" = "gnu" ; then
1831     AC_MSG_RESULT($target_gcc_version)
1833     GCC_VERSION_MAJOR=$(echo $target_gcc_version | cut -d'.' -f1)
1834     GCC_VERSION_MINOR=$(echo $target_gcc_version | cut -d'.' -f2)
1835     GCC_VERSION_PATCH=$(echo $target_gcc_version | cut -d'.' -f3)
1837     gcc_fix_bitfields="false"
1838     if test "$GCC_VERSION_MAJOR" -gt "4" ; then
1839         gcc_fix_bitfields="true"
1840     else
1841         if test "$GCC_VERSION_MAJOR" -gt "3" ; then
1842             if test "$GCC_VERSION_MINOR" -gt "6" ; then
1843                 gcc_fix_bitfields="true"
1844             fi
1845         fi
1846     fi
1848     if test "$gcc_fix_bitfields" = "true" ; then
1849         case "$aros_target_cpu" in
1850         *x86_64*)
1851             aros_kernel_cflags="$aros_kernel_cflags -mno-ms-bitfields"
1852             aros_isa_flags="$aros_isa_flags -mno-ms-bitfields"
1853             ;;
1854         i386)
1855             aros_kernel_cflags="$aros_kernel_cflags -mno-ms-bitfields"
1856             aros_isa_flags="$aros_isa_flags -mno-ms-bitfields"
1857             ;;
1858         esac
1859     fi
1862 AC_MSG_CHECKING([whether to enable Objective-C suppport])
1863 AC_ARG_ENABLE(objc,AC_HELP_STRING([--enable-objc],[Enable Objectve-C support (default=no)]),objc="$enableval",objc="no")
1864 AC_MSG_RESULT($objc)
1865 if test "x$objc" = "xyes"; then
1866     objc_target="$objc"
1867 else
1868     objc_target="no-objc"
1871 AC_MSG_CHECKING([whether to enable Java suppport])
1872 AC_ARG_ENABLE(java,AC_HELP_STRING([--enable-java],[Enable Java support (default=no)]),java="$enableval",java="no")
1873 AC_MSG_RESULT($java)
1874 if test "x$java" != "xno"; then
1875     java_target="$java"
1876 else
1877     java_target="no-java"
1880 spec_obj_format="-m $aros_object_format"
1881 # Now process extra architecture-specific options.
1882 # Currently this is implemented only for ARM. We can specify which minimum CPU and FPU to use,\
1883 # as well as floating-point ABI.
1884 case "$aros_target_cpu" in
1885 *x86_64*)
1886     dnl x86_64 can build 32 or 64bit code
1887     spec_obj_format="%{!m32:-m elf_x86_64} %{m32:-m elf_i386}"
1888     ;;
1889 arm*)
1890     dnl ARM defaults are: armv6 + vfp (unless overriden in per-target section above)
1891     if test "$gcc_default_cpu" = ""; then
1892         gcc_default_cpu="armv6"
1893     fi
1894     if test "$gcc_default_fpu" = ""; then
1895         gcc_default_fpu="vfp"
1896     fi
1897     if test "$gcc_default_float_abi" = ""; then
1898         if test "$target_cpu" = "armhf"; then
1899             gcc_default_float_abi="hard"
1900         else
1901             gcc_default_float_abi="softfp"
1902         fi
1903     fi
1905     AC_MSG_CHECKING([Which minimum CPU to use])
1906     AC_ARG_WITH(cpu,AC_HELP_STRING([--with-cpu=<spec>],[Specify minumum CPU (default=$gcc_default_cpu).]),aros_gcc_cpu="$withval",aros_gcc_cpu=$gcc_default_cpu)
1907     AC_MSG_RESULT($aros_gcc_cpu)
1909     AC_MSG_CHECKING([Which minimum FPU to use])
1910     AC_ARG_WITH(fpu,AC_HELP_STRING([--with-fpu=<spec>],[Specify minumum FPU (default=$gcc_default_fpu).]),aros_gcc_fpu="$withval",aros_gcc_fpu=$gcc_default_fpu)
1911     AC_MSG_RESULT($aros_gcc_fpu)
1913     AC_MSG_CHECKING([Which floating point ABI to use])
1914     AC_ARG_WITH(float,AC_HELP_STRING([--with-float=<spec>],[Specify floating point ABI (default=$gcc_default_float_abi).]),aros_gcc_float_abi="$withval",aros_gcc_float_abi=$gcc_default_float_abi)
1915     AC_MSG_RESULT($aros_gcc_float_abi)
1917     AC_MSG_CHECKING([Which ARM mode to use])
1918     if test "$aros_target_cpu_mode" = ""; then
1919         aros_target_cpu_mode="arm32"
1920         AC_MSG_RESULT([Defaulting to $aros_target_cpu_mode])
1921     else
1922         AC_MSG_RESULT([$aros_target_cpu_mode])
1923     fi
1925     case "$aros_target_cpu_mode" in
1926     arm32)
1927         gcc_default_mode="arm"
1928         aros_isa_flags="$aros_isa_flags -m$gcc_default_mode -mthumb-interwork -march=$aros_gcc_cpu -mfpu=$aros_gcc_fpu -mfloat-abi=$aros_gcc_float_abi"
1929     ;;
1930     arm64)
1931         AC_MSG_ERROR([ARM 64-bit mode is unsupported])
1932     ;;
1933     thumb)
1934         AC_MSG_ERROR([Thumb1 16-bit mode is unsupported])
1935     ;;
1936     thumb1)
1937         AC_MSG_ERROR([Thumb1 16-bit mode is unsupported])
1938     ;;
1939     thumb2)
1940         gcc_default_mode="thumb"
1941         # Do not specify -mthumb-interwork as it may add extra code to support arm/thumb interwork
1942         aros_isa_flags="$aros_isa_flags -m$gcc_default_mode -march=$aros_gcc_cpu -mfpu=$aros_gcc_fpu -mfloat-abi=$aros_gcc_float_abi"
1943     ;;
1944     *)
1945         AC_MSG_ERROR([Unsupported ARM mode specified $aros_target_cpu_mode])
1946     ;;
1947     esac
1949     aros_config_cflags="$aros_config_cflags -fno-asynchronous-unwind-tables -fno-exceptions"
1950     aros_config_cxxflags="$aros_config_cxxflags -fno-asynchronous-unwind-tables -fno-exceptions"
1951     aros_config_aflags="$aros_config_aflags -fno-asynchronous-unwind-tables -fno-exceptions"
1952     ;;
1953 i386)
1954     aros_isa_flags="$aros_isa_flags -m32 -march=i486"
1955     aros_kernel_cflags="$aros_kernel_cflags $aros_isa_flags"
1956     aros_kernel_ldflags="$aros_kernel_ldflags -m32" 
1957     ;;
1958 esac
1960 # Some architectures may need custom ELF specs.
1961 if test -f $SRCDIR/config/${aros_object_format}-specs.in; then
1962     elf_specs_in=config/${aros_object_format}-specs.in
1963 else
1964     elf_specs_in=config/elf-specs.in
1967 # Some compilers (ppc-elf-gcc is known to) have CPU defines in specs
1968 # Since we override specs, we may need to put these defines there
1969 if test "$gcc_target_cpu" != ""; then
1970     gcc_target_cpu="-D__${gcc_target_cpu}__"
1973 AC_MSG_CHECKING([where to download sourcecode for external ports])
1974 AC_ARG_WITH(portssources,AC_HELP_STRING([--with-portssources=DIR],[Where to download sourcecode for external ports]),with_portssrcdir=$withval,with_portssrcdir="default")
1975 if test "$with_portssrcdir" = "default"; then
1976     AROS_PORTSSRCDIR="$AROS_BUILDDIR_UNIX/bin/Sources"
1977 else
1978     AROS_PORTSSRCDIR="$with_portssrcdir"
1980 AC_MSG_RESULT($AROS_PORTSSRCDIR)
1982 AC_MSG_CHECKING([which bootloader to use])
1983 AC_ARG_WITH(bootloader,AC_HELP_STRING([--with-bootloader=NAME],[Use a specific bootloader]),target_bootloader=$withval,target_bootloader=$target_bootloader)
1984 if test "$target_bootloader" = "none"; then
1985     aros_target_bootloader=""
1986 else
1987     aros_target_bootloader="$target_bootloader"
1989 AC_MSG_RESULT($target_bootloader)
1991 AC_MSG_CHECKING([which icon-set to use])
1992 AC_ARG_WITH(iconset,AC_HELP_STRING([--with-iconset=NAME],[Use a specific Icon-set (default=Gorilla).]),target_iconset=$withval,target_iconset="default")
1993 if test "$target_iconset" = "default"; then
1994     aros_target_iconset="Gorilla"
1995     target_iconset="default (Gorilla)"
1996 else
1997     aros_target_iconset="$target_iconset"
1999 AC_MSG_RESULT($target_iconset)
2001 AC_MSG_CHECKING([which GUI Theme to use])
2002 AC_ARG_WITH(theme,AC_HELP_STRING([--with-theme=NAME],[Use a specific GUI Theme]),target_guitheme=$withval,target_guitheme="default")
2003 if test "$target_guitheme" = "default"; then
2004     aros_target_guitheme="Ice"
2005 else
2006     aros_target_guitheme="$target_guitheme"
2008 AC_MSG_RESULT($aros_target_guitheme)
2010 # Find out if we are cross-compiling (i.e. if we can't use the host compiler
2011 # for target code)
2012 cross_compiling=no
2014 dnl The first case is simple. If we are compiling for another CPU, we are cross-compiling for sure
2015 if test "$aros_host_cpu" != "$aros_target_cpu" ; then
2016     cross_compiling=yes
2019 dnl x86-64 toolchains can also produce i386 binaries, given -m32 flag.
2020 dnl The flag itself is given in per-target section, because some targets require to pass it
2021 dnl in a different manner, otherwise some tests fail.
2022 dnl TODO: Justify this.
2023 if test "$aros_host_cpu" == "x86_64" ; then
2024     if test "$aros_target_cpu" == "i386" ; then
2025         cross_compiling=no
2026     fi
2029 if test "x-$aros_flavour" = "x-emulation" -o "x-$aros_flavour" = "x-emulcompat" ; then
2030     dnl For a hosted build we are cross-compiling if host OS differs from build OS.
2031     dnl TODO: This might get a little bit more tricky if we ever cross-compile ARM-Android-hosted
2032     dnl AROS on ARM Linux, or even vice versa (Linux-hosted ARM AROS building on ARM Android).
2033     dnl ARM ABIs of Linux and Android are not compatible (despite very close), so host_cc can't be
2034     dnl used to build bootstrap for target arch in either case.
2035     dnl For us Android is not a separate OS, but a variant of Linux, so both systems will be
2036     dnl identified as 'linux'. If this ever involves, we'll have to implement some additional check,
2037     dnl perhaps introducing aros_host_variant
2038     if test "$aros_host_arch" != "$aros_target_arch" ; then
2039         cross_compiling=yes
2040     fi
2041 else
2042     dnl For a native build we only care if our host_cc can produce static ELF files. If so, we can use
2043     dnl it as kernel_cc. If not, (e.g. we are on Windows or Darwin), we need a crosscompiler.
2044     if test "$host_cc_elf" = "no" ; then
2045         cross_compiling=yes
2046     fi
2049 if test "$cross_compiling" = "no" ; then
2050     kernel_tool_prefix=""
2051     if test "$host_cc_elf" = "yes" ; then
2052         elf_tool_prefix=""
2053     fi
2056 if test "$kernel_tool_version" != ""; then
2057     kernel_tool_version="-$kernel_tool_version"
2060 #######################################################################
2061 ## Compute what toolchains to use, and their paths                   ##
2062 #######################################################################
2064 # This takes, as input:
2065 #   crosstools             {yes,no}
2066 #   kernel_tool_version    {"",[version]}
2067 #   target_tool_version    {"",[version]}
2068 #   kernel_tool_prefix     {none,[some-arch-os-]}
2069 #   gnu-toolchain -:
2070 #     target_tool_prefix     ${aros_target_cpu}-aros-
2071 #     aros_tool_prefix       ${aros_target_cpu}-aros-
2073 # The output is
2074 #   aros_kernel_{cpp,cc,ar,ld,as,ranlib,nm,strip}
2075 #        Where the 'kernel' binaries are located
2076 #   orig_target_{cpp,cc,ar,ld,as,ranlib,nm,strip}
2077 #        Where the 'target' binaries are located
2078 #        (not the symlink farm - that is aros_target_*!)
2080 # The rules are:
2081 #   if crosstools then
2082 #      if kernel_tools_prefix = "no-kernel-prefix-"
2083 #          aros_kernel_* = crosstools cc paths
2084 #          aros_kernel_cc = elf cc wrapper around crosstools cc
2085 #      else
2086 #          VALIDATE(${kernel_tools_prefix}*)
2087 #          aros_kernel_* = ${kernel_tools_prefix}*
2088 #          if ${kernel_tools_prefix}cc is an AROS gcc
2089 #              aros_kernel_cc = ${kernel_tools_prefix}cc
2090 #          else
2091 #              aros_kernel_cc = elf cc wrapper around ${kernel_tools_prefix}cc
2092 #          fi
2093 #      fi
2095 #      orig_target_* = aros built crosstools
2096 #      orig_target_cc = elf cc wrapper around crosstools cc
2097 #   else
2098 #      VALIDATE(${kernel_tools_prefix}*)
2100 #      orig_target_* = aros_kernel_*
2101 #      if aros_kernel_cc is an AROS gcc
2102 #          orig_target_cc = aros_kernel_cc
2103 #      else
2104 #          orig_target_cc = aros cc wrapper around aros_kernel_cc
2105 #      fi
2106 #   fi
2108 if test "$aros_toolchain" = "gnu" ; then
2109     target_tool_prefix="${aros_target_cpu}-aros-"
2110 elif test "$aros_toolchain" = "llvm" ; then
2111     target_tool_prefix="bin/"
2114 if test "$kernel_tool_prefix" != "" ; then
2115     AC_MSG_CHECKING([which kernel tools])
2116     AC_MSG_RESULT([$kernel_tool_prefix]);
2119 if test "$kernel_tool_prefix" = "none" ; then
2120     dnl ELF wrapper can be used only for native bootstrap
2121     if test "x-$aros_flavour" = "x-emulation" -o "x-$aros_flavour" = "x-emulcompat" ; then
2122         AC_MSG_ERROR([--with-kernel-toolchain-prefix= is required for this arch])
2123     fi
2124 else
2125     # Kernel tools required - find them
2126     # Note that 'normally', aros_kernel_* overrides will be
2127     # empty, unless specified in the per-arch sections above.
2128     if test "x$aros_kernel_cpp" = "x"; then
2129         aros_kernel_cpp=${kernel_tool_prefix}${CPP}
2130     fi
2131     AROS_BUILDCMD(aros_kernel_cpp,$aros_kernel_cpp,${kernel_tool_version})
2132     AROS_TOOL_KERNEL(aros_kernel_cpp,cpp,$aros_kernel_cpp)
2133     AROS_REQUIRED(cpp,$aros_kernel_cpp)
2135     if test "x$aros_kernel_cc" = "x"; then
2136         aros_kernel_cc=${kernel_tool_prefix}${CC}
2137     fi
2138     AROS_BUILDCMD(aros_kernel_cc,$aros_kernel_cc,${kernel_tool_version})
2139     AROS_TOOL_KERNEL(aros_kernel_cc,cc,$aros_kernel_cc)
2140     AROS_REQUIRED(cc,$aros_kernel_cc)
2142     if test "x$aros_kernel_cxx" = "x"; then
2143         aros_kernel_cxx=${kernel_tool_prefix}${CXX}
2144     fi
2145     AROS_BUILDCMD(aros_kernel_cxx,$aros_kernel_cxx,${kernel_tool_version})
2146     AROS_TOOL_KERNEL(aros_kernel_cxx,cxx,$aros_kernel_cxx)
2147     # If it's set, make sure it's really there
2148     if test "x$aros_kernel_cxx" != "x" ; then
2149         AROS_REQUIRED(cxx,$aros_kernel_cxx)
2150     fi
2151     AROS_TOOL_KERNEL(aros_kernel_ld,ld,$aros_kernel_ld)
2152     AROS_REQUIRED(ld,$aros_kernel_ld)
2153     AROS_TOOL_KERNEL(aros_kernel_as,as,$aros_kernel_as)
2154     AROS_REQUIRED(as,$aros_kernel_as)
2155     AROS_TOOL_KERNEL(aros_kernel_ar,ar,$aros_kernel_ar)
2156     AROS_REQUIRED(ar,$aros_kernel_ar)
2157     AROS_TOOL_KERNEL(aros_kernel_ranlib,ranlib,$aros_kernel_ranlib)
2158     AROS_REQUIRED(ranlib,$aros_kernel_ranlib)
2159     AROS_TOOL_KERNEL(aros_kernel_nm,nm,$aros_kernel_nm)
2160     AROS_REQUIRED(nm,$aros_kernel_nm)
2161     AROS_TOOL_KERNEL(aros_kernel_strip,strip,$aros_kernel_strip)
2162     AROS_REQUIRED(strip,$aros_kernel_strip)
2164     # Objcopy and objdump are not required for the kernel
2165     # toolchain on many architectures.
2166     # So we'll look for them, but not make them strictly required.
2167     AROS_TOOL_KERNEL(aros_kernel_objcopy,objcopy,$aros_kernel_objcopy)
2168     AROS_TOOL_KERNEL(aros_kernel_objdump,objdump,$aros_kernel_objdump)
2169     if test "x${crosstools}" != "xyes" ; then
2170         AROS_REQUIRED(objcopy,$aros_kernel_objcopy)
2171         AROS_REQUIRED(objdump,$aros_kernel_objdump)
2172     fi
2175 AC_MSG_CHECKING([which target tools to use])
2176 if test "$aros_target_toolchain" = "yes"; then
2177     if test "$aros_toolchain" = "llvm" ; then
2178         msg_result="llvm"
2179     else
2180         msg_result=$target_tool_prefix
2181     fi
2182     AC_MSG_RESULT([$msg_result])
2183     # We are building AROS crosstools
2184     tmp_tool_prefix="$AROS_CROSSTOOLSDIR/${target_tool_prefix}"
2185     orig_target_cc="${tmp_tool_prefix}${toolchain_c_compiler}${target_tool_version}"
2186     orig_target_cxx="${tmp_tool_prefix}${toolchain_cxx_compiler}${target_tool_version}"
2187     orig_target_cpp="${tmp_tool_prefix}${toolchain_cpp_preprocessor}"
2188     orig_target_ld="${tmp_tool_prefix}${toolchain_ld}"
2189     orig_target_as="${tmp_tool_prefix}${toolchain_as}"
2190     orig_target_ar="${tmp_tool_prefix}${toolchain_ar}"
2191     orig_target_ranlib="${tmp_tool_prefix}${toolchain_ranlib}"
2192     orig_target_nm="${tmp_tool_prefix}${toolchain_nm}"
2193     orig_target_strip="${tmp_tool_prefix}${toolchain_strip}"
2194     orig_target_objcopy="${tmp_tool_prefix}${toolchain_objcopy}"
2195     orig_target_objdump="${tmp_tool_prefix}${toolchain_objdump}"
2196 else
2197     # Determine whether AROS or ELF tools should be used
2198     if test "$aros_tool_prefix" = "none"; then
2199         aros_tool_prefix="${elf_tool_prefix}"
2200     fi
2202     AC_MSG_RESULT([$aros_tool_prefix])
2203     # We are *not* building AROS crosstools - use the AROS or ELF tools
2204     AROS_TOOL_TARGET(orig_target_cpp,cpp,${aros_tool_prefix}${toolchain_cpp_preprocessor}${target_tool_version})
2205     AROS_REQUIRED(cpp,$orig_target_cpp)
2206     AROS_TOOL_TARGET(orig_target_cc,gcc,${aros_tool_prefix}${toolchain_c_compiler}${target_tool_version})
2207     AROS_REQUIRED(cc,$orig_target_cc)
2208     AROS_TOOL_TARGET(orig_target_cxx,g++,${aros_tool_prefix}${toolchain_cxx_compiler}${target_tool_version})
2209     AROS_REQUIRED(cxx,$orig_target_cxx)
2210     AROS_TOOL_TARGET(orig_target_ld,gcc,${aros_tool_prefix}${toolchain_ld})
2211     AROS_REQUIRED(ld,$orig_target_ld)
2212     AROS_TOOL_TARGET(orig_target_as,as,aros_tool_prefix}${toolchain_as})
2213     AROS_REQUIRED(as,$orig_target_as)
2214     AROS_TOOL_TARGET(orig_target_ar,ar,${aros_tool_prefix}${toolchain_ar})
2215     AROS_REQUIRED(ar,$orig_target_ar)
2216     AROS_TOOL_TARGET(orig_target_ranlib,ar,${aros_tool_prefix}${toolchain_ranlib})
2217     AROS_REQUIRED(ranlib,$orig_target_ranlib)
2218     AROS_TOOL_TARGET(orig_target_nm,nm,${aros_tool_prefix}${toolchain_nm})
2219     AROS_REQUIRED(nm,$orig_target_nm)
2220     AROS_TOOL_TARGET(orig_target_strip,strip,${aros_tool_prefix}${toolchain_strip})
2221     AROS_REQUIRED(strip,$orig_target_strip)
2222     AROS_TOOL_TARGET(orig_target_objcopy,objcopy,${aros_tool_prefix}${toolchain_objcopy})
2223     AROS_REQUIRED(objcopy,$orig_target_objcopy)
2224     AROS_TOOL_TARGET(orig_target_objdump,objdump,${aros_tool_prefix}${toolchain_objdump})
2225     AROS_REQUIRED(objdump,$orig_target_objdump)
2228 if test "$kernel_tool_prefix" = "none" ; then
2229     # No kernel tools specified
2230     # Assume target tools == kernel tools with ELF wrapper
2231     aros_kernel_cc=$orig_target_cc
2232     aros_kernel_cxx=$orig_target_cxx
2233     aros_kernel_cpp=$orig_target_cpp
2234     aros_kernel_ld=$orig_target_ld
2235     aros_kernel_as=$orig_target_as
2236     aros_kernel_ar=$orig_target_ar
2237     aros_kernel_ranlib=$orig_target_ranlib
2238     aros_kernel_nm=$orig_target_nm
2239     aros_kernel_strip=$orig_target_strip
2240     aros_kernel_objcopy=$orig_target_objcopy
2241     aros_kernel_objdump=$orig_target_objdump
2242     use_kernel_cc_wrapper=yes
2245 # At this point, all aros_kernel_* and aros_target_* 
2246 # tools should be set up correctly
2248 CC="$aros_kernel_cc $kernel_tool_flags"
2249 CPP="$aros_kernel_cpp"
2251 #-----------------------------------------------------------------------------
2253 # Find all the tools we need to compile. This could be cross-compiling
2254 # though! If that is the case we use the GNU form of the target and
2255 # simply add this to the front of the binary name. This is rather simple,
2256 # but it should work under most circumstances.
2258 # The default tools are to use the same as the host, but only if the
2259 # host and target CPU are the same. With GCC this is normally enough.
2262 aros_cc_pre=""
2263 aros_shared_ld="$aros_host_ld"
2265 aros_target_mkdep="$aros_host_mkdep"
2267 # The default tools executables to be linked to.
2268 if test "$rescomp" != ""; then
2269     AC_PATH_PROG(aros_kernel_rescomp,${kernel_tool_prefix}$rescomp)
2270     AROS_REQUIRED($rescomp,$aros_kernel_rescomp)
2273 # Set up the sources for the symlink farm
2274 if test "$crosstools" = "yes"; then
2275     crosstools_target=tools-crosstools
2278 aros_kernel_cc="$aros_kernel_cc $kernel_tool_flags"
2279 aros_kernel_ar="$aros_kernel_ar $aros_kernel_ar_flags"
2281 aros_hostcfg_dir="bin/${aros_host_arch}-${aros_host_cpu}/gen/host/config"
2282 aros_targetcfg_dir="bin/${aros_target_arch}-${aros_target_cpu}${aros_target_suffix}/gen/config"
2283 aros_inc_dir="bin/${aros_target_arch}-${aros_target_cpu}${aros_target_suffix}/AROS/Developer/include/aros"
2284 aros_gendir="bin/${aros_target_arch}-${aros_target_cpu}${aros_target_suffix}/gen"
2285 aros_geninc_dir="bin/${aros_target_arch}-${aros_target_cpu}${aros_target_suffix}/gen/include/aros"
2286 aros_tools_dir="bin/${aros_host_arch}-${aros_host_cpu}/tools"
2287 aros_scripts_dir="bin/${aros_target_arch}-${aros_target_cpu}${aros_target_suffix}/gen/scripts"
2289 # aros_cc_pre is a variable that is added to the front of the compiler name
2290 # in the generated aros-gcc shell script. We need this to enable the cache
2291 # to work across cleaned builds. Also, support DISTCC using the correct
2292 # environment variable.
2295 if test "x${DISTCC}" != "x" ; then
2296     if test "x${CCACHE}" != "x" ; then
2297         aros_cc_pre="env CCACHE_PREFIX=${DISTCC} ${CCACHE} "
2298     else
2299         aros_cc_pre="${DISTCC} "
2300     fi
2301 else
2302     if test "x${CCACHE}" != "x" ; then
2303         aros_cc_pre="${CCACHE} "
2304     fi
2307 AC_SUBST(aros_target_nostdinc_cflags,-nostdinc)
2308 AC_SUBST(aros_target_nostartup_ldflags,-nostartfiles)
2309 AC_SUBST(aros_target_nix_ldflags,-nix)
2310 AC_SUBST(aros_target_detach_ldflags,-detach)
2311 AC_SUBST(aros_target_nostdlib_ldflags,-nostdlib)
2313 # Target tools
2314 AC_SUBST(aros_toolchain)
2315 if test "$aros_target_toolchain" != "yes"; then
2316     prefix="${PWD}/${aros_tools_dir}/${aros_target_cpu}-${aros_target_arch}${aros_target_suffix}-aros-"
2317     if test "$GCC" = "yes"; then
2318         aros_target_cc_path=`$orig_target_cc -print-search-dirs | grep "programs: =" | cut -c 12-`
2319     fi
2320 else
2321     # We do not know which c compiler version we are going to build and what we need to know
2322     # here is different for different versions so this will be set later during the
2323     # build of crosstools.
2324     if test "$aros_toolchain" = "gnu" ; then
2325         prefix="$AROS_CROSSTOOLSDIR/${aros_target_cpu}-aros-"
2326     elif test "$aros_toolchain" = "llvm" ; then
2327         prefix="$AROS_CROSSTOOLSDIR/bin/"
2328     fi
2329     aros_target_cc_path=@aros_target_cc_path@
2331 aros_target_cpp="${prefix}${toolchain_cpp_preprocessor}"
2332 aros_target_cc="${prefix}${toolchain_c_compiler}"
2333 aros_target_cxx="${prefix}${toolchain_cxx_compiler}"
2334 aros_target_as="${prefix}${toolchain_as}"
2335 if test "${use_ld_wrapper}" = "yes"; then
2336     aros_target_ld="${PWD}/${aros_tools_dir}/${aros_target_cpu}-${aros_target_arch}${aros_target_suffix}-aros-${aros_ld}"
2337 else
2338     aros_target_ld="${prefix}${toolchain_ld}"
2340 aros_toolchain_ld="${prefix}${toolchain_ld}"
2342 aros_target_ar="${prefix}${toolchain_ar} $aros_target_ar_flags"
2343 aros_target_objcopy="${prefix}${toolchain_objcopy}"
2344 aros_target_objdump="${prefix}${toolchain_objdump}"
2345 aros_target_ranlib="${prefix}${toolchain_ranlib} $aros_target_ranlib_flags"
2346 aros_target_nm="${prefix}${toolchain_nm} $aros_target_nm_flags"
2347 aros_target_strip="${prefix}${toolchain_strip}"
2348 aros_plain_nm="${prefix}${toolchain_nm}"
2349 aros_plain_ar="${prefix}${toolchain_ar}"
2351 AC_ARG_ENABLE(includes,
2352 AC_HELP_STRING([--enable-includes=dir],[Alternative system include directory]),
2353 [aros_target_incl=$enable_includes], [aros_target_incl=`$aros_kernel_cc -print-sysroot`/`$aros_kernel_cc --print-sysroot-headers-suffix 2>/dev/null || echo usr/include`])
2355 if test "$aros_kernel_includes" = ""; then
2356     if test "x-$aros_flavour" = "x-emulation" -o "x-$aros_flavour" = "x-emulcompat" ; then
2357         aros_kernel_includes="-isystem $aros_target_incl"
2358     fi
2361 if test "$aros_kernel_includes" != "" ; then
2362     dnl find out about the kernel cc's include path
2363     AC_MSG_CHECKING([for the kernel compiler's include path])
2364     if test "$aros_kernel_cc_includes" = "" ; then
2365         # Try to guess where the directory is.
2366         aros_kernel_cc_includes=`dirname \`${aros_kernel_cc} ${aros_kernel_cflags} -print-libgcc-file-name\``/include
2367         if test -d $aros_kernel_cc_includes; then
2368             # Check if there is also an include-fixed directory and add it
2369             # to kernel compiler's include path as it may contain some of
2370             # the headers we need.
2371             if test -d "$aros_kernel_cc_includes"-fixed; then
2372                 aros_kernel_cc_includes+=" -isystem $aros_kernel_cc_includes"-fixed
2373             fi
2374             # Check for specific includes directory. Needed for Ubuntu 11.10 and Debian
2375             if test -d "/usr/include/${aros_target_cpu}-linux-gnu"; then
2376                 aros_kernel_cc_includes+=" -isystem /usr/include/${aros_target_cpu}-linux-gnu"
2377             fi
2378         else
2379             # The directory doesn't exist, we need to do some more work.
2380             aros_kernel_cc_includes=${PWD}/${aros_gendir}/cc_include
2382             # These are the headers we're looking for.
2383             headers="limits.h mmintrin.h stdbool.h syslimits.h float.h \
2384                      stddef.h xmmintrin.h iso646.h stdarg.h unwind.h   \
2385                      zutil.h stdint.h"
2387             dirs=
2388             for h in $headers; do
2389                 # Which other headers are needed by each of the above?
2390                 deps=$(echo "#include <$h>" | \
2391                        $aros_kernel_cc -E -M - 2>/dev/null | \
2392                        sed 's/^.*://; s/\\$/ /g; s/[[ \t]]\+/ /g')
2394                 # Copy all the needed headers to a directory beneath gendir.
2395                 for d in $deps; do
2396                     h=$(basename $d)
2397                     dir=${aros_kernel_cc_includes}$(echo $(dirname $d) | \
2398                                                 sed -n "s,^.*/include\(/.*\),\1,p")
2399                     ! test -d $dir && mkdir -p $dir
2400                     ! test -f $dir/$h && { cp $d $dir; chmod u+w $dir/$h; }
2401                 done
2402             done            
2403         fi
2404     fi
2405     AC_MSG_RESULT($aros_kernel_cc_includes)
2406     # Adding -nostdinc to kernel includes as they are always used together.
2407     aros_kernel_includes="$aros_kernel_includes $aros_target_nostdinc_cflags -isystem $aros_kernel_cc_includes"
2410 if test "$crosstools" != "yes"; then
2411     dnl find out about the target cc's include path
2412     AC_MSG_CHECKING([for the target compiler's include path])
2413     if test "$aros_target_cc_includes" = "" ; then
2414         #try to guess where the directory is
2415         aros_target_cc_includes=`dirname \`${orig_target_cc} -print-libgcc-file-name\``/include
2416         if ! test -d $aros_target_cc_includes; then
2417             #the directory doesn't exist, we need to do some more work
2418             aros_target_cc_includes=${PWD}/${aros_gendir}/cc_include
2419         
2420             #these are the headers we're looking for
2421             headers="limits.h mmintrin.h stdbool.h syslimits.h float.h \
2422                     stddef.h xmmintrin.h iso646.h stdarg.h unwind.h   \
2423                     zutil.h"
2425             dirs=
2426             for h in $headers; do
2427                 #which other headers each of the above headers needs?
2428                 deps=$(echo "#include <$h>" | \
2429                     $orig_target_cc -E -M - 2>/dev/null | \
2430                     sed 's/^.*://; s/\\$/ /g; s/[[ \t]]\+/ /g')
2431             
2432                 #copy all the needed headers to a directory beneath gendir
2433                 for d in $deps; do
2434                     h=$(basename $d)
2435                     dir=${aros_target_cc_includes}$(echo $(dirname $d) | \
2436                                                 sed -n "s,^.*/include\(/.*\),\1,p")
2437                     ! test -d $dir && mkdir -p $dir
2438                     ! test -f $dir/$h && { cp $d $dir; chmod u+w $dir/$h; }
2439                 done
2440             done
2441         fi
2442     fi
2443     AC_MSG_RESULT($aros_target_cc_includes)
2444 else
2445     # We do not know which c compiler version we are going to build and what we need to know
2446     # here is different for different versions so this will be set later during the
2447     # build of crosstools.
2448     aros_target_cc_includes=@aros_target_cc_includes@
2452 # For GCC < 4.0 -I- is used for giving the search path for '#include "..."'
2453 # On GCC >= 4.0 -iquote should be used
2456 save_cc="$CC"
2457 save_cflags="$CFLAGS"
2458 CFLAGS="-iquote."
2459 kernel_cflags_iquote=$host_cflags_iquote
2460 kernel_cflags_iquote_end=$host_cflags_iquote_end
2461 if test "x-$cross_compiling" = "x-yes"; then
2462     CC="$aros_kernel_cc"
2463     AC_MSG_CHECKING([whether ${CC} accepts -fno-stack-protector])
2464     if test "x-$crosstools" != "x-yes"; then
2465         AC_TRY_COMPILE(,, use_no_stack_protector="yes", use_no_stack_protector="no")
2466     else
2467         # we do know it is supported for the smallest version of gcc we are going to build
2468         # we assume it's also supported by later versions
2469         use_no_stack_protector=yes
2470     fi
2471     AC_MSG_RESULT($use_no_stack_protector)
2472     AC_MSG_CHECKING([whether ${CC} accepts -iquote])
2473     if test "x-$crosstools" != "x-yes"; then
2474         AC_TRY_COMPILE(,, has_iquote="yes", has_iquote="no")
2475     else
2476         # we do know it is supported for the smallest version of gcc we are going to build
2477         # we assume it's also supported by later versions
2478         has_iquote=yes
2479     fi
2480     AC_MSG_RESULT($has_iquote)
2481     if test "x-$has_iquote" = "x-yes" ; then
2482         kernel_cflags_iquote=-iquote
2483         kernel_cflags_iquote_end=
2484     else
2485         kernel_cflags_iquote=-I
2486         kernel_cflags_iquote_end=-I-
2487     fi
2489 if test "x-$use_no_stack_protector" = "x-yes" ; then
2490     aros_kernel_cflags="$aros_kernel_cflags -fno-stack-protector"
2493 #-----------------------------------------------------------------------------
2495 # Check if we can explicitly choose older version of symbol hashing
2497 CFLAGS="save_cflags -Wl,--hash-style=sysv"
2498 CC="$aros_kernel_cc"
2499 AC_MSG_CHECKING([whether ${CC} accepts -Wl,--hash-style=sysv])
2500 AC_TRY_LINK(,, use_hash_style="yes", use_hash_style="no")
2501 AC_MSG_RESULT($use_hash_style)
2502 if test "x-$use_hash_style" = "x-yes" ; then
2503     aros_kernel_cflags="$aros_kernel_cflags -Wl,--hash-style=sysv"
2505 CC="$save_cc"
2506 CFLAGS="$save_cflags"
2508 AC_SUBST(host_cflags_iquote)
2509 AC_SUBST(host_cflags_iquote_end)
2510 AC_SUBST(kernel_cflags_iquote)
2511 AC_SUBST(kernel_cflags_iquote_end)
2514 dnl Check if user specified --with-resolution=XRESxYRESxDEPTH
2515 AC_MSG_CHECKING([for default resolution of WBScreen])
2516 AC_ARG_WITH(resolution,AC_HELP_STRING([--with-resolution=XRESxYRESxDEPTH],[Default resolution of the initial WorkbenchScreen]),resolution=$withval,resolution=none)
2517 # We require an argument, so map --with/--without ("yes"/"no") to "none" specified
2518 if test "$resolution" = "yes" ; then
2519     resolution="none"
2521 if test "$resolution" = "no" ; then
2522     resolution="none"
2524 if test "$resolution" != "none" ; then
2525     aros_nominal_width=`echo $resolution | cut -d'x' -f1`
2526     aros_nominal_height=`echo $resolution | cut -d'x' -f2`
2527     aros_nominal_depth=`echo $resolution | cut -d'x' -f3`
2529 AC_MSG_RESULT($aros_nominal_width x $aros_nominal_height x $aros_nominal_depth)
2530 aros_cv_nominal_width=$aros_nominal_width
2531 aros_cv_nominal_height=$aros_nominal_height
2532 aros_cv_nominal_depth=$aros_nominal_depth
2534 dnl See if the user wants the serial debug output for native flavour
2535 AC_MSG_CHECKING([whether serial debug is enabled])
2536 AC_ARG_WITH(serial-debug,AC_HELP_STRING([--with-serial-debug],[Enable serial debug output in native (default=no)]),serial_debug=$withval,serial_debug=none)
2537 if test "$aros_serial_debug" = 0 ; then
2538     serial_debug_forced=""
2539     if test "$serial_debug" = "yes" ; then
2540         serial_debug="1"
2541     fi
2542     if test "$serial_debug" = "no" ; then
2543         serial_debug="none"
2544     fi
2545 else
2546     serial_debug_forced="(forced)"
2547     serial_debug=$aros_serial_debug
2549 if test "$serial_debug" != "none" ; then
2550     aros_serial_debug=$serial_debug
2551     AC_MSG_RESULT($serial_debug_forced on port $serial_debug)
2552 else
2553     AC_MSG_RESULT(no)
2556 dnl See if the user wants the palm debug output hack for palm native flavour
2557 AC_MSG_CHECKING([whether palm debug hack is enabled])
2558 AC_ARG_ENABLE(palm_debug_hack,AC_HELP_STRING([--enable-palm-debug-hack],[Enable palm debug output hack in palm native (default=no)]),palm_debug_hack="yes",palm_debug_hack="no")
2559 if test "$palm_debug_hack" = "yes" ; then
2560     aros_palm_debug_hack="1"
2562 AC_MSG_RESULT($palm_debug_hack)
2564 dnl See if dev wants the usb3.0 code
2565 AC_MSG_CHECKING([whether usb3.0 code is enabled])
2566 AC_ARG_ENABLE(usb30_code,AC_HELP_STRING([--enable-usb30-code],[Enable usb3.0 code (default=no)]),usb30_code="yes",usb30_code="no")
2567 if test "$usb30_code" = "yes" ; then
2568     aros_config_cflags="$aros_config_cflags -DAROS_USB30_CODE"
2569     aros_kernel_cflags="$aros_kernel_cflags -DAROS_USB30_CODE"
2571 AC_MSG_RESULT($usb30_code)
2573 dnl See if the user wants nesting supervisor activated for unix flavour
2574 AC_MSG_CHECKING([whether nesting supervisor support is enabled])
2575 AC_ARG_ENABLE(nesting_supervisor,AC_HELP_STRING([--enable-nesting-supervisor],[Enable nesting supervisor support in unix (default=no)]),nesting_supervisor="yes",nesting_supervisor="no")
2576 if test "$nesting_supervisor" = "yes" ; then
2577     aros_nesting_supervisor="1"
2579 AC_MSG_RESULT($nesting_supervisor)
2581 dnl See if the user wants to disable MMU support
2582 dnl This can be overriden on per-target basis,
2583 dnl set $aros_enable_mmu to "yes" or "no" to do this
2584 if test "$aros_enable_mmu" = "" ; then
2585     AC_MSG_CHECKING([whether MMU support is enabled])
2586     dnl Enabled by default
2587     AC_ARG_ENABLE(mmu,AC_HELP_STRING([--disable-mmu],[Disable MMU support (default=enabled)]),aros_enable_mmu=$enableval,aros_enable_mmu="yes")
2588     if test "$aros_enable_mmu" = "" ; then
2589         aros_enable_mmu="yes"
2590     fi
2591     AC_MSG_RESULT($aros_enable_mmu)
2593 if test "$aros_enable_mmu" = "no" ; then
2594     aros_enable_mmu="0"
2595 else
2596     aros_enable_mmu="1"
2598     
2600 dnl things specifically required for hosted flavours
2601 if test "x-$aros_flavour" = "x-emulation" -o "x-$aros_flavour" = "x-emulcompat" ; then
2603     if test "x-$need_dlopen" != "x-no" ; then
2604       save_libs="$LIBS"
2605       LIBS=""
2606       dnl some kind of dynamic library access system is required for hostlib.resource
2607       AC_CHECK_FUNC(dlopen, have_dl="yes", have_dl="no")
2608       if test "x-$have_dl" = "x-no" ; then
2609           AC_CHECK_LIB(dl, dlopen, [have_dl="yes"
2610                                     aros_host_ldflags="$aros_host_ldflags -ldl"],
2611                                     have_dl="no")
2612       fi
2613       if test "x-$have_dl" = "x-no" ; then
2614           AC_MSG_ERROR([dlopen() dynamic linker functions not available])
2615       fi
2616       LIBS="$save_libs"
2617     fi
2620     dnl x11 hidd
2621     AC_ARG_ENABLE(x11_hidd, AC_HELP_STRING([--enable-x11-hidd],
2622                                            [build X11 hidd for hosted (default=auto)]),
2623                                            x11_hidd="$enableval",
2624                                            x11_hidd="$need_x11")
2625     case "x-$x11_hidd" in
2626         x-yes|x-no|x-auto)                 ;;
2627         *)                 x11_hidd="$need_x11" ;;
2628     esac
2630     ENABLE_X11=0
2632     dnl they want it
2633     if test "x-$x11_hidd" != "x-no" ; then
2635         dnl find x11 stuff
2636         AC_PATH_X
2638         if test -n "$x_includes"; then
2639             X_CFLAGS="$X_CFLAGS -I$x_includes"
2640         fi
2642         if test -n "$x_libraries"; then
2643             X_LIBS="$X_LIBS -L$x_libraries"
2644         fi
2646         if test "x-$no_x" = "x-yes" ; then
2648             dnl didn't find it
2649             if test "x-$x11_hidd" != "x-auto" ; then
2650                 dnl and they explicitly asked for it, bail out
2651                 AC_MSG_ERROR([X11 libs/headers not found, cannot build X11 hidd as requested])
2652             fi
2653         
2654         else
2655             dnl found it, setup the metatarget
2656             host_x_gfx=yes
2657             ENABLE_X11=1
2659             aros_host_x11_cflags="$X_CFLAGS"
2660             aros_host_x11_ldflags="$X_LIBS  -lX11"
2662             dnl setup shared memory extensions
2663             AC_ARG_ENABLE(x11_shm, AC_HELP_STRING([--enable-x11-shm],
2664                                                   [use X11 shared memory (default=auto)]),
2665                                                   x11_hidd_shm="$enableval",
2666                                                   x11_hidd_shm="auto")
2667             case "x-$x11_hidd_shm" in
2668                 x-yes|x-no|x-auto)                     ;;
2669                 *)                 x11_hidd_shm="auto" ;;
2670             esac
2672             have_xshm=no
2674             dnl they want it
2675             if test "x-$x11_hidd_shm" != "x-no" ; then
2677                 dnl system shm headers
2678                 AC_CHECK_HEADERS(sys/ipc.h)
2679                 AC_CHECK_HEADERS(sys/shm.h)
2681                 dnl got them
2682                 if test "x-$ac_cv_header_sys_ipc_h" = "x-yes" -a "x-$ac_cv_header_sys_shm_h" = "x-yes" ; then
2684                     dnl make sure X libs have shm functions
2685                     save_cflags="$CFLAGS"
2686                     save_ldflags="$LDFLAGS"
2687                     CFLAGS="$CFLAGS $X_CFLAGS"
2688                     LDFLAGS="$LDFLAGS $X_LIBS"
2689                     AC_CHECK_LIB(Xext, XShmQueryExtension, have_xshm=yes)
2690                     CFLAGS="$save_cflags"
2691                     LDFLAGS="$save_ldflags"
2692                 fi
2693             fi
2695             dnl detection done, prepare output
2696             if test "x-$have_xshm" = "x-yes" ; then
2697                 dnl we can do shm
2698                 DO_XSHM_SUPPORT="1"
2699             elif test "x-$x11_hidd_shm" = "x-yes" ; then
2700                 dnl they explicitly asked for it, but we can't do it
2701                 AC_MSG_ERROR([X11 has no support for shared memory, cannot enable it as requested])
2702             else
2703                 dnl otherwise just disable it
2704                 DO_XSHM_SUPPORT="0"
2705             fi
2707             
2708             dnl setup vidmode (fullscreen) extensions
2709             AC_ARG_ENABLE(x11_vidmode, AC_HELP_STRING([--enable-x11-vidmode],
2710                                                       [use X11 vidmode extension (default=auto)]),
2711                                                       x11_hidd_vidmode="$enableval",
2712                                                       x11_hidd_vidmode="auto")
2713             case "x-$x11_hidd_vidmode" in
2714                 x-yes|x-no|x-auto)                         ;;
2715                 *)                 x11_hidd_vidmode="auto" ;;
2716             esac
2718             have_vidmode=no
2720             dnl they want it
2721             if test "x-$x11_hidd_vidmode" != "x-no" ; then
2723                 dnl make sure X libs have vidmode functions
2724                 save_cflags="$CFLAGS"
2725                 save_ldflags="$LDFLAGS"
2726                 CFLAGS="$CFLAGS $X_CFLAGS"
2727                 LDFLAGS="$LDFLAGS $X_LIBS"
2728                 AC_CHECK_LIB(Xxf86vm, XF86VidModeQueryExtension, have_vidmode=yes)
2729                 CFLAGS="$save_cflags"
2730                 LDFLAGS="$save_ldflags"
2731             fi
2733             dnl detection done, prepare output
2734             if test "x-$have_vidmode" = "x-yes" ; then
2735                 dnl we can do vidmode
2736                 DO_VIDMODE_SUPPORT="1"
2737             elif test "x-$x11_hidd_vidmode" = "x-yes" ; then
2738                 dnl they explicitly asked for it, but we can't do it
2739                 AC_MSG_ERROR([X11 vidmode extension not available, cannot enable it as requested])
2740             else
2741                 dnl otherwise just disable it
2742                 DO_VIDMODE_SUPPORT="0"
2743             fi
2744         fi
2745     fi
2747     dnl sdl hidd
2748     AC_ARG_ENABLE(sdl_hidd, AC_HELP_STRING([--enable-sdl-hidd],
2749                                            [build SDL hidd for hosted (default=auto)]),
2750                                            sdl_hidd="$enableval",
2751                                            sdl_hidd="auto")
2752     case "x-$sdl_hidd" in
2753         x-yes|x-no|x-auto)                 ;;
2754         *)                 sdl_hidd="auto" ;;
2755     esac
2757     dnl they want it
2758     if test "x-$sdl_hidd" != "x-no" ; then
2760         dnl find sdl
2761         SDL_VERSION=1.2.5
2762         AM_PATH_SDL($SDL_VERSION, [have_sdl="yes"],
2763             [have_sdl="no"])
2765         if test "x-$have_sdl" != "x-yes" ; then
2767             dnl didn't find it
2768             if test "x-$sdl_hidd" != "x-auto" ; then
2769                 dnl and they explicitly asked for it, bail out
2770                 AC_MSG_ERROR([SDL libs/headers not found, cannot build SDL hidd as requested])
2771             fi
2773         else
2774             dnl found it, enable the build
2775             host_sdl_gfx=yes
2776             aros_host_sdl_cflags=$SDL_CFLAGS
2777             aros_host_sdl_libs=$SDL_LIBS
2778         fi
2779     fi
2784 dnl See if the user wants dbus.library
2785 AC_MSG_CHECKING([whether building of dbus.library is enabled])
2786 AC_ARG_ENABLE(dbus,AC_HELP_STRING([--enable-dbus],[Enable DBUS support via dbus.library (default=no)]),dbus="yes",dbus="no")
2787 if test "$dbus" = "yes" ; then
2788     ENABLE_DBUS=1
2789     DBUS_CFLAGS=`pkg-config --cflags dbus-1`
2790     DBUS_LIBFLAGS=`pkg-config --libs dbus-1`
2791     KERNEL_DBUS_KOBJ=kernel-dbus-kobj
2792     KERNEL_DBUS_INCLUDES=kernel-dbus-includes
2793 else
2794     ENABLE_DBUS=0
2796 AC_MSG_RESULT($dbus)
2798 if test "$use_kernel_cc_wrapper" = "yes" ; then
2799     aros_kernel_cc="${PWD}/${aros_tools_dir}/${aros_target_cpu}-${aros_target_arch}${aros_target_suffix}-elf-${toolchain_c_compiler}"
2802 dnl --------------------------------------------------------------------
2803 dnl Configuration Output Section
2804 dnl --------------------------------------------------------------------
2806 # Generic
2807 AC_SUBST(aros_arch)
2808 AC_SUBST(aros_cpu)
2809 AC_SUBST(aros_flavour)
2810 AC_SUBST(aros_flavour_uc)
2811 AC_SUBST(aros_target_toolchain)
2812 AC_SUBST(aros_toolchain_ld)
2813 AC_SUBST(aros_build_host)
2814 AC_SUBST(AROS_BUILDDIR)
2815 AC_SUBST(AROS_BUILDDIR_UNIX)
2816 AC_SUBST(SRCDIR)
2817 AC_SUBST(AROS_CROSSTOOLSDIR)
2818 AC_SUBST(AROS_PORTSSRCDIR)
2820 # Compatability with other Amiga-like operation systems
2821 AC_SUBST(aros_amigaos_compliance)
2823 # Host related
2824 AC_SUBST(aros_cc_pre)
2825 AC_SUBST(aros_host_strip)
2826 AC_SUBST(aros_host_arch)
2827 AC_SUBST(aros_host_cpu)
2828 AC_SUBST(aros_host_cpp)
2829 AC_SUBST(aros_host_def_cc)
2830 AC_SUBST(aros_host_cc)
2831 AC_SUBST(aros_host_cxx)
2832 AC_SUBST(aros_host_ar)
2833 AC_SUBST(aros_host_ranlib)
2834 AC_SUBST(aros_host_ld)
2835 AC_SUBST(aros_host_make)
2836 AC_SUBST(aros_host_cflags)
2837 AC_SUBST(aros_host_cxxflags)
2838 AC_SUBST(gnu89_inline)
2839 AC_SUBST(aros_host_ldflags)
2840 AC_SUBST(aros_host_debug)
2841 AC_SUBST(aros_host_mkdep)
2842 AC_SUBST(aros_host_mkargs)
2843 AC_SUBST(aros_host_exe_suffix)
2844 AC_SUBST(aros_host_lib_suffix)
2845 AC_SUBST(aros_tools_dir)
2846 AC_SUBST(aros_host_aclocal)
2847 AC_SUBST(aros_host_autoconf)
2848 AC_SUBST(aros_host_autoheader)
2849 AC_SUBST(aros_host_automake)
2850 AC_SUBST(ant)
2852 # Target Related
2853 AC_SUBST(aros_target_guitheme)
2854 AC_SUBST(aros_target_iconset)
2855 AC_SUBST(aros_target_bootloader)
2856 AC_SUBST(aros_target_arch)
2857 AC_SUBST(aros_target_family)
2858 AC_SUBST(aros_target_cpu)
2859 AC_SUBST(aros_target_cpu_mode)
2860 AC_SUBST(aros_target_variant)
2861 AC_SUBST(aros_target_suffix)
2862 AC_SUBST(aros_target_ar)
2863 AC_SUBST(aros_target_ranlib)
2864 AC_SUBST(aros_plain_nm)
2865 AC_SUBST(aros_plain_ar)
2866 AC_SUBST(aros_kernel_ar)
2867 AC_SUBST(aros_kernel_ranlib)
2868 AC_SUBST(orig_target_cc)
2869 AC_SUBST(aros_target_cc)
2870 AC_SUBST(aros_kernel_cc)
2871 AC_SUBST(orig_target_cxx)
2872 AC_SUBST(aros_target_cxx)
2873 AC_SUBST(aros_kernel_cxx)
2874 AC_SUBST(orig_target_cpp)
2875 AC_SUBST(aros_target_cpp)
2876 AC_SUBST(aros_kernel_cpp)
2877 AC_SUBST(orig_target_as)
2878 AC_SUBST(aros_target_as)
2879 AC_SUBST(aros_kernel_as)
2880 AC_SUBST(orig_target_ld)
2881 AC_SUBST(aros_target_ld)
2882 AC_SUBST(aros_kernel_ld)
2883 AC_SUBST(aros_target_cc_includes)
2884 AC_SUBST(aros_target_cc_path)
2885 AC_SUBST(aros_target_objdump)
2886 AC_SUBST(aros_target_objcopy)
2887 AC_SUBST(aros_target_strip)
2888 AC_SUBST(aros_target_nm)
2889 AC_SUBST(aros_kernel_rescomp)
2890 AC_SUBST(aros_shared_default)
2891 AC_SUBST(aros_shared_ld)
2892 AC_SUBST(aros_object_format)
2893 AC_SUBST(spec_obj_format)
2894 AC_SUBST(aros_compiler_libs)
2895 AC_SUBST(aros_arch_libs)
2897 AC_SUBST(aros_shared_cflags)
2898 AC_SUBST(aros_shared_aflags)
2899 AC_SUBST(aros_shared_ldflags)
2901 AC_SUBST(aros_config_sysroot)
2902 AC_SUBST(aros_warn_flags)
2903 AC_SUBST(aros_nowarn_flags)
2904 AC_SUBST(aros_config_cflags)
2905 AC_SUBST(aros_config_cxxflags)
2906 AC_SUBST(aros_config_aflags)
2907 AC_SUBST(aros_config_ldflags)
2909 AC_SUBST(aros_kernel_sysroot)
2910 AC_SUBST(aros_kernel_cflags)
2911 AC_SUBST(aros_kernel_includes)
2912 AC_SUBST(aros_kernel_objcflags)
2913 AC_SUBST(aros_kernel_ldflags)
2914 AC_SUBST(aros_debug_cflags)
2915 AC_SUBST(aros_debug_aflags)
2916 AC_SUBST(aros_debug_ldflags)
2917 AC_SUBST(aros_target_genmap)
2918 AC_SUBST(aros_target_strip_flags)
2919 AC_SUBST(aros_config_lto)
2920 AC_SUBST(aros_optimization_cflags)
2921 AC_SUBST(aros_isa_flags)
2923 AC_SUBST(crosstools_target)
2924 AC_SUBST(crosstools_cxx_target)
2926 # Hosted Graphics Related
2927 AC_SUBST(host_x_gfx)
2928 AC_SUBST(host_sdl_gfx)
2929 AC_SUBST(host_android_gfx)
2931 AC_SUBST(pci_hidd_target)
2933 AC_SUBST(aros_nominal_width)
2934 AC_SUBST(aros_nominal_height)
2935 AC_SUBST(aros_nominal_depth)
2936 AC_SUBST(DO_XSHM_SUPPORT)
2937 AC_SUBST(DO_VIDMODE_SUPPORT)
2939 AC_SUBST(aros_host_x11_cflags)
2940 AC_SUBST(aros_host_x11_ldflags)
2941 AC_SUBST(aros_host_sdl_cflags)
2942 AC_SUBST(aros_host_sdl_libs)
2944 # Native version related
2945 AC_SUBST(aros_serial_debug)
2946 AC_SUBST(PLATFORM_EXECSMP)
2947 AC_SUBST(ENABLE_EXECSMP)
2949 # Palm native version related
2950 AC_SUBST(aros_palm_debug_hack)
2952 # Unix/Hosted version related
2953 AC_SUBST(aros_nesting_supervisor)
2955 # MMU related
2956 AC_SUBST(aros_enable_mmu)
2958 # Apple iOS related
2959 AC_SUBST(aros_ios_platform)
2960 AC_SUBST(aros_ios_version)
2961 AC_SUBST(aros_ios_sdk)
2963 # ARM default GCC target related
2964 AC_SUBST(gcc_default_cpu)
2965 AC_SUBST(gcc_default_cpu_tune)
2966 AC_SUBST(gcc_default_fpu)
2967 AC_SUBST(gcc_default_float_abi)
2968 AC_SUBST(gcc_default_mode)
2970 # Android related
2971 AC_SUBST(android_tool)
2972 AC_SUBST(aros_android_level)
2973 AC_SUBST(aros_android_antapk)
2975 # DBUS related
2976 AC_SUBST(ENABLE_DBUS)
2977 AC_SUBST(DBUS_CFLAGS)
2978 AC_SUBST(DBUS_LIBFLAGS)
2979 AC_SUBST(KERNEL_DBUS_KOBJ)
2980 AC_SUBST(KERNEL_DBUS_INCLUDES)
2982 #X11 related
2983 AC_SUBST(ENABLE_X11)
2985 # Debug related
2986 AC_SUBST(aros_debug)
2987 AC_SUBST(aros_mungwall_debug)
2988 AC_SUBST(aros_stack_debug)
2989 AC_SUBST(aros_modules_debug)
2991 # Collect-aros stuff: "-ius" to ignore undefined symbols
2992 AC_SUBST(ignore_undefined_symbols)
2994 # C compiler related
2995 AC_SUBST(gcc_target_cpu)
2996 AC_SUBST(target_binutils_version)
2997 AC_SUBST(target_gcc_version)
2999 #ObjC compiler related
3000 AC_SUBST(objc_target)
3002 #Java related
3003 AC_SUBST(java_target)
3005 # USB3.0 code
3006 AC_SUBST(aros_usb30_code)
3008 dnl Prepare for output, make up all the generated patches
3009 case "$aros_flavour" in
3010 emulation)      aros_flavour_uc="AROS_FLAVOUR_EMULATION"
3011                 aros_flavour="emulation" ;;
3012 emulcompat)     aros_flavour_uc="(AROS_FLAVOUR_EMULATION|AROS_FLAVOUR_BINCOMPAT)"
3013                 aros_flavour="emulation" ;;
3014 standalone)     aros_flavour_uc="AROS_FLAVOUR_STANDALONE"
3015                 aros_flavour="standalone";;
3016 standcompat)    aros_flavour_uc="(AROS_FLAVOUR_STANDALONE|AROS_FLAVOUR_BINCOMPAT)"
3017                 aros_flavour="standalone";;
3018 native)         aros_flavour_uc="AROS_FLAVOUR_NATIVE"
3019                 aros_flavour="native" ;;
3020 nativecompat)   aros_flavour_uc="(AROS_FLAVOUR_NATIVE|AROS_FLAVOUR_BINCOMPAT)"
3021                 aros_flavour="native" ;;
3022 linklib)        aros_flavour_uc="AROS_FLAVOUR_LINKLIB"
3023                 aros_flavour="linklib" ;;
3024 palmnative)     aros_flavour_uc="(AROS_FLAVOUR_STANDALONE|AROS_FLAVOUR_EMULATION)"
3025                 aros_flavour="palmnative" ;;
3026 mac68knative)   aros_flavour_uc="(AROS_FLAVOUR_STANDALONE|AROS_FLAVOUR_EMULATION)"
3027                 aros_flavour="mac68knative" ;;
3028 ppcnative)      aros_flavour_uc="(AROS_FLAVOUR_STANDALONE|AROS_FLAVOUR_BINCOMPAT)"
3029                 aros_flavour="ppcnative" ;;
3030 esac
3032 if test ! -d ${aros_inc_dir} ; then
3033     ${MKDIR} ${aros_inc_dir}
3035 if test ! -d ${aros_geninc_dir} ; then
3036     ${MKDIR} ${aros_geninc_dir}
3038 if test ! -d ${aros_hostcfg_dir} ; then
3039     ${MKDIR} ${aros_hostcfg_dir}
3041 if test ! -d ${aros_targetcfg_dir} ; then
3042     ${MKDIR} ${aros_targetcfg_dir}
3044 if test ! -d ${aros_tools_dir} ; then
3045     ${MKDIR} ${aros_tools_dir}
3047 if test ! -d ${aros_scripts_dir} ; then
3048     ${MKDIR} ${aros_scripts_dir}
3051 AC_CONFIG_HEADERS(${aros_geninc_dir}/host-conf.h:config/host-conf.h.in)
3053 # Generic build tools (metamake, etc)
3054 AC_CONFIG_COMMANDS([genmf-executable-support],
3055     [
3056         chmod a+x ${AROS_CROSSTOOLSDIR}/${aros_target_cpu}-aros-uname
3057         chmod a+x ${aros_tools_dir}/genmf.py
3058     ],
3059     [
3060         AROS_CROSSTOOLSDIR=${AROS_CROSSTOOLSDIR}
3061         aros_tools_dir=${aros_tools_dir}
3062     ]
3064 AC_CONFIG_FILES(
3065     Makefile
3066     config/make.cfg
3067     ${aros_inc_dir}/config.h:config/config.h.in
3068     ${aros_geninc_dir}/config.h:config/config.h.in
3069     ${aros_hostcfg_dir}/host.cfg:config/host.cfg.in
3070     ${aros_targetcfg_dir}/target.cfg:config/target.cfg.in
3071     ${aros_targetcfg_dir}/build.cfg:config/build.cfg.in
3072     mmake.config
3073     compiler/include/geninc.cfg:compiler/include/geninc.cfg.in
3074     ${aros_targetcfg_dir}/make.defaults:config/make.defaults.in
3075     ${aros_tools_dir}/genmf.py:tools/genmf/genmf.py
3076     ${AROS_CROSSTOOLSDIR}/${aros_target_cpu}-aros-uname:scripts/uname.in
3077     tools/collect-aros/env.h
3080 # Binutils
3081 AC_CONFIG_COMMANDS([binutils-support],
3082     [
3083         prefix=${PWD}/${aros_tools_dir}/${aros_target_cpu}-${aros_target_arch}${aros_target_suffix}
3084         mkdir -p $prefix
3085         prefix2=${PWD}/${aros_tools_dir}/${aros_target_cpu}-${aros_target_arch}${aros_target_suffix}-aros
3087         chmod a+x ${prefix2}-ld
3089         ln -sf $orig_target_as$aros_host_exe_suffix      ${prefix2}-as$aros_host_exe_suffix
3090         ln -sf $orig_target_nm$aros_host_exe_suffix      ${prefix2}-nm$aros_host_exe_suffix
3091         ln -sf $orig_target_ar$aros_host_exe_suffix      ${prefix2}-ar$aros_host_exe_suffix
3092         ln -sf $orig_target_ranlib$aros_host_exe_suffix  ${prefix2}-ranlib$aros_host_exe_suffix
3093         ln -sf $orig_target_objcopy$aros_host_exe_suffix ${prefix2}-objcopy$aros_host_exe_suffix
3094         ln -sf $orig_target_objdump$aros_host_exe_suffix ${prefix2}-objdump$aros_host_exe_suffix
3095         ln -sf $orig_target_strip$aros_host_exe_suffix   ${prefix2}-strip$aros_host_exe_suffix
3096     ],
3097     [
3098         aros_host_exe_suffix=${aros_host_exe_suffix}
3099         aros_tools_dir=${aros_tools_dir}
3100         aros_target_cpu=${aros_target_cpu}
3101         aros_target_arch=${aros_target_arch}
3102         aros_target_suffix=${aros_target_suffix}
3103         orig_target_nm=${orig_target_nm}
3104         orig_target_as=${orig_target_as}
3105         orig_target_ar=${orig_target_ar}
3106         orig_target_ranlib=${orig_target_ranlib}
3107         orig_target_objdump=${orig_target_objdump}
3108         orig_target_objcopy=${orig_target_objcopy}
3109         orig_target_strip=${orig_target_strip}
3110         aros_kernel_ld=${aros_kernel_ld}
3111     ]
3113 if test "${use_ld_wrapper}" = "yes"; then
3114     AC_CONFIG_FILES(
3115         ${aros_tools_dir}/${aros_target_cpu}-${aros_target_arch}${aros_target_suffix}-aros-${aros_ld}:scripts/aros-ld.in
3116     )
3118 # Bare Elf support script and spec
3119 if test "${use_kernel_cc_wrapper}" = "yes"; then
3120     AC_CONFIG_COMMANDS([elf-compiler-support],
3121         [
3122             prefix=${PWD}/${aros_tools_dir}/${aros_target_cpu}-${aros_target_arch}${aros_target_suffix}
3123             mkdir -p $prefix
3124             prefix2=${PWD}/${aros_tools_dir}/${aros_target_cpu}-${aros_target_arch}${aros_target_suffix}-elf
3126             chmod a+x ${prefix2}-gcc
3128             ln -sf $aros_kernel_ld$aros_host_exe_suffix         ${prefix2}-ld$aros_host_exe_suffix
3129         ],
3130         [
3131             aros_host_exe_suffix=${aros_host_exe_suffix}
3132             aros_tools_dir=${aros_tools_dir}
3133             aros_target_cpu=${aros_target_cpu}
3134             aros_target_arch=${aros_target_arch}
3135             aros_target_suffix=${aros_target_suffix}
3136             aros_kernel_ld=${aros_kernel_ld}
3137         ]
3138     )
3139     AC_CONFIG_FILES(
3140         ${aros_targetcfg_dir}/elf-specs:${elf_specs_in}
3141         ${aros_tools_dir}/${aros_target_cpu}-${aros_target_arch}${aros_target_suffix}-elf-gcc:scripts/elf-gcc.in
3142     )
3145 # Host compiler support scripts and spec
3146 if test "${aros_target_toolchain}" = "no"; then
3147     AC_CONFIG_COMMANDS([host-compiler-wrapper-support],
3148         [
3149             prefix=${PWD}/${aros_tools_dir}/${aros_target_cpu}-${aros_target_arch}${aros_target_suffix}
3150             mkdir -p $prefix
3151             prefix2=${PWD}/${aros_tools_dir}/${aros_target_cpu}-${aros_target_arch}${aros_target_suffix}-aros
3153             chmod a+x ${prefix2}-${toolchain_c_compiler} ${prefix2}-${toolchain_cxx_compiler} ${prefix2}-${toolchain_cpp_preprocessor}
3154         ],
3155         [
3156             aros_host_exe_suffix=${aros_host_exe_suffix}
3157             aros_tools_dir=${aros_tools_dir}
3158             aros_target_cpu=${aros_target_cpu}
3159             aros_target_arch=${aros_target_arch}
3160             aros_target_suffix=${aros_target_suffix}
3161         ]
3162     )
3163     AC_CONFIG_FILES(
3164         ${aros_targetcfg_dir}/specs:config/specs.in
3165         ${aros_tools_dir}/${aros_target_cpu}-${aros_target_arch}${aros_target_suffix}-aros-${toolchain_cpp_preprocessor}:scripts/aros-${toolchain_cpp_preprocessor}.in
3166         ${aros_tools_dir}/${aros_target_cpu}-${aros_target_arch}${aros_target_suffix}-aros-${toolchain_c_compiler}:scripts/aros-${toolchain_c_compiler}.in
3167         ${aros_tools_dir}/${aros_target_cpu}-${aros_target_arch}${aros_target_suffix}-aros-${toolchain_cxx_compiler}:scripts/aros-${toolchain_cxx_compiler}.in
3168     )
3171 # Android support
3172 if test "$aros_target_variant" == "android"; then
3173     AC_CONFIG_FILES(${aros_gendir}/arch/all-android/bootstrap/app/default.properties:arch/all-android/bootstrap/app/default.properties.in)
3176 # cmake helper
3177 AC_CONFIG_FILES(${aros_targetcfg_dir}/conf.cmake:config/conf.cmake.in)
3179 AC_OUTPUT
3181 dnl This is in order to not define SHARED_CFLAGS sometimes
3182 dnl We don't always do aros_shared_ar, aros_shared_cflags
3184 #XXX compatability...
3185 aros_shared_ar="$aros_shared_ld $aros_shared_ldflags -o"
3187 if test -n "$aros_shared_cflags" ; then
3188     echo "SHARED_CFLAGS := $aros_shared_cflags" >> ${aros_hostcfg_dir}/host.cfg
3189     echo "SHARED_AR := $aros_shared_ar" >> ${aros_hostcfg_dir}/host.cfg