configure.ac 66 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043
  1. # -*- autoconf -*-
  2. # Process this file with autoconf to produce a configure script.
  3. # Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2009,2010 Free Software Foundation, Inc.
  4. #
  5. # This configure.ac is free software; the author
  6. # gives unlimited permission to copy and/or distribute it,
  7. # with or without modifications, as long as this notice is preserved.
  8. #
  9. # This program is distributed in the hope that it will be useful,
  10. # but WITHOUT ANY WARRANTY, to the extent permitted by law; without
  11. # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  12. # PARTICULAR PURPOSE.
  13. dnl This configure script is complicated, because GRUB needs to deal
  14. dnl with three potentially different types:
  15. dnl
  16. dnl build -- the environment for building GRUB
  17. dnl host -- the environment for running utilities
  18. dnl target -- the environment for running GRUB
  19. dnl
  20. dnl In addition, GRUB needs to deal with a platform specification
  21. dnl which specifies the system running GRUB, such as firmware.
  22. dnl This is necessary because the target type in autoconf does not
  23. dnl describe such a system very well.
  24. dnl
  25. dnl The current strategy is to use variables with no prefix (such as
  26. dnl CC, CFLAGS, etc.) for the host type, variables with prefix "BUILD_"
  27. dnl (such as BUILD_CC, BUILD_CFLAGS, etc.) for the build type and variables
  28. dnl with the prefix "TARGET_" (such as TARGET_CC, TARGET_CFLAGS, etc.) are
  29. dnl used for the target type. See INSTALL for full list of variables.
  30. AC_INIT([GRUB],[2.02~beta3],[bug-grub@gnu.org])
  31. AC_CONFIG_AUX_DIR([build-aux])
  32. # We don't want -g -O2 by default in CFLAGS
  33. : ${CFLAGS=""}
  34. # Checks for build, host and target systems.
  35. AC_CANONICAL_BUILD
  36. AC_CANONICAL_HOST
  37. save_program_prefix="${program_prefix}"
  38. AC_CANONICAL_TARGET
  39. program_prefix="${save_program_prefix}"
  40. AM_INIT_AUTOMAKE([1.10.1])
  41. AC_PREREQ(2.60)
  42. AC_CONFIG_SRCDIR([include/grub/dl.h])
  43. AC_CONFIG_HEADER([config-util.h])
  44. # Program name transformations
  45. AC_ARG_PROGRAM
  46. grub_TRANSFORM([grub-bios-setup])
  47. grub_TRANSFORM([grub-editenv])
  48. grub_TRANSFORM([grub-install])
  49. grub_TRANSFORM([grub-mkconfig])
  50. grub_TRANSFORM([grub-mkfont])
  51. grub_TRANSFORM([grub-mkimage])
  52. grub_TRANSFORM([grub-glue-efi])
  53. grub_TRANSFORM([grub-mklayout])
  54. grub_TRANSFORM([grub-mkpasswd-pbkdf2])
  55. grub_TRANSFORM([grub-mkrelpath])
  56. grub_TRANSFORM([grub-mkrescue])
  57. grub_TRANSFORM([grub-probe])
  58. grub_TRANSFORM([grub-reboot])
  59. grub_TRANSFORM([grub-script-check])
  60. grub_TRANSFORM([grub-set-default])
  61. grub_TRANSFORM([grub-sparc64-setup])
  62. grub_TRANSFORM([grub-render-label])
  63. grub_TRANSFORM([grub-file])
  64. # Optimization flag. Allow user to override.
  65. if test "x$TARGET_CFLAGS" = x; then
  66. TARGET_CFLAGS="$TARGET_CFLAGS -Os"
  67. fi
  68. # Default HOST_CPPFLAGS
  69. HOST_CPPFLAGS="$HOST_CPPFLAGS -Wall -W"
  70. HOST_CPPFLAGS="$HOST_CPPFLAGS -DGRUB_UTIL=1"
  71. TARGET_CPPFLAGS="$TARGET_CPPFLAGS -Wall -W"
  72. case "$target_cpu" in
  73. i[[3456]]86) target_cpu=i386 ;;
  74. amd64) target_cpu=x86_64 ;;
  75. sparc) target_cpu=sparc64 ;;
  76. mipsel|mips64el)
  77. target_cpu=mipsel
  78. machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_CPU_MIPSEL=1"
  79. ;;
  80. mips|mips64)
  81. target_cpu=mips
  82. machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_CPU_MIPS=1"
  83. ;;
  84. arm*)
  85. target_cpu=arm
  86. ;;
  87. aarch64*)
  88. target_cpu=arm64
  89. ;;
  90. esac
  91. # Specify the platform (such as firmware).
  92. AC_ARG_WITH([platform],
  93. AS_HELP_STRING([--with-platform=PLATFORM],
  94. [select the host platform [[guessed]]]))
  95. # Guess the platform if not specified.
  96. if test "x$with_platform" = x; then
  97. case "$target_cpu"-"$target_vendor" in
  98. i386-apple) platform=efi ;;
  99. i386-*) platform=pc ;;
  100. x86_64-apple) platform=efi ;;
  101. x86_64-*) platform=pc ;;
  102. powerpc-*) platform=ieee1275 ;;
  103. powerpc64-*) platform=ieee1275 ;;
  104. powerpc64le-*) platform=ieee1275 ;;
  105. sparc64-*) platform=ieee1275 ;;
  106. mipsel-*) platform=loongson ;;
  107. mips-*) platform=arc ;;
  108. ia64-*) platform=efi ;;
  109. arm-*) platform=uboot ;;
  110. arm64-*) platform=efi ;;
  111. *)
  112. AC_MSG_WARN([unsupported CPU: "$target_cpu" - only building utilities])
  113. platform=none
  114. ;;
  115. esac
  116. else
  117. platform="$with_platform"
  118. fi
  119. case "$target_cpu"-"$platform" in
  120. x86_64-efi) ;;
  121. x86_64-emu) ;;
  122. x86_64-xen) ;;
  123. x86_64-none) ;;
  124. x86_64-*) target_cpu=i386 ;;
  125. powerpc64-ieee1275) target_cpu=powerpc ;;
  126. powerpc64le-ieee1275) target_cpu=powerpc ;;
  127. esac
  128. # Check if the platform is supported, make final adjustments.
  129. case "$target_cpu"-"$platform" in
  130. i386-efi) ;;
  131. x86_64-efi) ;;
  132. i386-xen) ;;
  133. x86_64-xen) ;;
  134. i386-pc) ;;
  135. i386-multiboot) ;;
  136. i386-coreboot) ;;
  137. i386-linuxbios) platform=coreboot ;;
  138. i386-ieee1275) ;;
  139. i386-qemu) ;;
  140. powerpc-ieee1275) ;;
  141. sparc64-ieee1275) ;;
  142. ia64-efi) ;;
  143. mips-qemu_mips) ;;
  144. mips-qemu-mips) platform=qemu_mips;;
  145. mips-arc) ;;
  146. mipsel-arc) ;;
  147. mipsel-qemu_mips) ;;
  148. mipsel-qemu-mips) platform=qemu_mips;;
  149. mipsel-yeeloong) platform=loongson ;;
  150. mipsel-fuloong) platform=loongson ;;
  151. mipsel-loongson) ;;
  152. arm-uboot) ;;
  153. arm-efi) ;;
  154. arm64-efi) ;;
  155. *-emu) ;;
  156. *-none) ;;
  157. *) AC_MSG_ERROR([platform "$platform" is not supported for target CPU "$target_cpu"]) ;;
  158. esac
  159. if test x$platform != xemu ; then
  160. case "$target_cpu" in
  161. i386 | powerpc) target_m32=1 ;;
  162. x86_64 | sparc64) target_m64=1 ;;
  163. esac
  164. fi
  165. if test x"$target_cpu-$platform" = xsparc64-emu ; then
  166. target_m64=1
  167. fi
  168. case "$target_os" in
  169. windows* | mingw32*) target_os=cygwin ;;
  170. esac
  171. # This normalizes the names, and creates a new variable ("host_kernel")
  172. # while at it, since the mapping is not always 1:1 (e.g. different OSes
  173. # using the same kernel type).
  174. case "$host_os" in
  175. gnu*) host_kernel=hurd ;;
  176. linux*) host_kernel=linux ;;
  177. freebsd* | kfreebsd*-gnu) host_kernel=kfreebsd ;;
  178. netbsd*) host_kernel=netbsd ;;
  179. solaris*) host_kernel=illumos ;;
  180. darwin*) host_kernel=xnu ;;
  181. cygwin | windows* | mingw32*) host_kernel=windows ;;
  182. esac
  183. case "$host_os" in
  184. cygwin | windows* | mingw32*) have_exec=n ;;
  185. aros*) have_exec=n ;;
  186. *) have_exec=y;;
  187. esac
  188. case "$platform" in
  189. coreboot) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_COREBOOT=1" ;;
  190. multiboot) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MULTIBOOT=1" ;;
  191. efi) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_EFI=1" ;;
  192. xen) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_XEN=1" ;;
  193. ieee1275) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_IEEE1275=1" ;;
  194. uboot) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_UBOOT=1" ;;
  195. qemu) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_QEMU=1" ;;
  196. pc) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_PCBIOS=1" ;;
  197. emu) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_EMU=1" ;;
  198. loongson) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MIPS_LOONGSON=1" ;;
  199. qemu_mips) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MIPS_QEMU_MIPS=1" ;;
  200. arc) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_ARC=1" ;;
  201. esac
  202. if test x${target_cpu} = xmipsel ; then
  203. machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE=`echo mips_$platform | sed y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,`"
  204. else
  205. machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE=`echo ${target_cpu}_$platform | sed y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,`"
  206. fi
  207. case "${target_cpu}-$platform" in
  208. mips-arc)
  209. TARGET_LINK_ADDR=0x88200000
  210. TARGET_DECOMPRESSOR_LINK_ADDR=0x88100000
  211. ;;
  212. mipsel-arc)
  213. TARGET_LINK_ADDR=0x80700000
  214. TARGET_DECOMPRESSOR_LINK_ADDR=0x80600000
  215. ;;
  216. mips*-qemu_mips | mips*-loongson)
  217. TARGET_DECOMPRESSOR_LINK_ADDR=0x80100000
  218. ;;
  219. esac
  220. AC_SUBST(TARGET_LINK_ADDR)
  221. AC_SUBST(TARGET_DECOMPRESSOR_LINK_ADDR)
  222. TARGET_CPPFLAGS="$TARGET_CPPFLAGS $machine_CPPFLAGS"
  223. AC_SUBST(host_cpu)
  224. AC_SUBST(host_os)
  225. AC_SUBST(host_kernel)
  226. AC_SUBST(target_cpu)
  227. AC_SUBST(platform)
  228. # Define default variables
  229. have_with_bootdir=n
  230. AC_ARG_WITH([bootdir],
  231. AS_HELP_STRING([--with-bootdir=DIR],
  232. [set the name of /boot directory [[guessed]]]),
  233. [have_with_bootdir=y],
  234. [have_with_bootdir=n])
  235. if test x$have_with_bootdir = xy; then
  236. bootdirname="$with_bootdir"
  237. else
  238. case "$host_os" in
  239. netbsd* | openbsd*)
  240. # Because /boot is used for the boot block in NetBSD and OpenBSD,
  241. bootdirname='' ;;
  242. *) bootdirname='boot' ;;
  243. esac
  244. fi
  245. AC_SUBST(bootdirname)
  246. AC_DEFINE_UNQUOTED(GRUB_BOOT_DIR_NAME, "$bootdirname",
  247. [Default boot directory name]")
  248. AC_ARG_WITH([grubdir],
  249. AS_HELP_STRING([--with-grubdir=DIR],
  250. [set the name of grub directory [[guessed]]]),
  251. [grubdirname="$with_grubdir"],
  252. [grubdirname="$PACKAGE"])
  253. AC_SUBST(grubdirname)
  254. AC_DEFINE_UNQUOTED(GRUB_DIR_NAME, "$grubdirname",
  255. [Default grub directory name])
  256. #
  257. # Checks for build programs.
  258. #
  259. # Although cmp is listed in the GNU Coding Standards as a command which
  260. # can used directly, OpenBSD lacks cmp in the default installation.
  261. AC_CHECK_PROGS([CMP], [cmp])
  262. if test "x$CMP" = x; then
  263. AC_MSG_ERROR([cmp is not found])
  264. fi
  265. AC_CHECK_PROGS([YACC], [bison])
  266. if test "x$YACC" = x; then
  267. AC_MSG_ERROR([bison is not found])
  268. fi
  269. AC_PROG_RANLIB
  270. AC_PROG_INSTALL
  271. AC_PROG_AWK
  272. AC_PROG_LEX
  273. AC_PROG_YACC
  274. AC_PROG_MAKE_SET
  275. AC_PROG_MKDIR_P
  276. AC_PROG_LN_S
  277. if test "x$LEX" = "x:"; then
  278. AC_MSG_ERROR([flex is not found])
  279. else
  280. version=`$LEX --version | $AWK '{ split($2,x,"."); print x[[1]]*10000+x[[2]]*100+x[[3]]; }'`
  281. if test -n "$version" -a "$version" -ge 20535; then
  282. :
  283. else
  284. AC_MSG_ERROR([flex is too old. GRUB requires 2.5.35 or above])
  285. fi
  286. fi
  287. # These are not a "must".
  288. AC_PATH_PROGS(MAKEINFO, makeinfo true)
  289. #
  290. # Checks for host programs.
  291. #
  292. AC_PROG_CC
  293. gl_EARLY
  294. AC_PROG_CXX
  295. AM_PROG_CC_C_O
  296. AM_PROG_AS
  297. # Must be GCC.
  298. test "x$GCC" = xyes || AC_MSG_ERROR([GCC is required])
  299. AC_CHECK_PROG(HAVE_CXX, $CXX, yes, no)
  300. AC_GNU_SOURCE
  301. AM_GNU_GETTEXT([external])
  302. AC_SYS_LARGEFILE
  303. # Identify characteristics of the host architecture.
  304. unset ac_cv_c_bigendian
  305. if test x"$target_cpu-$platform" = xsparc64-emu ; then
  306. CFLAGS="$CFLAGS -m64"
  307. HOST_CFLAGS="$HOST_CFLAGS -m64"
  308. fi
  309. CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=64"
  310. HOST_CPPFLAGS="$HOST_CPPFLAGS -D_FILE_OFFSET_BITS=64"
  311. AC_C_BIGENDIAN
  312. AC_CHECK_SIZEOF(void *)
  313. AC_CHECK_SIZEOF(long)
  314. case "$host_os" in
  315. cygwin | windows* | mingw32*)
  316. HOST_CPPFLAGS="$HOST_CPPFLAGS -DUNICODE=1 -D_WIN32_WINNT=0x0500"
  317. CPPFLAGS="$CPPFLAGS -DUNICODE=1 -D_WIN32_WINNT=0x0500"
  318. AC_CHECK_SIZEOF(TCHAR,,[#include <windows.h>])
  319. ;;
  320. esac
  321. case "$host_os" in
  322. cygwin | windows* | mingw32* | aros*)
  323. ;;
  324. *)
  325. AC_CHECK_SIZEOF(off_t)
  326. test x"$ac_cv_sizeof_off_t" = x8 || AC_MSG_ERROR([Large file support is required]);;
  327. esac
  328. if test x$USE_NLS = xno; then
  329. HOST_CFLAGS="$HOST_CFLAGS -fno-builtin-gettext"
  330. fi
  331. if test "x$cross_compiling" = xyes; then
  332. AC_MSG_WARN([cannot generate manual pages while cross compiling])
  333. else
  334. AC_PATH_PROG(HELP2MAN, help2man)
  335. fi
  336. # Check for functions and headers.
  337. AC_CHECK_FUNCS(posix_memalign memalign getextmntent)
  338. AC_CHECK_HEADERS(sys/param.h sys/mount.h sys/mnttab.h limits.h)
  339. AC_HEADER_MAJOR
  340. AC_CHECK_MEMBERS([struct statfs.f_fstypename],,,[$ac_includes_default
  341. #include <sys/param.h>
  342. #include <sys/mount.h>])
  343. AC_CHECK_MEMBERS([struct statfs.f_mntfromname],,,[$ac_includes_default
  344. #include <sys/param.h>
  345. #include <sys/mount.h>])
  346. # For opendisk() and getrawpartition() on NetBSD.
  347. # Used in util/deviceiter.c and in util/hostdisk.c.
  348. AC_CHECK_HEADER([util.h], [
  349. AC_CHECK_LIB([util], [opendisk], [
  350. LIBUTIL="-lutil"
  351. AC_DEFINE(HAVE_OPENDISK, 1, [Define if opendisk() in -lutil can be used])
  352. ])
  353. AC_CHECK_LIB([util], [getrawpartition], [
  354. LIBUTIL="-lutil"
  355. AC_DEFINE(HAVE_GETRAWPARTITION, 1, [Define if getrawpartition() in -lutil can be used])
  356. ])
  357. ])
  358. AC_SUBST([LIBUTIL])
  359. AC_CACHE_CHECK([whether -Wtrampolines work], [grub_cv_host_cc_wtrampolines], [
  360. SAVED_CFLAGS="$CFLAGS"
  361. CFLAGS="$HOST_CFLAGS -Wtrampolines -Werror"
  362. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>
  363. int va_arg_func (int fixed, va_list args);]], [[]])],
  364. [grub_cv_host_cc_wtrampolines=yes],
  365. [grub_cv_host_cc_wtrampolines=no])
  366. CFLAGS="$SAVED_CFLAGS"
  367. ])
  368. if test x"$grub_host_cv_cc_wtrampolines" = xyes ; then
  369. HOST_CFLAGS="$HOST_CFLAGS -Wtrampolines"
  370. fi
  371. #
  372. # Check for host and build compilers.
  373. #
  374. HOST_CC=$CC
  375. AC_CHECK_PROGS(BUILD_CC, [gcc egcs cc])
  376. test -z "$BUILD_CC" && AC_MSG_ERROR([none of gcc, egcs and cc is found. set BUILD_CC manually.])
  377. BUILD_CPP="$BUILD_CC -E"
  378. case "$build_os" in
  379. haiku*) BUILD_LIBM= ;;
  380. *) BUILD_LIBM=-lm ;;
  381. esac
  382. dnl FIXME proper test seems to require too deep dive into Autoconf internals.
  383. dnl For now just list known platforms that we support.
  384. case "$build_os" in
  385. cygwin*|mingw32*|mingw64*) BUILD_EXEEXT=.exe ;;
  386. *) BUILD_EXEEXT= ;;
  387. esac
  388. AC_SUBST(BUILD_EXEEXT)
  389. # For gnulib.
  390. gl_INIT
  391. WARN_FLAGS="-Wall -W -Wshadow -Wpointer-arith -Wundef -Wchar-subscripts -Wcomment -Wdeprecated-declarations -Wdisabled-optimization -Wdiv-by-zero -Wfloat-equal -Wformat-extra-args -Wformat-security -Wformat-y2k -Wimplicit -Wimplicit-function-declaration -Wimplicit-int -Wmain -Wmissing-braces -Wmissing-format-attribute -Wmultichar -Wparentheses -Wreturn-type -Wsequence-point -Wshadow -Wsign-compare -Wswitch -Wtrigraphs -Wunknown-pragmas -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-value -Wunused-variable -Wwrite-strings -Wnested-externs -Wstrict-prototypes"
  392. EXTRA_WARN_FLAGS="-Wextra -Wattributes -Wendif-labels -Winit-self -Wint-to-pointer-cast -Winvalid-pch -Wmissing-field-initializers -Wnonnull -Woverflow -Wvla -Wpointer-to-int-cast -Wstrict-aliasing -Wvariadic-macros -Wvolatile-register-var -Wpointer-sign -Wmissing-include-dirs -Wmissing-prototypes -Wmissing-declarations -Wformat=2"
  393. HOST_CFLAGS="$HOST_CFLAGS $WARN_FLAGS -Wcast-align"
  394. AC_CACHE_CHECK([which extra warnings work], [grub_cv_cc_w_extra_flags], [
  395. SAVED_CFLAGS="$CFLAGS"
  396. grub_cv_cc_w_extra_flags=
  397. for x in $EXTRA_WARN_FLAGS; do
  398. CFLAGS="$HOST_CFLAGS $x -Werror"
  399. AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [flag=1], [flag=0])
  400. if test x$flag = x1 ; then
  401. grub_cv_cc_w_extra_flags="$grub_cv_cc_w_extra_flags $x"
  402. fi
  403. done
  404. CFLAGS="$SAVED_CFLAGS"
  405. ])
  406. HOST_CFLAGS="$HOST_CFLAGS $grub_cv_cc_w_extra_flags"
  407. #
  408. # Check for target programs.
  409. #
  410. # Find tools for the target.
  411. if test "x$target_alias" != x && test "x$host_alias" != "x$target_alias"; then
  412. tmp_ac_tool_prefix="$ac_tool_prefix"
  413. ac_tool_prefix=$target_alias-
  414. AC_CHECK_TOOLS(TARGET_CC, [gcc egcs cc],
  415. [AC_MSG_ERROR([none of gcc, egcs and cc is found. set TARGET_CC manually.])])
  416. AC_CHECK_TOOL(TARGET_OBJCOPY, objcopy)
  417. AC_CHECK_TOOL(TARGET_STRIP, strip)
  418. AC_CHECK_TOOL(TARGET_NM, nm)
  419. AC_CHECK_TOOL(TARGET_RANLIB, ranlib)
  420. ac_tool_prefix="$tmp_ac_tool_prefix"
  421. else
  422. if test "x$TARGET_CC" = x; then
  423. TARGET_CC=$CC
  424. fi
  425. AC_CHECK_TOOL(TARGET_OBJCOPY, objcopy)
  426. AC_CHECK_TOOL(TARGET_STRIP, strip)
  427. AC_CHECK_TOOL(TARGET_NM, nm)
  428. AC_CHECK_TOOL(TARGET_RANLIB, ranlib)
  429. fi
  430. AC_SUBST(HOST_CC)
  431. AC_SUBST(BUILD_CC)
  432. AC_SUBST(BUILD_CFLAGS)
  433. AC_SUBST(BUILD_CPPFLAGS)
  434. AC_SUBST(BUILD_LDFLAGS)
  435. AC_SUBST(TARGET_CC)
  436. AC_SUBST(TARGET_NM)
  437. AC_SUBST(TARGET_RANLIB)
  438. AC_SUBST(TARGET_STRIP)
  439. AC_SUBST(TARGET_OBJCOPY)
  440. # Test the C compiler for the target environment.
  441. tmp_CC="$CC"
  442. tmp_CFLAGS="$CFLAGS"
  443. tmp_LDFLAGS="$LDFLAGS"
  444. tmp_CPPFLAGS="$CPPFLAGS"
  445. tmp_LIBS="$LIBS"
  446. CC="$TARGET_CC"
  447. CFLAGS="$TARGET_CFLAGS"
  448. CPPFLAGS="$TARGET_CPPFLAGS"
  449. LDFLAGS="$TARGET_LDFLAGS"
  450. LIBS=""
  451. # debug flags.
  452. TARGET_CFLAGS="$TARGET_CFLAGS $WARN_FLAGS -g -Wredundant-decls -Wmissing-prototypes -Wmissing-declarations"
  453. TARGET_CCASFLAGS="$TARGET_CCASFLAGS -g"
  454. if test "x$target_cpu" != xi386 && test "x$target_cpu" != xx86_64; then
  455. TARGET_CFLAGS="$TARGET_CFLAGS -Wcast-align"
  456. fi
  457. TARGET_CC_VERSION="$(LC_ALL=C $TARGET_CC --version | head -n1)"
  458. AC_CACHE_CHECK([which extra warnings work], [grub_cv_target_cc_w_extra_flags], [
  459. LDFLAGS="$TARGET_LDFLAGS -nostdlib -static"
  460. grub_cv_target_cc_w_extra_flags=
  461. for x in $EXTRA_WARN_FLAGS; do
  462. CFLAGS="$TARGET_CFLAGS $x -Werror"
  463. AC_LINK_IFELSE([AC_LANG_PROGRAM([[
  464. asm (".globl start; start:");
  465. void __main (void);
  466. void __main (void) {}
  467. int main (void);
  468. ]], [[]])], [flag=1], [flag=0])
  469. if test x$flag = x1 ; then
  470. grub_cv_target_cc_w_extra_flags="$grub_cv_target_cc_w_extra_flags $x"
  471. fi
  472. done
  473. ])
  474. TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_w_extra_flags"
  475. AC_CACHE_CHECK([if compiling with clang], [grub_cv_cc_target_clang],
  476. [
  477. CFLAGS="$TARGET_CFLAGS"
  478. AC_COMPILE_IFELSE(
  479. [AC_LANG_PROGRAM([], [[
  480. #ifdef __clang__
  481. #error "is clang"
  482. #endif
  483. ]])],
  484. [grub_cv_cc_target_clang=no], [grub_cv_cc_target_clang=yes])])
  485. if test x$target_cpu = xpowerpc -o x$target_cpu = xmips; then
  486. AC_CACHE_CHECK([for options to get big-endian compilation], grub_cv_target_cc_big_endian, [
  487. grub_cv_target_cc_big_endian=no
  488. for cand in "-target $target_cpu -Wl,-EB" "-target $target_cpu" \
  489. "-target $target_cpu-linux-gnu -Wl,-EB" "-target $target_cpu-linux-gnu" \
  490. "-EB" "-mbig-endian"; do
  491. if test x"$grub_cv_target_cc_big_endian" != xno ; then
  492. break
  493. fi
  494. CFLAGS="$TARGET_CFLAGS $cand -Werror"
  495. AC_LINK_IFELSE([AC_LANG_PROGRAM([[
  496. #if defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && (__ORDER_BIG_ENDIAN__ != __BYTE_ORDER__)
  497. #error still little endian
  498. #endif
  499. asm (".globl start; start:");
  500. asm (".globl _start; _start:");
  501. asm (".globl __start; __start:");
  502. void __main (void);
  503. void __main (void) {}
  504. int main (void);
  505. ]], [[]])],
  506. [grub_cv_target_cc_big_endian="$cand"], [])
  507. done
  508. ])
  509. if test x"$grub_cv_target_cc_big_endian" = xno ; then
  510. AC_MSG_ERROR([could not force big-endian])
  511. fi
  512. skip_linkflags="$(echo "$grub_cv_target_cc_big_endian"|sed 's@-Wl,-EB@@')"
  513. TARGET_CFLAGS="$TARGET_CFLAGS $skip_linkflags"
  514. TARGET_CPPFLAGS="$TARGET_CPPFLAGS $skip_linkflags"
  515. TARGET_CCASFLAGS="$TARGET_CCASFLAGS $skip_linkflags"
  516. TARGET_LDFLAGS="$TARGET_LDFLAGS $grub_cv_target_cc_big_endian"
  517. elif test x$target_cpu = xmipsel; then
  518. AC_CACHE_CHECK([for options to get little-endian compilation], grub_cv_target_cc_little_endian, [
  519. grub_cv_target_cc_little_endian=no
  520. for cand in "-target $target_cpu -Wl,-EL" "-target $target_cpu" \
  521. "-target $target_cpu-linux-gnu -Wl,-EL" "-target $target_cpu-linux-gnu" \
  522. "-EL"; do
  523. if test x"$grub_cv_target_cc_little_endian" != xno ; then
  524. break
  525. fi
  526. CFLAGS="$TARGET_CFLAGS $cand -Werror"
  527. AC_LINK_IFELSE([AC_LANG_PROGRAM([[
  528. #if defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && (__ORDER_BIG_ENDIAN__ == __BYTE_ORDER__)
  529. #error still big endian
  530. #endif
  531. asm (".globl start; start:");
  532. asm (".globl _start; _start:");
  533. asm (".globl __start; __start:");
  534. void __main (void);
  535. void __main (void) {}
  536. int main (void);
  537. ]], [[]])],
  538. [grub_cv_target_cc_little_endian="$cand"], [])
  539. done
  540. ])
  541. if test x"$grub_cv_target_cc_little_endian" = xno ; then
  542. AC_MSG_ERROR([could not force little-endian])
  543. fi
  544. skip_linkflags="$(echo "$grub_cv_target_cc_little_endian"|sed 's@-Wl,-EL@@')"
  545. TARGET_CFLAGS="$TARGET_CFLAGS $skip_linkflags"
  546. TARGET_CPPFLAGS="$TARGET_CPPFLAGS $skip_linkflags"
  547. TARGET_CCASFLAGS="$TARGET_CCASFLAGS $skip_linkflags"
  548. TARGET_LDFLAGS="$TARGET_LDFLAGS $grub_cv_target_cc_little_endian"
  549. fi
  550. # GRUB code is N32-compliant but it's experimental and we would prefer to
  551. # avoid having too much variety when it doesn't result in any real improvement.
  552. # Moreover N64 isn't supported.
  553. if test "x$target_cpu" = xmips || test "x$target_cpu" = xmipsel ; then
  554. AC_CACHE_CHECK([for options to force MIPS o32 ABI], grub_cv_target_cc_mips_o32_abi, [
  555. grub_cv_target_cc_mips_o32_abi=no
  556. for arg in "" "-mabi=32" "-target $target_cpu -mabi=32" ; do
  557. if test x"$grub_cv_target_cc_mips_o32_abi" != xno ; then
  558. break
  559. fi
  560. CFLAGS="$TARGET_CFLAGS $arg -Werror"
  561. AC_LINK_IFELSE([AC_LANG_PROGRAM([[
  562. #if !defined(_ABIO32) || !defined(_MIPS_SIM) || (_MIPS_SIM != _ABIO32)
  563. #error not o32 ABI
  564. #endif
  565. asm (".globl start; start:");
  566. asm (".globl _start; _start:");
  567. asm (".globl __start; __start:");
  568. void __main (void);
  569. void __main (void) {}
  570. int main (void);
  571. ]], [[]])],
  572. [grub_cv_target_cc_mips_o32_abi="$arg"], [])
  573. done
  574. ])
  575. if test x"$grub_cv_target_cc_mips_o32_abi" = xno ; then
  576. AC_MSG_ERROR([could not force MIPS o32 ABI])
  577. fi
  578. TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_mips_o32_abi"
  579. TARGET_CCASFLAGS="$TARGET_CCASFLAGS $grub_cv_target_cc_mips_o32_abi"
  580. fi
  581. AC_CACHE_CHECK([for options to compile assembly], [grub_cv_cc_target_asm_compile], [
  582. test_program=
  583. case "x$target_cpu-$platform" in
  584. xmips-* | xmipsel-*)
  585. test_program=mips
  586. ;;
  587. xi386-pc)
  588. test_program=i386-pc
  589. ;;
  590. xi386-* | xx86_64-*)
  591. test_program=i386
  592. ;;
  593. xpowerpc-* | xsparc64-* | xarm-*)
  594. test_program=$target_cpu
  595. ;;
  596. esac
  597. if test x"$test_program" = x ; then
  598. grub_cv_cc_target_asm_compile=
  599. else
  600. found=no
  601. for arg in "" "-no-integrated-as"; do
  602. cmdline="$TARGET_CC -c -o /dev/null $TARGET_CCASFLAGS $arg $TARGET_CPPFLAGS $srcdir/asm-tests/$test_program.S"
  603. echo "Running $cmdline" >&AS_MESSAGE_LOG_FD
  604. if $cmdline >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
  605. grub_cv_cc_target_asm_compile="$arg"
  606. found=yes
  607. break
  608. fi
  609. done
  610. if test x"$found" = xno ; then
  611. AC_MSG_ERROR([could not compile assembly])
  612. fi
  613. fi
  614. ])
  615. TARGET_CCASFLAGS="$TARGET_CCASFLAGS $grub_cv_cc_target_asm_compile"
  616. if test "x$target_cpu" = xi386 && test "x$platform" != xemu; then
  617. TARGET_CFLAGS="$TARGET_CFLAGS -march=i386"
  618. fi
  619. if test "x$target_m32" = x1; then
  620. # Force 32-bit mode.
  621. TARGET_CFLAGS="$TARGET_CFLAGS -m32"
  622. TARGET_CCASFLAGS="$TARGET_CCASFLAGS -m32"
  623. TARGET_CPPFLAGS="$TARGET_CPPFLAGS -m32"
  624. TARGET_LDFLAGS="$TARGET_LDFLAGS -m32"
  625. TARGET_MODULE_FORMAT="elf32"
  626. fi
  627. if test "x$target_m64" = x1; then
  628. # Force 64-bit mode.
  629. TARGET_CFLAGS="$TARGET_CFLAGS -m64"
  630. TARGET_CCASFLAGS="$TARGET_CCASFLAGS -m64"
  631. TARGET_CPPFLAGS="$TARGET_CPPFLAGS -m64"
  632. TARGET_LDFLAGS="$TARGET_LDFLAGS -m64"
  633. TARGET_MODULE_FORMAT="elf64"
  634. fi
  635. if test "x$grub_cv_cc_target_clang" = xno && test "x$target_cpu" = xi386 && test "x$platform" != xemu && test "x$platform" != xefi; then
  636. TARGET_CFLAGS="$TARGET_CFLAGS -mrtd -mregparm=3"
  637. fi
  638. # on mips redirect cache flushing function to non-existant one.
  639. if test "x$target_cpu" = xmips || test "x$target_cpu" = xmipsel ; then
  640. AC_CACHE_CHECK([whether -mflush-func=grub_red_herring works], [grub_cv_cc_mflush_func], [
  641. CFLAGS="$TARGET_CFLAGS -mflush-func=grub_red_herring -Werror"
  642. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
  643. [grub_cv_cc_mflush_func=yes],
  644. [grub_cv_cc_mflush_func=no])
  645. ])
  646. if test "x$grub_cv_cc_mflush_func" = xyes; then
  647. TARGET_CFLAGS="$TARGET_CFLAGS -mflush-func=grub_red_herring"
  648. fi
  649. fi
  650. # Force no alignment to save space on i386.
  651. if test "x$target_cpu" = xi386; then
  652. AC_CACHE_CHECK([whether -falign-loops works], [grub_cv_cc_falign_loop], [
  653. CFLAGS="$TARGET_CFLAGS -falign-loops=1 -Werror"
  654. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
  655. [grub_cv_cc_falign_loop=yes],
  656. [grub_cv_cc_falign_loop=no])
  657. ])
  658. AC_CACHE_CHECK([whether -malign-loops works], [grub_cv_cc_malign_loop], [
  659. CFLAGS="$TARGET_CFLAGS -malign-loops=1 -Werror"
  660. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
  661. [grub_cv_cc_malign_loop=yes],
  662. [grub_cv_cc_malign_loop=no])
  663. ])
  664. if test "x$grub_cv_cc_falign_loop" = xyes; then
  665. TARGET_CFLAGS="$TARGET_CFLAGS -falign-jumps=1 -falign-loops=1 -falign-functions=1"
  666. elif test "x$grub_cv_cc_malign_loop" = xyes; then
  667. TARGET_CFLAGS="$TARGET_CFLAGS -malign-jumps=1 -malign-loops=1 -malign-functions=1"
  668. fi
  669. fi
  670. AC_CACHE_CHECK([whether -freg-struct-return works], [grub_cv_cc_freg_struct_return], [
  671. CFLAGS="$TARGET_CFLAGS -freg-struct-return -Werror"
  672. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
  673. [grub_cv_cc_freg_struct_return=yes],
  674. [grub_cv_cc_freg_struct_return=no])
  675. ])
  676. if test "x$grub_cv_cc_freg_struct_return" = xyes; then
  677. TARGET_CFLAGS="$TARGET_CFLAGS -freg-struct-return"
  678. fi
  679. if ( test "x$target_cpu" = xi386 || test "x$target_cpu" = xx86_64 ) && test "x$platform" != xemu; then
  680. # Some toolchains enable these features by default, but they need
  681. # registers that aren't set up properly in GRUB.
  682. TARGET_CFLAGS="$TARGET_CFLAGS -mno-mmx -mno-sse -mno-sse2 -mno-sse3 -mno-3dnow"
  683. fi
  684. # GRUB doesn't use float or doubles at all. Yet some toolchains may decide
  685. # that floats are a good fit to run instead of what's written in the code.
  686. # Given that floating point unit is disabled (if present to begin with)
  687. # when GRUB is running which may result in various hard crashes.
  688. if test x"$platform" != xemu ; then
  689. AC_CACHE_CHECK([for options to get soft-float], grub_cv_target_cc_soft_float, [
  690. grub_cv_target_cc_soft_float=no
  691. if test "x$target_cpu" = xarm64; then
  692. CFLAGS="$TARGET_CFLAGS -mgeneral-regs-only -Werror"
  693. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
  694. [grub_cv_target_cc_soft_float="-mgeneral-regs-only"], [])
  695. fi
  696. if test "x$target_cpu" = xia64; then
  697. CFLAGS="$TARGET_CFLAGS -mno-inline-float-divide -mno-inline-sqrt -Werror"
  698. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
  699. [grub_cv_target_cc_soft_float="-mno-inline-float-divide -mno-inline-sqrt"], [])
  700. fi
  701. for cand in "-msoft-float -Xclang -msoft-float -Xclang -no-implicit-float" \
  702. "-Xclang -msoft-float -Xclang -no-implicit-float" \
  703. "-Xclang -msoft-float" "-msoft-float"; do
  704. if test x"$grub_cv_target_cc_soft_float" != xno ; then
  705. break
  706. fi
  707. CFLAGS="$TARGET_CFLAGS $cand -Werror"
  708. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
  709. [grub_cv_target_cc_soft_float="$cand"], [])
  710. done
  711. ])
  712. if test x"$grub_cv_target_cc_soft_float" = xno ; then
  713. AC_MSG_ERROR([could not force soft-float])
  714. fi
  715. case x"$grub_cv_target_cc_soft_float" in
  716. x*"-Xclang"*)
  717. # A trick so that clang doesn't see it on link stаge
  718. TARGET_CPPFLAGS="$TARGET_CPPFLAGS $grub_cv_target_cc_soft_float"
  719. ;;
  720. *)
  721. TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_soft_float"
  722. ;;
  723. esac
  724. TARGET_CCASFLAGS="$TARGET_CCASFLAGS $grub_cv_target_cc_soft_float"
  725. fi
  726. if test x"$target_cpu" = xsparc64 ; then
  727. AC_CACHE_CHECK([for options to reserve application registers], grub_cv_target_cc_mno_app_regs, [
  728. grub_cv_target_cc_mno_app_regs=no
  729. for cand in "-mllvm -sparc-reserve-app-registers" \
  730. "-mno-app-regs"; do
  731. if test x"$grub_cv_target_cc_mno_app_regs" != xno ; then
  732. break
  733. fi
  734. CFLAGS="$TARGET_CFLAGS $cand -Werror"
  735. CPPFLAGS="$TARGET_CPPFLAGS"
  736. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
  737. [grub_cv_target_cc_mno_app_regs="$cand"], [])
  738. done
  739. ])
  740. if test x"$grub_cv_target_cc_mno_app_regs" = xno ; then
  741. AC_MSG_ERROR([could not reserve application registers])
  742. fi
  743. if test x"$grub_cv_target_cc_mno_app_regs" = x"-mllvm -sparc-reserve-app-registers" ; then
  744. # A trick so that clang doesn't see it on link stаge
  745. TARGET_CPPFLAGS="$TARGET_CPPFLAGS $grub_cv_target_cc_mno_app_regs"
  746. else
  747. TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_mno_app_regs"
  748. fi
  749. AC_CACHE_CHECK([for no-relax options], grub_cv_target_cc_mno_relax, [
  750. grub_cv_target_cc_mno_relax=no
  751. for cand in "-mno-relax" "-Wl,--no-relax"; do
  752. if test x"$grub_cv_target_cc_mno_relax" != xno ; then
  753. break
  754. fi
  755. LDFLAGS="$TARGET_LDFLAGS $cand -nostdlib -static"
  756. CFLAGS="$TARGET_CFLAGS -Werror"
  757. AC_LINK_IFELSE([AC_LANG_PROGRAM([[
  758. asm (".globl start; start:");
  759. void __main (void);
  760. void __main (void) {}
  761. int main (void);
  762. ]], [[]])], [grub_cv_target_cc_mno_relax="$cand"], [])
  763. done
  764. ])
  765. LDFLAGS="$TARGET_LDFLAGS"
  766. CFLAGS="$TARGET_CFLAGS"
  767. if test x"$grub_cv_target_cc_mno_relax" = xno ; then
  768. AC_MSG_ERROR([could not find no-relax options])
  769. fi
  770. TARGET_LDFLAGS="$TARGET_LDFLAGS $grub_cv_target_cc_mno_relax"
  771. fi
  772. # By default, GCC 4.4 generates .eh_frame sections containing unwind
  773. # information in some cases where it previously did not. GRUB doesn't need
  774. # these and they just use up vital space. Restore the old compiler
  775. # behaviour.
  776. AC_CACHE_CHECK([whether -fno-dwarf2-cfi-asm works], [grub_cv_cc_fno_dwarf2_cfi_asm], [
  777. CFLAGS="$TARGET_CFLAGS -fno-dwarf2-cfi-asm"
  778. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
  779. [grub_cv_cc_fno_dwarf2_cfi_asm=yes],
  780. [grub_cv_cc_fno_dwarf2_cfi_asm=no])
  781. ])
  782. if test "x$grub_cv_cc_fno_dwarf2_cfi_asm" = xyes; then
  783. TARGET_CFLAGS="$TARGET_CFLAGS -fno-dwarf2-cfi-asm"
  784. fi
  785. if test x"$target_os" = xcygwin; then
  786. AC_CACHE_CHECK([whether option -fno-reorder-functions works], grub_cv_cc_no_reorder_functions, [
  787. CFLAGS="$TARGET_CFLAGS -fno-reorder-functions"
  788. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
  789. [grub_cv_cc_no_reorder_functions=yes],
  790. [grub_cv_cc_no_reorder_functions=no])
  791. ])
  792. fi
  793. if test x"$target_os" = xcygwin && test "x$grub_cv_cc_no_reorder_functions" = xyes; then
  794. TARGET_CFLAGS="$TARGET_CFLAGS -fno-reorder-functions"
  795. fi
  796. AC_CACHE_CHECK([whether -mno-stack-arg-probe works], [grub_cv_cc_mno_stack_arg_probe], [
  797. CFLAGS="$TARGET_CFLAGS -mno-stack-arg-probe"
  798. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
  799. [grub_cv_cc_mno_stack_arg_probe=yes],
  800. [grub_cv_cc_mno_stack_arg_probe=no])
  801. ])
  802. if test "x$grub_cv_cc_mno_stack_arg_probe" = xyes; then
  803. TARGET_CFLAGS="$TARGET_CFLAGS -mno-stack-arg-probe"
  804. fi
  805. # By default, GCC 4.6 generates .eh_frame sections containing unwind
  806. # information in some cases where it previously did not. GRUB doesn't need
  807. # these and they just use up vital space. Restore the old compiler
  808. # behaviour.
  809. AC_CACHE_CHECK([whether -fno-asynchronous-unwind-tables works], [grub_cv_cc_fno_asynchronous_unwind_tables], [
  810. CFLAGS="$TARGET_CFLAGS -fno-asynchronous-unwind-tables"
  811. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
  812. [grub_cv_cc_fno_asynchronous_unwind_tables=yes],
  813. [grub_cv_cc_fno_asynchronous_unwind_tables=no])
  814. ])
  815. if test "x$grub_cv_cc_fno_asynchronous_unwind_tables" = xyes; then
  816. TARGET_CFLAGS="$TARGET_CFLAGS -fno-asynchronous-unwind-tables"
  817. fi
  818. AC_CACHE_CHECK([whether -fno-unwind-tables works], [grub_cv_cc_fno_unwind_tables], [
  819. CFLAGS="$TARGET_CFLAGS -fno-unwind-tables"
  820. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
  821. [grub_cv_cc_fno_unwind_tables=yes],
  822. [grub_cv_cc_fno_unwind_tables=no])
  823. ])
  824. if test "x$grub_cv_cc_fno_unwind_tables" = xyes; then
  825. TARGET_CFLAGS="$TARGET_CFLAGS -fno-unwind-tables"
  826. fi
  827. CFLAGS="$TARGET_CFLAGS"
  828. if test x"$platform" = xemu ; then
  829. TARGET_OBJ2ELF=
  830. grub_cv_target_cc_link_format=
  831. case "$host_os" in
  832. *darwin* | *mac*)
  833. grub_cv_target_cc_link_format="-arch,${target_cpu}"
  834. TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format"
  835. ;;
  836. *windows* | *cygwin* | *mingw*)
  837. if test x${target_cpu} = xi386 ; then
  838. grub_cv_target_cc_link_format=-mi386pe
  839. TARGET_OBJ2ELF='./build-grub-pe2elf$(BUILD_EXEEXT)'
  840. fi
  841. if test x${target_cpu} = xx86_64 ; then
  842. grub_cv_target_cc_link_format=-mi386pep
  843. TARGET_OBJ2ELF='./build-grub-pep2elf$(BUILD_EXEEXT)'
  844. fi
  845. TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format"
  846. ;;
  847. esac
  848. elif test x"$target_cpu" = xi386 || test x"$target_cpu" = xx86_64; then
  849. AC_CACHE_CHECK([for target linking format], [grub_cv_target_cc_link_format], [
  850. grub_cv_target_cc_link_format=unknown
  851. for format in -melf_${target_cpu} -melf_${target_cpu}_fbsd -melf_${target_cpu}_obsd -melf_${target_cpu}_haiku -mi386pe -mi386pep -arch,${target_cpu}; do
  852. if test x${target_cpu} != xi386 && test x$format = x-mi386pe; then
  853. continue
  854. fi
  855. if test x${target_cpu} != xx86_64 && test x$format = x-mi386pep; then
  856. continue
  857. fi
  858. CFLAGS="$TARGET_CFLAGS"
  859. LDFLAGS="$TARGET_LDFLAGS -Wl,$format -nostdlib -static"
  860. AC_LINK_IFELSE([AC_LANG_PROGRAM([[
  861. asm (".globl start; start:");
  862. asm (".globl _start; _start:");
  863. asm (".globl __start; __start:");
  864. void __main (void);
  865. void __main (void) {}
  866. ]], [[]])], [flag=1], [flag=0])
  867. if test x"$flag" = x1; then
  868. grub_cv_target_cc_link_format="$format"
  869. break
  870. fi
  871. done])
  872. if test x"$grub_cv_target_cc_link_format" = xunknown; then
  873. AC_MSG_ERROR([no suitable link format found])
  874. fi
  875. TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format"
  876. if test x"$grub_cv_target_cc_link_format" = x-mi386pe ; then
  877. TARGET_OBJ2ELF='./build-grub-pe2elf$(BUILD_EXEEXT)'
  878. fi
  879. if test x"$grub_cv_target_cc_link_format" = x-mi386pep ; then
  880. TARGET_OBJ2ELF='./build-grub-pep2elf$(BUILD_EXEEXT)'
  881. fi
  882. fi
  883. if test x$grub_cv_target_cc_link_format = x-arch,i386 || test x$grub_cv_target_cc_link_format = x-arch,x86_64; then
  884. TARGET_APPLE_LINKER=1
  885. AC_CHECK_PROG([TARGET_OBJCONV], [objconv], [objconv], [])
  886. if test "x$TARGET_OBJCONV" = x ; then
  887. AC_CHECK_PROG([TARGET_OBJCONV], [objconv], [./objconv], [], [.])
  888. fi
  889. if test "x$TARGET_OBJCONV" = x ; then
  890. AC_MSG_ERROR([objconv not found which is required when building with apple compiler])
  891. fi
  892. TARGET_IMG_LDSCRIPT=
  893. TARGET_IMG_CFLAGS="-static"
  894. TARGET_IMG_LDFLAGS='-nostdlib -static -Wl,-preload -Wl,-segalign,20'
  895. TARGET_IMG_LDFLAGS_AC='-nostdlib -static -Wl,-preload -Wl,-segalign,20'
  896. TARGET_IMG_BASE_LDOPT="-Wl,-image_base"
  897. TARGET_LDFLAGS_OLDMAGIC=""
  898. elif test x$grub_cv_target_cc_link_format = x-mi386pe || test x$grub_cv_target_cc_link_format = x-mi386pep ; then
  899. TARGET_APPLE_LINKER=0
  900. TARGET_LDFLAGS_OLDMAGIC="-Wl,-N"
  901. TARGET_IMG_LDSCRIPT='$(top_srcdir)'"/${grub_coredir}/conf/i386-cygwin-img-ld.sc"
  902. TARGET_IMG_LDFLAGS="-Wl,-T${TARGET_IMG_LDSCRIPT}"
  903. TARGET_IMG_LDFLAGS_AC="-Wl,-T${srcdir}/${grub_coredir}/conf/i386-cygwin-img-ld.sc"
  904. TARGET_IMG_BASE_LDOPT="-Wl,-Ttext"
  905. TARGET_IMG_CFLAGS=
  906. else
  907. TARGET_APPLE_LINKER=0
  908. TARGET_LDFLAGS_OLDMAGIC="-Wl,-N"
  909. TARGET_IMG_LDSCRIPT=
  910. TARGET_IMG_LDFLAGS='-Wl,-N'
  911. TARGET_IMG_LDFLAGS_AC='-Wl,-N'
  912. TARGET_IMG_BASE_LDOPT="-Wl,-Ttext"
  913. TARGET_IMG_CFLAGS=
  914. fi
  915. CFLAGS="$TARGET_CFLAGS"
  916. AC_ARG_ENABLE([efiemu],
  917. [AS_HELP_STRING([--enable-efiemu],
  918. [build and install the efiemu runtimes (default=guessed)])])
  919. if test x"$enable_efiemu" = xno ; then
  920. efiemu_excuse="explicitly disabled"
  921. fi
  922. if test x"$grub_cv_target_cc_link_format" = x-mi386pe || test x"$grub_cv_target_cc_link_format" = x-mi386pep ; then
  923. efiemu_excuse="not available on cygwin"
  924. fi
  925. if test x"$target_cpu" != xi386 ; then
  926. efiemu_excuse="only available on i386"
  927. fi
  928. if test x"$platform" = xefi ; then
  929. efiemu_excuse="not available on efi"
  930. fi
  931. if test x"$efiemu_excuse" = x ; then
  932. AC_CACHE_CHECK([whether options required for efiemu work], grub_cv_cc_efiemu, [
  933. CFLAGS="-m64 -nostdlib -O2 -mcmodel=large -mno-red-zone"
  934. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
  935. [grub_cv_cc_efiemu=yes],
  936. [grub_cv_cc_efiemu=no])
  937. ])
  938. if test x$grub_cv_cc_efiemu = xno; then
  939. efiemu_excuse="cannot compile with -m64 -mcmodel=large -mno-red-zone -nostdlib"
  940. fi
  941. fi
  942. if test x"$efiemu_excuse" = x ; then
  943. AC_CACHE_CHECK([for efiemu64 linking format], [grub_cv_target_cc_efiemu64_link_format], [
  944. grub_cv_target_cc_efiemu64_link_format=unknown
  945. for format in -melf_x86_64 -melf_x86_64_fbsd -melf_x86_64_obsd -melf_x86_64_haiku -arch,x86_64; do
  946. CFLAGS="-m64 -nostdlib -O2 -mcmodel=large -mno-red-zone"
  947. LDFLAGS="-m64 -Wl,$format -nostdlib -static"
  948. AC_LINK_IFELSE([AC_LANG_PROGRAM([[
  949. asm (".globl start; start:");
  950. asm (".globl _start; _start:");
  951. asm (".globl __start; __start:");
  952. void __main (void);
  953. void __main (void) {}
  954. ]], [[]])], [flag=1], [flag=0])
  955. if test x"$flag" = x1; then
  956. grub_cv_target_cc_efiemu64_link_format="$format"
  957. break
  958. fi
  959. done])
  960. if test x"$grub_cv_target_cc_efiemu64_link_format" = xunknown; then
  961. efiemu_excuse="no suitable link format for efiemu64 found"
  962. else
  963. EFIEMU64_LINK_FORMAT="-Wl,$grub_cv_target_cc_efiemu64_link_format"
  964. fi
  965. fi
  966. if test x"$enable_efiemu" = xyes && test x"$efiemu_excuse" != x ; then
  967. AC_MSG_ERROR([efiemu runtime was explicitly requested but can't be compiled ($efiemu_excuse)])
  968. fi
  969. if test x"$efiemu_excuse" = x ; then
  970. enable_efiemu=yes
  971. else
  972. enable_efiemu=no
  973. fi
  974. AC_SUBST([enable_efiemu])
  975. AC_SUBST([EFIEMU64_LINK_FORMAT])
  976. CFLAGS="$TARGET_CFLAGS"
  977. AC_SUBST(TARGET_LDFLAGS_OLDMAGIC)
  978. LDFLAGS="$TARGET_LDFLAGS"
  979. if test "$target_cpu" = x86_64 || test "$target_cpu" = sparc64 ; then
  980. # Use large model to support 4G memory
  981. AC_CACHE_CHECK([whether option -mcmodel=large works], grub_cv_cc_mcmodel, [
  982. CFLAGS="$TARGET_CFLAGS -mcmodel=large"
  983. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
  984. [grub_cv_cc_mcmodel=yes],
  985. [grub_cv_cc_mcmodel=no])
  986. ])
  987. if test "x$grub_cv_cc_mcmodel" = xyes; then
  988. TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=large"
  989. elif test "$target_cpu" = sparc64; then
  990. TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=medany"
  991. fi
  992. fi
  993. if test "$target_cpu"-"$platform" = x86_64-efi; then
  994. # EFI writes to stack below %rsp, we must not use the red zone
  995. AC_CACHE_CHECK([whether option -mno-red-zone works], grub_cv_cc_no_red_zone, [
  996. CFLAGS="$TARGET_CFLAGS -mno-red-zone"
  997. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
  998. [grub_cv_cc_no_red_zone=yes],
  999. [grub_cv_cc_no_red_zone=no])
  1000. ])
  1001. if test "x$grub_cv_cc_no_red_zone" = xno; then
  1002. AC_MSG_ERROR([-mno-red-zone not supported, upgrade your gcc])
  1003. fi
  1004. TARGET_CFLAGS="$TARGET_CFLAGS -mno-red-zone"
  1005. fi
  1006. if test "x$target_cpu" = xarm; then
  1007. AC_CACHE_CHECK([whether option -mlong-calls works], grub_cv_cc_mlong_calls, [
  1008. CFLAGS="$TARGET_CFLAGS -mlong-calls -Werror"
  1009. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
  1010. [grub_cv_cc_mlong_calls=yes],
  1011. [grub_cv_cc_mlong_calls=no])
  1012. ])
  1013. if test "x$grub_cv_cc_mlong_calls" = xyes; then
  1014. TARGET_CFLAGS="$TARGET_CFLAGS -mlong-calls"
  1015. fi
  1016. AC_CACHE_CHECK([whether option -mthumb-interwork works], grub_cv_cc_mthumb_interwork, [
  1017. CFLAGS="$TARGET_CFLAGS -mthumb-interwork -Werror"
  1018. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
  1019. [grub_cv_cc_mthumb_interwork=yes],
  1020. [grub_cv_cc_mthumb_interwork=no])
  1021. ])
  1022. if test "x$grub_cv_cc_mthumb_interwork" = xyes; then
  1023. TARGET_CFLAGS="$TARGET_CFLAGS -mthumb-interwork"
  1024. # Clang defaults to thumb interworking
  1025. elif test "x$grub_cv_cc_target_clang" = xno ; then
  1026. AC_MSG_ERROR([your compiler doesn't support -mthumb-interwork])
  1027. fi
  1028. fi
  1029. AC_CACHE_CHECK([whether option -Qn works], grub_cv_target_cc_qn, [
  1030. CFLAGS="$TARGET_CFLAGS -Qn -Werror"
  1031. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
  1032. [grub_cv_target_cc_qn=yes],
  1033. [grub_cv_target_cc_qn=no])])
  1034. if test "x$grub_cv_target_cc_qn" = xyes; then
  1035. TARGET_CFLAGS="$TARGET_CFLAGS -Qn"
  1036. fi
  1037. #
  1038. # Compiler features.
  1039. #
  1040. CFLAGS="$TARGET_CFLAGS"
  1041. # Position independent executable.
  1042. grub_CHECK_PIE
  1043. [# Need that, because some distributions ship compilers that include
  1044. # `-fPIE' or '-fpie' in the default specs.
  1045. if [ x"$pie_possible" = xyes ]; then
  1046. TARGET_CFLAGS="$TARGET_CFLAGS -fno-PIE -fno-pie"
  1047. fi]
  1048. CFLAGS="$TARGET_CFLAGS"
  1049. # Position independent executable.
  1050. grub_CHECK_PIC
  1051. [# On most platforms we don't want PIC as it only makes relocations harder
  1052. # and code less efficient. On mips we want to have one got table per module
  1053. # and reload $gp in every function.
  1054. # GCC implements it using symbol __gnu_local_gp in non-PIC as well.
  1055. # However with clang we need PIC for this reloading to happen.
  1056. # Since default varies across dictributions use either -fPIC or -fno-PIC
  1057. # explicitly.
  1058. if ( test x$target_cpu = xmips || test x$target_cpu = xmipsel ) && test "x$grub_cv_cc_target_clang" = xyes ; then
  1059. TARGET_CFLAGS="$TARGET_CFLAGS -fPIC"
  1060. elif [ x"$pic_possible" = xyes ]; then
  1061. TARGET_CFLAGS="$TARGET_CFLAGS -fno-PIC"
  1062. fi]
  1063. CFLAGS="$TARGET_CFLAGS"
  1064. # Smashing stack protector.
  1065. grub_CHECK_STACK_PROTECTOR
  1066. # Need that, because some distributions ship compilers that include
  1067. # `-fstack-protector' in the default specs.
  1068. if test "x$ssp_possible" = xyes; then
  1069. TARGET_CFLAGS="$TARGET_CFLAGS -fno-stack-protector"
  1070. fi
  1071. CFLAGS="$TARGET_CFLAGS"
  1072. grub_CHECK_STACK_ARG_PROBE
  1073. # Cygwin's GCC uses alloca() to probe the stackframe on static
  1074. # stack allocations above some threshold.
  1075. if test x"$sap_possible" = xyes; then
  1076. TARGET_CFLAGS="$TARGET_CFLAGS -mno-stack-arg-probe"
  1077. fi
  1078. CFLAGS="$TARGET_CFLAGS"
  1079. # -mno-unaligned-access -mstrict-align
  1080. if test "$target_cpu" = arm; then
  1081. AC_CACHE_CHECK([for compile options to get strict alignment], [grub_cv_target_cc_strict_align], [
  1082. grub_cv_target_cc_strict_align=
  1083. for arg in -mno-unaligned-access "-Xclang -mstrict-align" -mstrict-align; do
  1084. CFLAGS="$TARGET_CFLAGS $arg -Werror"
  1085. LDFLAGS="$TARGET_LDFLAGS"
  1086. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [flag=1], [flag=0])
  1087. if test x"$flag" = x1; then
  1088. grub_cv_target_cc_strict_align="$arg"
  1089. break
  1090. fi
  1091. done])
  1092. TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_strict_align"
  1093. if test x"$grub_cv_target_cc_strict_align" = x"-Xclang -mstrict-align"; then
  1094. TARGET_LDFLAGS="$TARGET_LDFLAGS -Qunused-arguments"
  1095. fi
  1096. AC_CACHE_CHECK([if compiler generates unaligned accesses], [grub_cv_cc_target_emits_unaligned],
  1097. [CFLAGS="$TARGET_CFLAGS"
  1098. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[
  1099. #ifdef __ARM_FEATURE_UNALIGNED
  1100. #error "unaligned"
  1101. #endif
  1102. ]])],
  1103. [grub_cv_cc_target_emits_unaligned=no], [grub_cv_cc_target_emits_unaligned=yes])])
  1104. if test x$grub_cv_cc_target_emits_unaligned = xyes; then
  1105. AC_MSG_ERROR([compiler generates unaligned accesses])
  1106. fi
  1107. fi
  1108. # Set them to their new values for the tests below.
  1109. CC="$TARGET_CC"
  1110. if test x"$platform" = xemu ; then
  1111. CFLAGS="$TARGET_CFLAGS -Wno-error"
  1112. elif test "x$TARGET_APPLE_LINKER" = x1 ; then
  1113. CFLAGS="$TARGET_CFLAGS -nostdlib -static -Wno-error"
  1114. else
  1115. CFLAGS="$TARGET_CFLAGS -nostdlib -Wno-error"
  1116. fi
  1117. CPPFLAGS="$TARGET_CPPFLAGS"
  1118. grub_ASM_USCORE
  1119. if test "x$TARGET_APPLE_LINKER" = x0 && test x"$platform" != xemu; then
  1120. if test x$grub_cv_asm_uscore = xyes; then
  1121. DEFSYM="-Wl,--defsym,_abort=_main -Wl,--defsym,__main=_main"
  1122. else
  1123. DEFSYM="-Wl,--defsym,abort=main -Wl,--defsym,_main=main -Wl,--defsym,__main=main"
  1124. fi
  1125. CFLAGS="$TARGET_CFLAGS -nostdlib $DEFSYM"
  1126. fi
  1127. # Check for libgcc symbols
  1128. if test x"$platform" = xemu; then
  1129. AC_CHECK_FUNCS(__udivsi3 __umodsi3 __divsi3 __modsi3 __divdi3 __moddi3 __udivdi3 __umoddi3 __ctzdi2 __ctzsi2 __aeabi_uidiv __aeabi_uidivmod __aeabi_idiv __aeabi_idivmod __aeabi_ulcmp __muldi3 __aeabi_lmul __aeabi_memcpy __aeabi_memcpy4 __aeabi_memcpy8 __aeabi_memclr __aeabi_memclr4 __aeabi_memclr8 __aeabi_memset __aeabi_lasr __aeabi_llsl __aeabi_llsr _restgpr_14_x __ucmpdi2 __ashldi3 __ashrdi3 __lshrdi3 __bswapsi2 __bswapdi2 __bzero __register_frame_info __deregister_frame_info ___chkstk_ms __chkstk_ms)
  1130. fi
  1131. if test "x$TARGET_APPLE_LINKER" = x1 ; then
  1132. CFLAGS="$TARGET_CFLAGS -nostdlib -static"
  1133. else
  1134. CFLAGS="$TARGET_CFLAGS -nostdlib"
  1135. fi
  1136. LIBS=""
  1137. # Defined in aclocal.m4.
  1138. grub_PROG_TARGET_CC
  1139. if test "x$TARGET_APPLE_LINKER" != x1 ; then
  1140. grub_PROG_OBJCOPY_ABSOLUTE
  1141. fi
  1142. grub_PROG_LD_BUILD_ID_NONE
  1143. if test "x$target_cpu" = xi386; then
  1144. if test "$platform" != emu && test "x$TARGET_APPLE_LINKER" != x1 ; then
  1145. if test ! -z "$TARGET_IMG_LDSCRIPT"; then
  1146. # Check symbols provided by linker script.
  1147. CFLAGS="$TARGET_CFLAGS -nostdlib ${TARGET_IMG_LDFLAGS_AC} ${TARGET_IMG_BASE_LDOPT},0x8000"
  1148. fi
  1149. grub_CHECK_BSS_START_SYMBOL
  1150. grub_CHECK_END_SYMBOL
  1151. fi
  1152. CFLAGS="$TARGET_CFLAGS"
  1153. fi
  1154. grub_PROG_NM_WORKS
  1155. grub_PROG_NM_MINUS_P
  1156. grub_PROG_NM_DEFINED_ONLY
  1157. AC_SUBST(TARGET_NMFLAGS_MINUS_P)
  1158. AC_SUBST(TARGET_NMFLAGS_DEFINED_ONLY)
  1159. if test "$platform" != emu; then
  1160. AC_CACHE_CHECK([whether -nostdinc -isystem works], [grub_cv_cc_isystem], [
  1161. SAVED_CPPFLAGS="$CPPFLAGS"
  1162. CPPFLAGS="$TARGET_CPPFLAGS -nostdinc -isystem `$TARGET_CC -print-file-name=include`"
  1163. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>
  1164. #include <stddef.h>
  1165. int va_arg_func (int fixed, va_list args);]], [[]])],
  1166. [grub_cv_cc_isystem=yes],
  1167. [grub_cv_cc_isystem=no])
  1168. CPPFLAGS="$SAVED_CPPFLAGS"
  1169. ])
  1170. if test x"$grub_cv_cc_isystem" = xyes ; then
  1171. TARGET_CPPFLAGS="$TARGET_CPPFLAGS -nostdinc -isystem `$TARGET_CC -print-file-name=include`"
  1172. fi
  1173. fi
  1174. AC_CACHE_CHECK([whether -Wtrampolines work], [grub_cv_cc_wtrampolines], [
  1175. CFLAGS="$TARGET_CFLAGS -Wtrampolines -Werror"
  1176. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>
  1177. int va_arg_func (int fixed, va_list args);]], [[]])],
  1178. [grub_cv_cc_wtrampolines=yes],
  1179. [grub_cv_cc_wtrampolines=no])
  1180. ])
  1181. if test x"$grub_cv_cc_wtrampolines" = xyes ; then
  1182. TARGET_CFLAGS="$TARGET_CFLAGS -Wtrampolines"
  1183. fi
  1184. # Restore the flags.
  1185. CC="$tmp_CC"
  1186. CFLAGS="$tmp_CFLAGS"
  1187. CPPFLAGS="$tmp_CPPFLAGS"
  1188. LDFLAGS="$tmp_LDFLAGS"
  1189. LIBS="$tmp_LIBS"
  1190. #
  1191. # Check for options.
  1192. #
  1193. # Memory manager debugging.
  1194. AC_ARG_ENABLE([mm-debug],
  1195. AS_HELP_STRING([--enable-mm-debug],
  1196. [include memory manager debugging]),
  1197. [AC_DEFINE([MM_DEBUG], [1],
  1198. [Define to 1 if you enable memory manager debugging.])])
  1199. AC_ARG_ENABLE([cache-stats],
  1200. AS_HELP_STRING([--enable-cache-stats],
  1201. [enable disk cache statistics collection]))
  1202. if test x$enable_cache_stats = xyes; then
  1203. DISK_CACHE_STATS=1
  1204. else
  1205. DISK_CACHE_STATS=0
  1206. fi
  1207. AC_SUBST([DISK_CACHE_STATS])
  1208. AC_ARG_ENABLE([boot-time],
  1209. AS_HELP_STRING([--enable-boot-time],
  1210. [enable boot time statistics collection]))
  1211. if test x$enable_boot_time = xyes; then
  1212. BOOT_TIME_STATS=1
  1213. else
  1214. BOOT_TIME_STATS=0
  1215. fi
  1216. AC_SUBST([BOOT_TIME_STATS])
  1217. AC_ARG_ENABLE([grub-emu-sdl],
  1218. [AS_HELP_STRING([--enable-grub-emu-sdl],
  1219. [build and install the `grub-emu' debugging utility with SDL support (default=guessed)])])
  1220. AC_ARG_ENABLE([grub-emu-pci],
  1221. [AS_HELP_STRING([--enable-grub-emu-pci],
  1222. [build and install the `grub-emu' debugging utility with PCI support (potentially dangerous) (default=no)])])
  1223. if test "$platform" = emu; then
  1224. if test x"$enable_grub_emu_sdl" = xno ; then
  1225. grub_emu_sdl_excuse="explicitly disabled"
  1226. fi
  1227. [if [ x"$grub_emu_sdl_excuse" = x ]; then
  1228. # Check for libSDL libraries.]
  1229. AC_CHECK_LIB([SDL], [SDL_Init], [LIBSDL="-lSDL"],
  1230. [grub_emu_sdl_excuse=["libSDL libraries are required to build \`grub-emu' with SDL support"]])
  1231. AC_SUBST([LIBSDL])
  1232. [fi]
  1233. [if [ x"$grub_emu_sdl_excuse" = x ]; then
  1234. # Check for headers.]
  1235. AC_CHECK_HEADERS([SDL/SDL.h], [],
  1236. [grub_emu_sdl_excuse=["libSDL header file is required to build \`grub-emu' with SDL support"]])
  1237. [fi]
  1238. if test x"enable_grub_emu_sdl" = xyes && test x"$grub_emu_sdl_excuse" != x ; then
  1239. AC_MSG_ERROR([SDL support for grub-emu was explicitly requested but can't be compiled ($grub_emu_sdl_excuse)])
  1240. fi
  1241. if test x"$grub_emu_sdl_excuse" = x ; then
  1242. enable_grub_emu_sdl=yes
  1243. else
  1244. enable_grub_emu_sdl=no
  1245. fi
  1246. if test x"$enable_grub_emu_pci" != xyes ; then
  1247. grub_emu_pci_excuse="not enabled"
  1248. fi
  1249. [if [ x"$grub_emu_pci_excuse" = x ]; then
  1250. # Check for libpci libraries.]
  1251. AC_CHECK_LIB([pciaccess], [pci_system_init], [LIBPCIACCESS="-lpciaccess"],
  1252. [grub_emu_pci_excuse=["need libpciaccess library"]])
  1253. AC_SUBST([LIBPCIACCESS])
  1254. [fi]
  1255. [if [ x"$grub_emu_pci_excuse" = x ]; then
  1256. # Check for headers.]
  1257. AC_CHECK_HEADERS([pciaccess.h], [],
  1258. [grub_emu_pci_excuse=["need libpciaccess headers"]])
  1259. [fi]
  1260. if test x"$grub_emu_pci_excuse" = x ; then
  1261. enable_grub_emu_pci=yes
  1262. else
  1263. enable_grub_emu_pci=no
  1264. fi
  1265. AC_SUBST([enable_grub_emu_sdl])
  1266. AC_SUBST([enable_grub_emu_pci])
  1267. else
  1268. # Ignore --enable-emu-* if platform is not emu
  1269. enable_grub_emu_sdl=no
  1270. enable_grub_emu_pci=no
  1271. fi
  1272. AC_ARG_ENABLE([grub-mkfont],
  1273. [AS_HELP_STRING([--enable-grub-mkfont],
  1274. [build and install the `grub-mkfont' utility (default=guessed)])])
  1275. if test x"$enable_grub_mkfont" = xno ; then
  1276. grub_mkfont_excuse="explicitly disabled"
  1277. fi
  1278. if test x"$grub_mkfont_excuse" = x ; then
  1279. # Check for freetype libraries.
  1280. AC_CHECK_TOOLS([FREETYPE], [freetype-config])
  1281. if test "x$FREETYPE" = x ; then
  1282. grub_mkfont_excuse=["need freetype2 library"]
  1283. fi
  1284. fi
  1285. unset ac_cv_header_ft2build_h
  1286. if test x"$grub_mkfont_excuse" = x ; then
  1287. # Check for freetype libraries.
  1288. freetype_cflags=`$FREETYPE --cflags`
  1289. freetype_libs=`$FREETYPE --libs`
  1290. SAVED_CPPFLAGS="$CPPFLAGS"
  1291. SAVED_LIBS="$LIBS"
  1292. CPPFLAGS="$CPPFLAGS $freetype_cflags"
  1293. LIBS="$LIBS $freetype_libs"
  1294. AC_CHECK_HEADERS([ft2build.h], [],
  1295. [grub_mkfont_excuse=["need freetype2 headers"]])
  1296. AC_LINK_IFELSE([AC_LANG_CALL([], [FT_Load_Glyph])], [], [grub_mkfont_excuse=["freetype2 library unusable"]])
  1297. CPPFLAGS="$SAVED_CPPFLAGS"
  1298. LIBS="$SAVED_LIBS"
  1299. fi
  1300. if test x"$enable_grub_mkfont" = xyes && test x"$grub_mkfont_excuse" != x ; then
  1301. AC_MSG_ERROR([grub-mkfont was explicitly requested but can't be compiled ($grub_mkfont_excuse)])
  1302. fi
  1303. if test x"$grub_mkfont_excuse" = x ; then
  1304. enable_grub_mkfont=yes
  1305. else
  1306. enable_grub_mkfont=no
  1307. fi
  1308. AC_SUBST([enable_grub_mkfont])
  1309. AC_SUBST([freetype_cflags])
  1310. AC_SUBST([freetype_libs])
  1311. SAVED_CC="$CC"
  1312. SAVED_CPP="$CPP"
  1313. SAVED_CFLAGS="$CFLAGS"
  1314. SAVED_CPPFLAGS="$CPPFLAGS"
  1315. SAVED_LDFLAGS="$LDFLAGS"
  1316. CC="$BUILD_CC"
  1317. CPP="$BUILD_CPP"
  1318. CFLAGS="$BUILD_CFLAGS"
  1319. CPPFLAGS="$BUILD_CPPFLAGS"
  1320. LDFLAGS="$BUILD_LDFAGS"
  1321. unset ac_cv_c_bigendian
  1322. unset ac_cv_header_ft2build_h
  1323. AC_COMPUTE_INT([BUILD_SIZEOF_VOID_P], [sizeof (void *)])
  1324. AC_COMPUTE_INT([BUILD_SIZEOF_LONG], [sizeof (long)])
  1325. AC_C_BIGENDIAN([BUILD_WORDS_BIGENDIAN=1], [BUILD_WORDS_BIGENDIAN=0], [BUILD_WORDS_BIGENDIAN=err], [BUILD_WORDS_BIGENDIAN=err])
  1326. if test x$BUILD_WORDS_BIGENDIAN = xerr ; then
  1327. AC_MSG_ERROR([couldnt determine build endianness])
  1328. fi
  1329. AC_SUBST([BUILD_SIZEOF_LONG])
  1330. AC_SUBST([BUILD_SIZEOF_VOID_P])
  1331. AC_SUBST([BUILD_WORDS_BIGENDIAN])
  1332. if test x"$grub_build_mkfont_excuse" = x ; then
  1333. # Check for freetype libraries.
  1334. AC_CHECK_PROGS([BUILD_FREETYPE], [freetype-config])
  1335. if test "x$BUILD_FREETYPE" = x ; then
  1336. grub_build_mkfont_excuse=["need freetype2 library"]
  1337. fi
  1338. fi
  1339. if test x"$grub_build_mkfont_excuse" = x ; then
  1340. # Check for freetype libraries.
  1341. build_freetype_cflags=`$BUILD_FREETYPE --cflags`
  1342. build_freetype_libs=`$BUILD_FREETYPE --libs`
  1343. SAVED_CPPFLAGS_2="$CPPFLAGS"
  1344. SAVED_LIBS="$LIBS"
  1345. CPPFLAGS="$CPPFLAGS $build_freetype_cflags"
  1346. LIBS="$LIBS $build_freetype_libs"
  1347. AC_CHECK_HEADERS([ft2build.h], [],
  1348. [grub_build_mkfont_excuse=["need freetype2 headers"]])
  1349. AC_LINK_IFELSE([AC_LANG_CALL([], [FT_Load_Glyph])], [], [grub_build_mkfont_excuse=["freetype2 library unusable"]])
  1350. LIBS="$SAVED_LIBS"
  1351. CPPFLAGS="$SAVED_CPPFLAGS_2"
  1352. fi
  1353. if test x"$enable_build_grub_mkfont" = xyes && test x"$grub_build_mkfont_excuse" != x ; then
  1354. AC_MSG_ERROR([build-grub-mkfont was explicitly requested but can't be compiled ($grub_build_mkfont_excuse)])
  1355. fi
  1356. if test x"$grub_build_mkfont_excuse" = x ; then
  1357. enable_build_grub_mkfont=yes
  1358. else
  1359. enable_build_grub_mkfont=no
  1360. fi
  1361. if test x"$enable_build_grub_mkfont" = xno && ( test "x$platform" = xqemu || test "x$platform" = xloongson || test "x$platform" = xqemu_mips || test "x$target_cpu"-"$platform" = xpowerpc-ieee1275 || test "x$platform" = xcoreboot ); then
  1362. if test x"$grub_build_mkfont_excuse" = x ; then
  1363. AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports needs build-time grub-mkfont])
  1364. else
  1365. AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports needs build-time grub-mkfont ($grub_build_mkfont_excuse)])
  1366. fi
  1367. fi
  1368. AC_SUBST([build_freetype_cflags])
  1369. AC_SUBST([build_freetype_libs])
  1370. CC="$SAVED_CC"
  1371. CPP="$SAVED_CPP"
  1372. CFLAGS="$SAVED_CFLAGS"
  1373. CPPFLAGS="$SAVED_CPPFLAGS"
  1374. LDFLAGS="$SAVED_LDFLAGS"
  1375. DJVU_FONT_SOURCE=
  1376. starfield_excuse=
  1377. AC_ARG_ENABLE([grub-themes],
  1378. [AS_HELP_STRING([--enable-grub-themes],
  1379. [build and install GRUB themes (default=guessed)])])
  1380. if test x"$enable_grub_themes" = xno ; then
  1381. starfield_excuse="explicitly disabled"
  1382. fi
  1383. if test x"$starfield_excuse" = x && test x"$enable_build_grub_mkfont" = xno ; then
  1384. starfield_excuse="No build-time grub-mkfont"
  1385. fi
  1386. if test x"$starfield_excuse" = x; then
  1387. for ext in pcf pcf.gz bdf bdf.gz ttf ttf.gz; do
  1388. for dir in . /usr/src /usr/share/fonts/X11/misc /usr/share/fonts/truetype/ttf-dejavu /usr/share/fonts/dejavu /usr/share/fonts/truetype; do
  1389. if test -f "$dir/DejaVuSans.$ext"; then
  1390. DJVU_FONT_SOURCE="$dir/DejaVuSans.$ext"
  1391. break 2
  1392. fi
  1393. done
  1394. done
  1395. if test "x$DJVU_FONT_SOURCE" = x; then
  1396. starfield_excuse="No DejaVu found"
  1397. fi
  1398. fi
  1399. if test x"$enable_grub_themes" = xyes && test x"$starfield_excuse" != x; then
  1400. AC_MSG_ERROR([themes were explicitly requested but requirements are not satisfied ($starfield_excuse)])
  1401. fi
  1402. AC_SUBST([DJVU_FONT_SOURCE])
  1403. FONT_SOURCE=
  1404. for ext in pcf pcf.gz bdf bdf.gz ttf ttf.gz; do
  1405. for dir in . /usr/src /usr/share/fonts/X11/misc /usr/share/fonts/unifont /usr/share/fonts/uni /usr/share/fonts/truetype/unifont /usr/share/fonts/misc; do
  1406. if test -f "$dir/unifont.$ext"; then
  1407. md5="$(md5sum "$dir/unifont.$ext"|awk '{ print $1; }')"
  1408. # PCF and BDF from version 6.3 isn't hanled properly by libfreetype.
  1409. if test "$md5" = 0a54834d2788c83886a3e1785a6a1e61 || test "$md5" = 28f2565c7a41d8d407e2551159385edb || test "$md5" = dae5e588461b3b92b87b6ffee734f936 || test "$md5" = 4a3d687aa5bb329ed05f4263a1016791 ; then
  1410. continue
  1411. fi
  1412. FONT_SOURCE="$dir/unifont.$ext"
  1413. break 2
  1414. fi
  1415. done
  1416. done
  1417. if test x"$enable_build_grub_mkfont" = xno ; then
  1418. FONT_SOURCE=
  1419. fi
  1420. if test "x$FONT_SOURCE" = x && ( test "x$platform" = xqemu || test "x$platform" = xloongson || test "x$platform" = xqemu_mips || test "x$target_cpu"-"$platform" = xpowerpc-ieee1275 || test "x$platform" = xcoreboot ); then
  1421. if test x"$grub_build_mkfont_excuse" = x ; then
  1422. AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports need unifont])
  1423. else
  1424. AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports need unifont ($grub_build_mkfont_excuse)])
  1425. fi
  1426. fi
  1427. AC_SUBST([FONT_SOURCE])
  1428. if test x"$FONT_SOURCE" = x && test x"$DJVU_FONT_SOURCE" = x && test x"$grub_build_mkfont_excuse" = x; then
  1429. grub_build_mkfont_excuse="no fonts"
  1430. fi
  1431. AC_ARG_ENABLE([grub-mount],
  1432. [AS_HELP_STRING([--enable-grub-mount],
  1433. [build and install the `grub-mount' utility (default=guessed)])])
  1434. if test x"$enable_grub_mount" = xno ; then
  1435. grub_mount_excuse="explicitly disabled"
  1436. fi
  1437. if test x"$grub_mount_excuse" = x ; then
  1438. AC_CHECK_LIB([fuse], [fuse_main_real], [],
  1439. [grub_mount_excuse="need FUSE library"])
  1440. fi
  1441. if test x"$grub_mount_excuse" = x ; then
  1442. # Check for fuse headers.
  1443. SAVED_CPPFLAGS="$CPPFLAGS"
  1444. CPPFLAGS="$CPPFLAGS -DFUSE_USE_VERSION=26"
  1445. AC_CHECK_HEADERS([fuse/fuse.h], [],
  1446. [grub_mount_excuse=["need FUSE headers"]])
  1447. CPPFLAGS="$SAVED_CPPFLAGS"
  1448. fi
  1449. if test x"$enable_grub_mount" = xyes && test x"$grub_mount_excuse" != x ; then
  1450. AC_MSG_ERROR([grub-mount was explicitly requested but can't be compiled ($grub_mount_excuse)])
  1451. fi
  1452. if test x"$grub_mount_excuse" = x ; then
  1453. enable_grub_mount=yes
  1454. else
  1455. enable_grub_mount=no
  1456. fi
  1457. AC_SUBST([enable_grub_mount])
  1458. AC_ARG_ENABLE([device-mapper],
  1459. [AS_HELP_STRING([--enable-device-mapper],
  1460. [enable Linux device-mapper support (default=guessed)])])
  1461. if test x"$enable_device_mapper" = xno ; then
  1462. device_mapper_excuse="explicitly disabled"
  1463. fi
  1464. if test x"$device_mapper_excuse" = x ; then
  1465. # Check for device-mapper header.
  1466. AC_CHECK_HEADER([libdevmapper.h], [],
  1467. [device_mapper_excuse="need libdevmapper header"])
  1468. fi
  1469. if test x"$device_mapper_excuse" = x ; then
  1470. # Check for device-mapper library.
  1471. AC_CHECK_LIB([devmapper], [dm_task_create], [],
  1472. [device_mapper_excuse="need devmapper library"])
  1473. fi
  1474. if test x"$device_mapper_excuse" = x ; then
  1475. # Check for device-mapper library.
  1476. AC_CHECK_LIB([devmapper], [dm_log_with_errno_init],
  1477. [],
  1478. [device_mapper_excuse="need devmapper library"])
  1479. fi
  1480. if test x"$device_mapper_excuse" = x ; then
  1481. LIBDEVMAPPER="-ldevmapper"
  1482. AC_DEFINE([HAVE_DEVICE_MAPPER], [1],
  1483. [Define to 1 if you have the devmapper library.])
  1484. fi
  1485. AC_SUBST([LIBDEVMAPPER])
  1486. LIBGEOM=
  1487. if test x$host_kernel = xkfreebsd; then
  1488. AC_CHECK_LIB([geom], [geom_gettree], [],
  1489. [AC_MSG_ERROR([Your platform requires libgeom])])
  1490. LIBGEOM="-lgeom"
  1491. fi
  1492. AC_SUBST([LIBGEOM])
  1493. AC_ARG_ENABLE([liblzma],
  1494. [AS_HELP_STRING([--enable-liblzma],
  1495. [enable liblzma integration (default=guessed)])])
  1496. if test x"$enable_liblzma" = xno ; then
  1497. liblzma_excuse="explicitly disabled"
  1498. fi
  1499. if test x"$liblzma_excuse" = x ; then
  1500. AC_CHECK_LIB([lzma], [lzma_code],
  1501. [],[liblzma_excuse="need lzma library"])
  1502. fi
  1503. if test x"$liblzma_excuse" = x ; then
  1504. AC_CHECK_HEADER([lzma.h], [], [liblzma_excuse="need lzma header"])
  1505. fi
  1506. if test x"$enable_liblzma" = xyes && test x"$liblzma_excuse" != x ; then
  1507. AC_MSG_ERROR([liblzma support was explicitly requested but requirements are not satisfied ($liblzma_excuse)])
  1508. fi
  1509. if test x"$liblzma_excuse" = x ; then
  1510. LIBLZMA="-llzma"
  1511. AC_DEFINE([USE_LIBLZMA], [1],
  1512. [Define to 1 if you have the LZMA library.])
  1513. fi
  1514. AC_SUBST([LIBLZMA])
  1515. AC_ARG_ENABLE([libzfs],
  1516. [AS_HELP_STRING([--enable-libzfs],
  1517. [enable libzfs integration (default=guessed)])])
  1518. if test x"$enable_libzfs" = xno ; then
  1519. libzfs_excuse="explicitly disabled"
  1520. fi
  1521. if test x"$libzfs_excuse" = x ; then
  1522. # Only check for system headers if libzfs support has not been disabled.
  1523. AC_CHECK_HEADERS(libzfs.h libnvpair.h)
  1524. fi
  1525. if test x"$libzfs_excuse" = x ; then
  1526. AC_CHECK_LIB([zfs], [libzfs_init],
  1527. [],
  1528. [libzfs_excuse="need zfs library"])
  1529. fi
  1530. if test x"$libzfs_excuse" = x ; then
  1531. AC_CHECK_LIB([nvpair], [nvlist_lookup_string],
  1532. [],
  1533. [libzfs_excuse="need nvpair library"])
  1534. fi
  1535. if test x"$enable_libzfs" = xyes && test x"$libzfs_excuse" != x ; then
  1536. AC_MSG_ERROR([libzfs support was explicitly requested but requirements are not satisfied ($libzfs_excuse)])
  1537. fi
  1538. if test x"$libzfs_excuse" = x ; then
  1539. # We need both libzfs and libnvpair for a successful build.
  1540. LIBZFS="-lzfs"
  1541. AC_DEFINE([HAVE_LIBZFS], [1],
  1542. [Define to 1 if you have the ZFS library.])
  1543. LIBNVPAIR="-lnvpair"
  1544. AC_DEFINE([HAVE_LIBNVPAIR], [1],
  1545. [Define to 1 if you have the NVPAIR library.])
  1546. fi
  1547. AC_SUBST([LIBZFS])
  1548. AC_SUBST([LIBNVPAIR])
  1549. LIBS=""
  1550. AC_SUBST([FONT_SOURCE])
  1551. AS_IF([test x$target_cpu = xi386 -a x$platform = xqemu],
  1552. [AC_SUBST([GRUB_BOOT_MACHINE_LINK_ADDR], 0xffe00)])
  1553. AC_SUBST(HAVE_ASM_USCORE)
  1554. AC_SUBST(BSS_START_SYMBOL)
  1555. AC_SUBST(END_SYMBOL)
  1556. AC_SUBST(PACKAGE)
  1557. AC_SUBST(VERSION)
  1558. AC_ARG_ENABLE([werror],
  1559. [AS_HELP_STRING([--disable-werror],
  1560. [do not use -Werror when building GRUB])])
  1561. if test x"$enable_werror" != xno ; then
  1562. TARGET_CFLAGS="$TARGET_CFLAGS -Werror"
  1563. HOST_CFLAGS="$HOST_CFLAGS -Werror"
  1564. fi
  1565. TARGET_CPP="$TARGET_CC -E"
  1566. TARGET_CCAS=$TARGET_CC
  1567. # Includes which include make-time substitutions. They must come last
  1568. # as to avoid executing top_builddir in shell.
  1569. HOST_CPPFLAGS="$HOST_CPPFLAGS -I\$(top_builddir)/include"
  1570. TARGET_CPPFLAGS="$TARGET_CPPFLAGS -I\$(top_srcdir)/include"
  1571. TARGET_CPPFLAGS="$TARGET_CPPFLAGS -I\$(top_builddir)/include"
  1572. GRUB_TARGET_CPU="${target_cpu}"
  1573. GRUB_PLATFORM="${platform}"
  1574. AC_SUBST(GRUB_TARGET_CPU)
  1575. AC_SUBST(GRUB_PLATFORM)
  1576. AC_SUBST(TARGET_OBJCONV)
  1577. AC_SUBST(TARGET_CPP)
  1578. AC_SUBST(TARGET_CCAS)
  1579. AC_SUBST(TARGET_OBJ2ELF)
  1580. AC_SUBST(TARGET_MODULE_FORMAT)
  1581. AC_SUBST(TARGET_CC_VERSION)
  1582. AC_SUBST(TARGET_CFLAGS)
  1583. AC_SUBST(TARGET_LDFLAGS)
  1584. AC_SUBST(TARGET_CPPFLAGS)
  1585. AC_SUBST(TARGET_CCASFLAGS)
  1586. AC_SUBST(TARGET_IMG_LDFLAGS)
  1587. AC_SUBST(TARGET_IMG_CFLAGS)
  1588. AC_SUBST(TARGET_IMG_BASE_LDOPT)
  1589. AC_SUBST(TARGET_APPLE_LINKER)
  1590. AC_SUBST(HOST_CFLAGS)
  1591. AC_SUBST(HOST_LDFLAGS)
  1592. AC_SUBST(HOST_CPPFLAGS)
  1593. AC_SUBST(HOST_CCASFLAGS)
  1594. AC_SUBST(BUILD_LIBM)
  1595. #
  1596. # Automake conditionals
  1597. #
  1598. AM_CONDITIONAL([COND_real_platform], [test x$platform != xnone])
  1599. AM_CONDITIONAL([COND_emu], [test x$platform = xemu])
  1600. AM_CONDITIONAL([COND_i386_pc], [test x$target_cpu = xi386 -a x$platform = xpc])
  1601. AM_CONDITIONAL([COND_i386_efi], [test x$target_cpu = xi386 -a x$platform = xefi])
  1602. AM_CONDITIONAL([COND_ia64_efi], [test x$target_cpu = xia64 -a x$platform = xefi])
  1603. AM_CONDITIONAL([COND_i386_qemu], [test x$target_cpu = xi386 -a x$platform = xqemu])
  1604. AM_CONDITIONAL([COND_i386_ieee1275], [test x$target_cpu = xi386 -a x$platform = xieee1275])
  1605. AM_CONDITIONAL([COND_i386_coreboot], [test x$target_cpu = xi386 -a x$platform = xcoreboot])
  1606. AM_CONDITIONAL([COND_i386_multiboot], [test x$target_cpu = xi386 -a x$platform = xmultiboot])
  1607. AM_CONDITIONAL([COND_x86_64_efi], [test x$target_cpu = xx86_64 -a x$platform = xefi])
  1608. AM_CONDITIONAL([COND_i386_xen], [test x$target_cpu = xi386 -a x$platform = xxen])
  1609. AM_CONDITIONAL([COND_x86_64_xen], [test x$target_cpu = xx86_64 -a x$platform = xxen])
  1610. AM_CONDITIONAL([COND_mips_loongson], [test x$target_cpu = xmipsel -a x$platform = xloongson])
  1611. AM_CONDITIONAL([COND_mips_qemu_mips], [test "(" x$target_cpu = xmips -o x$target_cpu = xmipsel ")" -a x$platform = xqemu_mips])
  1612. AM_CONDITIONAL([COND_mips_arc], [test "(" x$target_cpu = xmips -o x$target_cpu = xmipsel ")" -a x$platform = xarc])
  1613. AM_CONDITIONAL([COND_sparc64_ieee1275], [test x$target_cpu = xsparc64 -a x$platform = xieee1275])
  1614. AM_CONDITIONAL([COND_sparc64_emu], [test x$target_cpu = xsparc64 -a x$platform = xemu])
  1615. AM_CONDITIONAL([COND_powerpc_ieee1275], [test x$target_cpu = xpowerpc -a x$platform = xieee1275])
  1616. AM_CONDITIONAL([COND_mips], [test x$target_cpu = xmips -o x$target_cpu = xmipsel])
  1617. AM_CONDITIONAL([COND_mipsel], [test x$target_cpu = xmipsel])
  1618. AM_CONDITIONAL([COND_mipseb], [test x$target_cpu = xmips])
  1619. AM_CONDITIONAL([COND_arm], [test x$target_cpu = xarm ])
  1620. AM_CONDITIONAL([COND_arm_uboot], [test x$target_cpu = xarm -a x$platform = xuboot])
  1621. AM_CONDITIONAL([COND_arm_efi], [test x$target_cpu = xarm -a x$platform = xefi])
  1622. AM_CONDITIONAL([COND_arm64], [test x$target_cpu = xarm64 ])
  1623. AM_CONDITIONAL([COND_arm64_efi], [test x$target_cpu = xarm64 -a x$platform = xefi])
  1624. AM_CONDITIONAL([COND_HOST_HURD], [test x$host_kernel = xhurd])
  1625. AM_CONDITIONAL([COND_HOST_LINUX], [test x$host_kernel = xlinux])
  1626. AM_CONDITIONAL([COND_HOST_NETBSD], [test x$host_kernel = xnetbsd])
  1627. AM_CONDITIONAL([COND_HOST_WINDOWS], [test x$host_kernel = xwindows])
  1628. AM_CONDITIONAL([COND_HOST_KFREEBSD], [test x$host_kernel = xkfreebsd])
  1629. AM_CONDITIONAL([COND_HOST_XNU], [test x$host_kernel = xxnu])
  1630. AM_CONDITIONAL([COND_HOST_ILLUMOS], [test x$host_kernel = xillumos])
  1631. AM_CONDITIONAL([COND_MAN_PAGES], [test x$cross_compiling = xno -a x$HELP2MAN != x])
  1632. AM_CONDITIONAL([COND_GRUB_EMU_SDL], [test x$enable_grub_emu_sdl = xyes])
  1633. AM_CONDITIONAL([COND_GRUB_EMU_PCI], [test x$enable_grub_emu_pci = xyes])
  1634. AM_CONDITIONAL([COND_GRUB_MKFONT], [test x$enable_grub_mkfont = xyes])
  1635. AM_CONDITIONAL([COND_GRUB_MOUNT], [test x$enable_grub_mount = xyes])
  1636. AM_CONDITIONAL([COND_HAVE_FONT_SOURCE], [test x$FONT_SOURCE != x])
  1637. if test x$FONT_SOURCE != x ; then
  1638. HAVE_FONT_SOURCE=1
  1639. else
  1640. HAVE_FONT_SOURCE=0
  1641. fi
  1642. AC_SUBST(HAVE_FONT_SOURCE)
  1643. AM_CONDITIONAL([COND_APPLE_LINKER], [test x$TARGET_APPLE_LINKER = x1])
  1644. AM_CONDITIONAL([COND_ENABLE_EFIEMU], [test x$enable_efiemu = xyes])
  1645. AM_CONDITIONAL([COND_ENABLE_CACHE_STATS], [test x$DISK_CACHE_STATS = x1])
  1646. AM_CONDITIONAL([COND_ENABLE_BOOT_TIME_STATS], [test x$BOOT_TIME_STATS = x1])
  1647. AM_CONDITIONAL([COND_HAVE_CXX], [test x$HAVE_CXX = xyes])
  1648. AM_CONDITIONAL([COND_HAVE_ASM_USCORE], [test x$HAVE_ASM_USCORE = x1])
  1649. AM_CONDITIONAL([COND_STARFIELD], [test "x$starfield_excuse" = x])
  1650. AM_CONDITIONAL([COND_HAVE_EXEC], [test "x$have_exec" = xy])
  1651. test "x$prefix" = xNONE && prefix="$ac_default_prefix"
  1652. test "x$exec_prefix" = xNONE && exec_prefix="${prefix}"
  1653. datarootdir="$(eval echo "$datarootdir")"
  1654. grub_libdir="$(eval echo "$libdir")"
  1655. grub_localedir="$(eval echo "$localedir")"
  1656. grub_datadir="$(eval echo "$datadir")"
  1657. grub_sysconfdir="$(eval echo "$sysconfdir")"
  1658. AC_DEFINE_UNQUOTED(LOCALEDIR, "$grub_localedir", [Locale dir])
  1659. AC_DEFINE_UNQUOTED(GRUB_LIBDIR, "$grub_libdir", [Library dir])
  1660. AC_DEFINE_UNQUOTED(GRUB_DATADIR, "$grub_datadir", [Data dir])
  1661. AC_DEFINE_UNQUOTED(GRUB_SYSCONFDIR, "$grub_sysconfdir", [Configuration dir])
  1662. # Output files.
  1663. if test "$platform" != none; then
  1664. cpudir="${target_cpu}"
  1665. if test x${cpudir} = xmipsel; then
  1666. cpudir=mips;
  1667. fi
  1668. grub_CHECK_LINK_DIR
  1669. if test x"$link_dir" = xyes ; then
  1670. AC_CONFIG_LINKS([include/grub/cpu:include/grub/$cpudir])
  1671. if test "$platform" != emu ; then
  1672. AC_CONFIG_LINKS([include/grub/machine:include/grub/$cpudir/$platform])
  1673. fi
  1674. else
  1675. mkdir -p include/grub 2>/dev/null
  1676. rm -rf include/grub/cpu
  1677. cp -rp $srcdir/include/grub/$cpudir include/grub/cpu 2>/dev/null
  1678. if test "$platform" != emu ; then
  1679. rm -rf include/grub/machine
  1680. cp -rp $srcdir/include/grub/$cpudir/$platform include/grub/machine 2>/dev/null
  1681. fi
  1682. fi
  1683. else
  1684. # Just enough to stop the compiler failing with -I$(srcdir)/include.
  1685. mkdir -p include 2>/dev/null
  1686. rm -rf include/grub/cpu include/grub/machine
  1687. fi
  1688. AC_CONFIG_FILES([Makefile])
  1689. AC_CONFIG_FILES([grub-core/Makefile])
  1690. AC_CONFIG_FILES([grub-core/gnulib/Makefile])
  1691. AC_CONFIG_FILES([po/Makefile.in])
  1692. AC_CONFIG_FILES([docs/Makefile])
  1693. AC_CONFIG_FILES([util/bash-completion.d/Makefile])
  1694. AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h])
  1695. AC_CONFIG_FILES([config.h])
  1696. AC_OUTPUT
  1697. [
  1698. echo "*******************************************************"
  1699. echo GRUB2 will be compiled with following components:
  1700. echo Platform: "$target_cpu"-"$platform"
  1701. if [ x"$platform" = xemu ]; then
  1702. if [ x"$grub_emu_sdl_excuse" = x ]; then
  1703. echo SDL support for grub-emu: Yes
  1704. else
  1705. echo SDL support for grub-emu: No "($grub_emu_sdl_excuse)"
  1706. fi
  1707. if [ x"$grub_emu_pci_excuse" = x ]; then
  1708. echo PCI support for grub-emu: Yes
  1709. else
  1710. echo PCI support for grub-emu: No "($grub_emu_pci_excuse)"
  1711. fi
  1712. fi
  1713. if test x"$device_mapper_excuse" = x ; then
  1714. echo With devmapper support: Yes
  1715. else
  1716. echo With devmapper support: No "($device_mapper_excuse)"
  1717. fi
  1718. if [ x"$enable_mm_debug" = xyes ]; then
  1719. echo With memory debugging: Yes
  1720. else
  1721. echo With memory debugging: No
  1722. fi
  1723. if [ x"$enable_cache_stats" = xyes ]; then
  1724. echo With disk cache statistics: Yes
  1725. else
  1726. echo With disk cache statistics: No
  1727. fi
  1728. if [ x"$enable_boot_time" = xyes ]; then
  1729. echo With boot time statistics: Yes
  1730. else
  1731. echo With boot time statistics: No
  1732. fi
  1733. if [ x"$efiemu_excuse" = x ]; then
  1734. echo efiemu runtime: Yes
  1735. else
  1736. echo efiemu runtime: No "($efiemu_excuse)"
  1737. fi
  1738. if [ x"$grub_mkfont_excuse" = x ]; then
  1739. echo grub-mkfont: Yes
  1740. else
  1741. echo grub-mkfont: No "($grub_mkfont_excuse)"
  1742. fi
  1743. if [ x"$grub_mount_excuse" = x ]; then
  1744. echo grub-mount: Yes
  1745. else
  1746. echo grub-mount: No "($grub_mount_excuse)"
  1747. fi
  1748. if [ x"$starfield_excuse" = x ]; then
  1749. echo starfield theme: Yes
  1750. echo With DejaVuSans font from $DJVU_FONT_SOURCE
  1751. else
  1752. echo starfield theme: No "($starfield_excuse)"
  1753. fi
  1754. if [ x"$libzfs_excuse" = x ]; then
  1755. echo With libzfs support: Yes
  1756. else
  1757. echo With libzfs support: No "($libzfs_excuse)"
  1758. fi
  1759. if [ x"$grub_build_mkfont_excuse" = x ]; then
  1760. echo Build-time grub-mkfont: Yes
  1761. if test "x$FONT_SOURCE" = x ; then
  1762. echo "Without unifont"
  1763. else
  1764. echo "With unifont from $FONT_SOURCE"
  1765. fi
  1766. else
  1767. echo Build-time grub-mkfont: No "($grub_build_mkfont_excuse)"
  1768. echo "Without unifont (no build-time grub-mkfont)"
  1769. fi
  1770. if test x"$liblzma_excuse" != x ; then
  1771. echo "Without liblzma (no support for XZ-compressed mips images) ($liblzma_excuse)"
  1772. else
  1773. echo "With liblzma from $LIBLZMA (support for XZ-compressed mips images)"
  1774. fi
  1775. echo "*******************************************************"
  1776. ]