option.sh 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. # SPDX-License-Identifier: GPL-3.0-only
  2. # SPDX-FileCopyrightText: 2022 Caleb La Grange <thonkpeasant@protonmail.com>
  3. # SPDX-FileCopyrightText: 2022 Ferass El Hafidi <vitali64pmemail@protonmail.com>
  4. # SPDX-FileCopyrightText: 2020-2024 Leah Rowe <leah@libreboot.org>
  5. export LC_COLLATE=C
  6. export LC_ALL=C
  7. tmpdir_was_set="y"
  8. vendir="vendorfiles"
  9. appdir="${vendir}/app"
  10. cbdir="src/coreboot/default"
  11. cbcfgsdir="config/coreboot"
  12. ifdtool="cbutils/default/ifdtool"
  13. cbfstool="cbutils/default/cbfstool"
  14. grubcfgsdir="config/grub"
  15. layoutdir="/boot/grub/layouts"
  16. . "${grubcfgsdir}/modules.list"
  17. tmpgit="${PWD}/tmp/gitclone"
  18. err="err_"
  19. err_()
  20. {
  21. printf "ERROR %s: %s\n" "${0}" "${1}" 1>&2
  22. exit 1
  23. }
  24. setvars()
  25. {
  26. _setvars=""
  27. [ $# -lt 2 ] && $err "setvars: too few arguments"
  28. val="${1}" && shift 1
  29. for var in $@; do
  30. _setvars="${var}=\"${val}\"; ${_setvars}"
  31. done
  32. printf "%s\n" "${_setvars% }"
  33. }
  34. eval "$(setvars "" CONFIG_BOARD_DELL_E6400 CONFIG_HAVE_MRC CONFIG_HAVE_ME_BIN \
  35. CONFIG_ME_BIN_PATH CONFIG_KBC1126_FIRMWARE CONFIG_KBC1126_FW1 versiondate \
  36. CONFIG_KBC1126_FW1_OFFSET CONFIG_KBC1126_FW2 CONFIG_KBC1126_FW2_OFFSET \
  37. CONFIG_VGA_BIOS_FILE CONFIG_VGA_BIOS_ID CONFIG_GBE_BIN_PATH tmpdir _nogit \
  38. CONFIG_INCLUDE_SMSC_SCH5545_EC_FW CONFIG_SMSC_SCH5545_EC_FW_FILE version \
  39. CONFIG_IFD_BIN_PATH CONFIG_MRC_FILE _dest board boarddir lbmk_release \
  40. CONFIG_HAVE_REFCODE_BLOB CONFIG_REFCODE_BLOB_FILE threads projectname)"
  41. # if "y": a coreboot target won't be built if target.cfg says release="n"
  42. # (this is used to exclude certain build targets from releases)
  43. set | grep LBMK_RELEASE 1>/dev/null 2>/dev/null || lbmk_release="n" || :
  44. [ -z "$lbmk_release" ] && lbmk_release="$LBMK_RELEASE"
  45. [ "$lbmk_release" = "n" ] || [ "$lbmk_release" = "y" ] || lbmk_release="n"
  46. export LBMK_RELEASE="$lbmk_release"
  47. set | grep TMPDIR 1>/dev/null 2>/dev/null || tmpdir_was_set="n"
  48. if [ "${tmpdir_was_set}" = "y" ]; then
  49. [ "${TMPDIR%_*}" = "/tmp/lbmk" ] || tmpdir_was_set="n"
  50. fi
  51. if [ "${tmpdir_was_set}" = "n" ]; then
  52. export TMPDIR="/tmp"
  53. tmpdir="$(mktemp -d -t lbmk_XXXXXXXX)"
  54. export TMPDIR="${tmpdir}"
  55. else
  56. export TMPDIR="${TMPDIR}"
  57. tmpdir="${TMPDIR}"
  58. fi
  59. set | grep LBMK_THREADS 1>/dev/null 2>/dev/null && threads="$LBMK_THREADS"
  60. [ -z "$threads" ] && threads=1
  61. expr "X$threads" : "X-\{0,1\}[0123456789][0123456789]*$" \
  62. 1>/dev/null 2>/dev/null || threads=1 # user specified a non-integer
  63. export LBMK_THREADS="$threads"
  64. items()
  65. {
  66. rval=1
  67. if [ ! -d "${1}" ]; then
  68. printf "items: directory '%s' doesn't exist" "${1}" 1>&2
  69. return 1
  70. fi
  71. for x in "${1}/"*; do
  72. # -e used because this is for files *or* directories
  73. [ -e "${x}" ] || continue
  74. [ "${x##*/}" = "build.list" ] && continue
  75. printf "%s\n" "${x##*/}" 2>/dev/null
  76. rval=0
  77. done
  78. return ${rval}
  79. }
  80. scan_config()
  81. {
  82. awkstr=" /\{.*${1}.*}{/ {flag=1;next} /\}/{flag=0} flag { print }"
  83. confdir="${2}"
  84. revfile="$(mktemp -t sources.XXXXXXXXXX)"
  85. cat "${confdir}/"* > "${revfile}" || \
  86. $err "scan_config ${confdir}: Cannot concatenate files"
  87. while read -r line ; do
  88. set ${line} 1>/dev/null 2>/dev/null || :
  89. if [ "${1%:}" = "depend" ]; then
  90. depend="${depend} ${2}"
  91. else
  92. eval "${1%:}=\"${2}\""
  93. fi
  94. done << EOF
  95. $(eval "awk '${awkstr}' \"${revfile}\"")
  96. EOF
  97. rm -f "$revfile" || $err "scan_config: Cannot remove tmpfile"
  98. }
  99. check_defconfig()
  100. {
  101. for x in "${1}"/config/*; do
  102. [ -f "${x}" ] && return 1
  103. done
  104. }
  105. handle_coreboot_utils()
  106. {
  107. for util in cbfstool ifdtool; do
  108. x_ ./update trees ${_f} "src/coreboot/${1}/util/${util}"
  109. [ -z "${mode}" ] && [ ! -f "cbutils/${1}/${util}" ] && \
  110. x_ mkdir -p "cbutils/${1}" && \
  111. x_ cp "src/coreboot/${1}/util/${util}/${util}" \
  112. "cbutils/${1}"
  113. [ -z "${mode}" ] || x_ rm -Rf "cbutils/${1}"
  114. done
  115. }
  116. remkdir()
  117. {
  118. rm -Rf "${1}" || $err "remkdir: !rm -Rf \"${1}\""
  119. mkdir -p "${1}" || $err "remkdir: !mkdir -p \"${1}\""
  120. }
  121. x_() {
  122. [ $# -lt 1 ] || ${@} || $err "Unhandled non-zero exit: $@"; return 0
  123. }
  124. check_git()
  125. {
  126. which git 1>/dev/null 2>/dev/null || \
  127. git_err "git not installed. please install git-scm."
  128. git config --global user.name 1>/dev/null 2>/dev/null || \
  129. git_err "git config --global user.name \"John Doe\""
  130. git config --global user.email 1>/dev/null 2>/dev/null || \
  131. git_err "git config --global user.email \"john.doe@example.com\""
  132. }
  133. git_err()
  134. {
  135. printf "You need to set git name/email, like so:\n%s\n\n" "$1" 1>&2
  136. $err "Git name/email not configured"
  137. }
  138. check_project()
  139. {
  140. read -r projectname < projectname || :
  141. [ ! -f version ] || read -r version < version || :
  142. version_="${version}"
  143. [ ! -e ".git" ] || version="$(git describe --tags HEAD 2>&1)" || \
  144. version="git-$(git rev-parse HEAD 2>&1)" || version="${version_}"
  145. [ ! -f versiondate ] || read -r versiondate < versiondate || :
  146. versiondate_="${versiondate}"
  147. [ ! -e ".git" ] || versiondate="$(git show --no-patch --no-notes \
  148. --pretty='%ct' HEAD)" || versiondate="${versiondate_}"
  149. for p in projectname version versiondate; do
  150. eval "[ -n \"\$$p\" ] || $err \"$p unset\""
  151. eval "x_ printf \"%s\\n\" \"\$$p\" > $p"
  152. done
  153. export LOCALVERSION="-${projectname}-${version%%-*}"
  154. }
  155. mktar_release()
  156. {
  157. printf "%s\n" "${version}" > "${1}/version" || return 1
  158. printf "%s\n" "${versiondate}" > "${1}/versiondate" || return 1
  159. printf "%s\n" "${projectname}" > "${1}/projectname" || return 1
  160. mktarball "$1" "${1}.tar.xz"
  161. x_ rm -Rf "$1"
  162. }
  163. mktarball()
  164. {
  165. [ "${2%/*}" = "${2}" ] || \
  166. mkdir -p "${2%/*}" || $err "mk, !mkdir -p \"${2%/*}\""
  167. printf "\nCreating archive: %s\n\n" "$2"
  168. tar -c "$1" | xz -T$threads -9e > "$2" || \
  169. $err "mktarball 2, $1"
  170. mksha512sum "${2}" "${2##*/}.sha512"
  171. }
  172. mksha512sum()
  173. {
  174. (
  175. [ "${1%/*}" != "${1}" ] && x_ cd "${1%/*}"
  176. sha512sum ./"${1##*/}" >> "${2}" || \
  177. $err "!sha512sum \"${1}\" > \"${2}\""
  178. ) || $err "failed to create tarball checksum"
  179. }