configure.ac 69 KB

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