configure.ac 80 KB

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