configure.ac 71 KB

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