From: Khem Raj Date: Mon, 29 Sep 2025 15:36:47 +0000 (-0700) Subject: gn: Add recipe X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e8dbf41f1f40ae3a5f9641429cad974f716f1f3e;p=thirdparty%2Fopenembedded%2Fopenembedded-core-contrib.git gn: Add recipe gn is a commonly used build tool to generate ninja files, used in a lot of recipes e.g. chromium, qtwebengine, perfetto, hafnium etc. these recipes come from different layers e.g. meta-qt6/meta-arm/meta-oe since not all layers depend on meta-oe ( meta-arm does not ), its not a possible option. Given the usecases, putting it in core will benefit the ecosystem and reduce some duplication. This recipe is taken from meta-arm Disable maybe-initialized is a gcc specific option as error Disable format warnings as errors, it adds -Wno-format explictly in its build system Signed-off-by: Khem Raj Signed-off-by: Mathieu Dubois-Briand --- diff --git a/meta/conf/distro/include/maintainers.inc b/meta/conf/distro/include/maintainers.inc index c6c1de6b5a..b48c53ef11 100644 --- a/meta/conf/distro/include/maintainers.inc +++ b/meta/conf/distro/include/maintainers.inc @@ -223,6 +223,7 @@ RECIPE_MAINTAINER:pn-glibc-scripts = "Khem Raj " RECIPE_MAINTAINER:pn-glibc-testsuite = "Khem Raj " RECIPE_MAINTAINER:pn-gmp = "Khem Raj " RECIPE_MAINTAINER:pn-glslang = "Jose Quaresma " +RECIPE_MAINTAINER:pn-gn = "Khem Raj " RECIPE_MAINTAINER:pn-gnome-desktop-testing = "Ross Burton " RECIPE_MAINTAINER:pn-gnu-config = "Robert Yang " RECIPE_MAINTAINER:pn-gnu-efi = "Yi Zhao " diff --git a/meta/conf/distro/include/security_flags.inc b/meta/conf/distro/include/security_flags.inc index f713a99465..824ba2c0e3 100644 --- a/meta/conf/distro/include/security_flags.inc +++ b/meta/conf/distro/include/security_flags.inc @@ -46,6 +46,7 @@ SECURITY_LDFLAGS:pn-sysklogd = "" # Recipes which fail to compile when elevating -Wformat-security to an error SECURITY_STRINGFORMAT:pn-busybox = "" SECURITY_STRINGFORMAT:pn-gcc = "" +SECURITY_STRINGFORMAT:pn-gn = "" TARGET_CC_ARCH:append:class-target = " ${SECURITY_CFLAGS}" TARGET_LDFLAGS:append:class-target = " ${SECURITY_LDFLAGS}" diff --git a/meta/recipes-devtools/gn/gn_git.bb b/meta/recipes-devtools/gn/gn_git.bb new file mode 100644 index 0000000000..d8896609b1 --- /dev/null +++ b/meta/recipes-devtools/gn/gn_git.bb @@ -0,0 +1,52 @@ +SUMMARY = "GN is a meta-build system that generates build files for Ninja" +HOMEPAGE = "https://gn.googlesource.com/gn/" +LICENSE = "BSD-3-Clause" +LIC_FILES_CHKSUM = "file://LICENSE;md5=0fca02217a5d49a14dfe2d11837bb34d" + +DEPENDS += "ninja-native" +UPSTREAM_CHECK_COMMITS = "1" + +SRC_URI = "git://gn.googlesource.com/gn;protocol=https;branch=main" +SRCREV = "81b24e01531ecf0eff12ec9359a555ec3944ec4e" +PV = "0+git" + +BB_GIT_SHALLOW = "" + +B = "${WORKDIR}/build" + +# Map from our _OS strings to the GN's platform values. +def gn_platform(variable, d): + os = d.getVar(variable) + if "linux" in os: + return "linux" + elif "mingw" in os: + return "mingw" + else: + return os + +do_configure[cleandirs] += "${B}" +do_configure() { + python3 ${S}/build/gen.py \ + --platform=${@gn_platform("TARGET_OS", d)} \ + --out-path=${B} \ + --no-static-libstdc++ \ + --no-strip +} + +# Catch build progress from ninja +do_compile[progress] = "outof:^\[(\d+)/(\d+)\]\s+" + +do_compile() { + ninja -C ${B} --verbose +} + +do_install() { + install -d ${D}${bindir} + install ${B}/gn ${D}${bindir} +} + +BBCLASSEXTEND = "native" + +COMPATIBLE_HOST = "^(?!riscv32).*" + +CFLAGS:append:toolchain-gcc = " -Wno-error=maybe-uninitialized"