configure.ac 79 KB

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