From patchwork Sun Jun 10 20:44:49 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joseph Kogut X-Patchwork-Id: 927425 Return-Path: X-Original-To: incoming-buildroot@patchwork.ozlabs.org Delivered-To: patchwork-incoming-buildroot@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=busybox.net (client-ip=140.211.166.133; helo=hemlock.osuosl.org; envelope-from=buildroot-bounces@busybox.net; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="BfbNwMDH"; dkim-atps=neutral Received: from hemlock.osuosl.org (smtp2.osuosl.org [140.211.166.133]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 413p7l6w9nz9s2t for ; Mon, 11 Jun 2018 06:45:39 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by hemlock.osuosl.org (Postfix) with ESMTP id 5446787F1B; Sun, 10 Jun 2018 20:45:38 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from hemlock.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Nms04nEbeRpa; Sun, 10 Jun 2018 20:45:35 +0000 (UTC) Received: from ash.osuosl.org (ash.osuosl.org [140.211.166.34]) by hemlock.osuosl.org (Postfix) with ESMTP id 82C1C88162; Sun, 10 Jun 2018 20:45:35 +0000 (UTC) X-Original-To: buildroot@lists.busybox.net Delivered-To: buildroot@osuosl.org Received: from silver.osuosl.org (smtp3.osuosl.org [140.211.166.136]) by ash.osuosl.org (Postfix) with ESMTP id 12F751C01B3 for ; Sun, 10 Jun 2018 20:45:23 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by silver.osuosl.org (Postfix) with ESMTP id 0D617244A8 for ; Sun, 10 Jun 2018 20:45:23 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from silver.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id dn1-JPhTIBRM for ; Sun, 10 Jun 2018 20:45:20 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mail-pg0-f53.google.com (mail-pg0-f53.google.com [74.125.83.53]) by silver.osuosl.org (Postfix) with ESMTPS id 088082457A for ; Sun, 10 Jun 2018 20:45:20 +0000 (UTC) Received: by mail-pg0-f53.google.com with SMTP id 15-v6so8766458pge.2 for ; Sun, 10 Jun 2018 13:45:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=O/db1fICXn9aeVwXtVMRce5iDYpwCJ7KrkC4tk0DSWI=; b=BfbNwMDHP53kd4Ogx7/gu2tWqsw/uJNftOPpGl3qRqd5WwqYLiNHF5aIYS31TqvEur Wu4DG9x/GcUAz99fhuPyd/+KAcZI2lGVlQv5TyKt+iAb1w2qW/e/a93nBtAMWAlIOunS KtCJp/l4NDb+HHFl2krTRea1nczdl5SCUjYlnP8ssj5L24DRuhPz64uNnAuUk/QRMi9R Aq3ErbwC9ARm4z4ALL4a4f5F8WgzXS+jo8YeWEbv1ZdrrPAUvxpHY6/i9avGjCueXZXI eAUCpyZmVacGek0dmNuuoPYRUgOGS8Ac5rpMya8PJrX15HNwhrATPR/Iew2DM53fRKYb B29A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=O/db1fICXn9aeVwXtVMRce5iDYpwCJ7KrkC4tk0DSWI=; b=pVKuN53ixZZAC2Z41E6GaSVCUAPqDDg/vk1XUhrE5RR6rCF7cr269XvqKKIMRTHJSR MRlzEUMBADaw/09eIxW+GKWtANOcu51CiHFov2YXPm+YDQ+P/1s+1uEjkxzr8+ZDwy6A gdQVy5nrkd45Xhf7BITxuTy9WMjjPMARlNMctExZEg58I+8HV+mWn4stBmjN1lBAEisc o5fI4hy+z/SL/upjs54fmnOnN2agMEvyJM3MRV9L6Jf0zxLcH8WJAICP5ZlPEb7BYFqW stpjrFeM6zZQu3/oeIl/2FP6Wpgr7UBz7X9pO62I/OaPfwmHd7v06Ct8wec+6F6sEaMX d+5w== X-Gm-Message-State: APt69E3V8f8K8e8QWo7T56yDJ00QXh74YFvjwXGSLZ/jWHbgy/a2QEa1 VyNYbvrdHxpVA02hhFDnrYh58fM4 X-Google-Smtp-Source: ADUXVKL3Y/4YWTaH5+7+gmp17sqPWEqkPNLAiMvu0Rtqtr0F0A+tTtBpgiSy/Q3TYDhmSQxDpBElpw== X-Received: by 2002:a63:a902:: with SMTP id u2-v6mr7380701pge.67.1528663519348; Sun, 10 Jun 2018 13:45:19 -0700 (PDT) Received: from JAKWS.YakimaSteel.local ([162.251.69.147]) by smtp.gmail.com with ESMTPSA id g12-v6sm28256397pfh.164.2018.06.10.13.45.18 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 10 Jun 2018 13:45:18 -0700 (PDT) From: Joseph Kogut To: buildroot@buildroot.org Date: Sun, 10 Jun 2018 13:44:49 -0700 Message-Id: <20180610204449.13646-11-joseph.kogut@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180610204449.13646-1-joseph.kogut@gmail.com> References: <20180608225932.13127-1-joseph.kogut@gmail.com> <20180610204449.13646-1-joseph.kogut@gmail.com> Subject: [Buildroot] [RFC PATCH v2 9/9] chromium: new package X-BeenThere: buildroot@busybox.net X-Mailman-Version: 2.1.24 Precedence: list List-Id: Discussion and development of buildroot List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Valentin Korenblit , Joseph Kogut , Fabrice Fontaine MIME-Version: 1.0 Errors-To: buildroot-bounces@busybox.net Sender: "buildroot" Signed-off-by: Joseph Kogut --- DEVELOPERS | 1 + package/Config.in | 1 + package/chromium/Config.in | 44 +++++++++ package/chromium/chromium.hash | 4 + package/chromium/chromium.mk | 137 ++++++++++++++++++++++++++++ package/chromium/toolchain/BUILD.gn | 71 ++++++++++++++ 6 files changed, 258 insertions(+) create mode 100644 package/chromium/Config.in create mode 100644 package/chromium/chromium.hash create mode 100644 package/chromium/chromium.mk create mode 100644 package/chromium/toolchain/BUILD.gn diff --git a/DEVELOPERS b/DEVELOPERS index ef6fd32fed..1ad680509c 100644 --- a/DEVELOPERS +++ b/DEVELOPERS @@ -957,6 +957,7 @@ F: configs/qemu_ppc64le_pseries_defconfig N: Joseph Kogut F: package/at-spi2-atk/ F: package/at-spi2-core/ +F: package/chromium/ F: package/gconf/ F: package/libnss/ F: package/lld/ diff --git a/package/Config.in b/package/Config.in index e4eb87b574..80248a798c 100644 --- a/package/Config.in +++ b/package/Config.in @@ -14,6 +14,7 @@ menu "Audio and video applications" source "package/aumix/Config.in" source "package/bellagio/Config.in" source "package/bluez-alsa/Config.in" + source "package/chromium/Config.in" source "package/dvblast/Config.in" source "package/dvdauthor/Config.in" source "package/dvdrw-tools/Config.in" diff --git a/package/chromium/Config.in b/package/chromium/Config.in new file mode 100644 index 0000000000..db4623f554 --- /dev/null +++ b/package/chromium/Config.in @@ -0,0 +1,44 @@ +config BR2_PACKAGE_CHROMIUM + bool "chromium" + select BR2_PACKAGE_ALSA_LIB + select BR2_PACKAGE_CUPS + select BR2_PACKAGE_DBUS + select BR2_PACKAGE_FREETYPE + select BR2_PACKAGE_HARFBUZZ + select BR2_PACKAGE_LLVM_ENABLE_HOST_ARCH + select BR2_PACKAGE_HOST_CLANG + select BR2_PACKAGE_HOST_LLD + select BR2_PACKAGE_HOST_NINJA + select BR2_PACKAGE_HOST_NODEJS + select BR2_PACKAGE_HOST_PYTHON + select BR2_PACKAGE_JPEG + select BR2_PACKAGE_LIBDRM + select BR2_PACKAGE_LIBERATION # runtime + select BR2_PACKAGE_LIBGLIB2 + select BR2_PACKAGE_LIBGTK2 if !BR2_PACKAGE_LIBGTK3_X11 + select BR2_PACKAGE_LIBKRB5 + select BR2_PACKAGE_LIBNSS + select BR2_PACKAGE_LIBPNG + select BR2_PACKAGE_PCIUTILS + select BR2_PACKAGE_XLIB_LIBXCOMPOSITE + select BR2_PACKAGE_XLIB_LIBXCURSOR + select BR2_PACKAGE_XLIB_LIBXRANDR + select BR2_PACKAGE_XLIB_LIBXSCRNSAVER + depends on BR2_PACKAGE_HAS_LIBGL + depends on BR2_PACKAGE_XORG7 + depends on BR2_TOOLCHAIN_USES_GLIBC + depends on BR2_arm || BR2_aarch64 || BR2_i386 || BR2_x86_64 + +config BR2_PACKAGE_CHROMIUM_TARGET_ARCH + string + default "arm" if BR2_arm + default "arm64" if BR2_aarch64 + default "x86" if BR2_i386 + default "x64" if BR2_x86_64 + default "mips" if BR2_mips + +comment "chromium needs toolchain w/ Glibc" + depends on !BR2_TOOLCHAIN_USES_GLIBC + +comment "chromium depends on X.org and needs an OpenGL backend" + depends on !BR2_PACKAGE_XORG7 || !BR2_PACKAGE_HAS_LIBGL diff --git a/package/chromium/chromium.hash b/package/chromium/chromium.hash new file mode 100644 index 0000000000..1af15cb23b --- /dev/null +++ b/package/chromium/chromium.hash @@ -0,0 +1,4 @@ +# locally calculated +sha256 f8b1e5319163e378027826b12cf256b97423bb90e10e2013469d96e03bc9db8a chromium-67.0.3396.79.tar.xz +sha256 845022e0c1db1abb41a6ba4cd3c4b674ec290f3359d9d3c78ae558d4c0ed9308 LICENSE + diff --git a/package/chromium/chromium.mk b/package/chromium/chromium.mk new file mode 100644 index 0000000000..4e6d90c52d --- /dev/null +++ b/package/chromium/chromium.mk @@ -0,0 +1,137 @@ +############################################################################### +# +# Chromium +# +############################################################################### + +CHROMIUM_VERSION = 67.0.3396.79 +CHROMIUM_SITE = https://commondatastorage.googleapis.com/chromium-browser-official +CHROMIUM_SOURCE = chromium-$(CHROMIUM_VERSION).tar.xz +CHROMIUM_LICENSE = BSD-Style +CHROMIUM_LICENSE_FILES = LICENSE +CHROMIUM_DEPENDENCIES = alsa-lib cups dbus freetype harfbuzz \ + host-clang host-lld host-ninja host-nodejs host-python \ + jpeg libdrm libglib2 libkrb5 libnss libpng pciutils \ + xlib_libXcomposite xlib_libXScrnSaver xlib_libXcursor \ + xlib_libXrandr zlib + +CHROMIUM_TOOLCHAIN_CONFIG_PATH = $(shell pwd)/package/chromium/toolchain + +CHROMIUM_OPTS = \ + host_toolchain=\"$(CHROMIUM_TOOLCHAIN_CONFIG_PATH):host\" \ + v8_snapshot_toolchain=\"$(CHROMIUM_TOOLCHAIN_CONFIG_PATH):v8_snapshot\" \ + custom_toolchain=\"$(CHROMIUM_TOOLCHAIN_CONFIG_PATH):target\" \ + use_lld=true \ + is_clang=true \ + clang_use_chrome_plugins=false \ + treat_warnings_as_errors=false \ + use_gnome_keyring=false \ + linux_use_bundled_binutils=false \ + use_sysroot=false \ + target_sysroot=\"$(STAGING_DIR)\" \ + target_cpu=\"$(BR2_PACKAGE_CHROMIUM_TARGET_ARCH)\" \ + enable_nacl=false \ + use_dbus=true \ + use_cups=true \ + use_system_zlib=true \ + use_system_libjpeg=true \ + use_system_libpng=true \ + use_system_libdrm=true \ + use_system_harfbuzz=true \ + use_system_freetype=true + +# tcmalloc has portability issues +CHROMIUM_OPTS += use_allocator=\"none\" + +ifeq ($(BR2_ENABLE_DEBUG),y) + CHROMIUM_OPTS += is_debug=true +else + CHROMIUM_OPTS += is_debug=false +endif + +ifeq ($(BR2_PACKAGE_PULSEAUDIO),y) + CHROMIUM_DEPENDENCIES += pulseaudio + CHROMIUM_OPTS += use_pulseaudio=true +else + CHROMIUM_OPTS += use_pulseaudio=false +endif + +ifeq ($(BR2_PACKAGE_LIBGTK3),y) + CHROMIUM_DEPENDENCIES += libgtk3 + CHROMIUM_OPTS += use_gtk3=true +else + CHROMIUM_OPTS += use_gtk3=false +endif + +ifeq ($(BR2_TOOLCHAIN_EXTERNAL),y) +CHROMIUM_TARGET_LDFLAGS += --gcc-toolchain=$(TOOLCHAIN_EXTERNAL_INSTALL_DIR) +else +CHROMIUM_TARGET_LDFLAGS += --gcc-toolchain=$(HOST_DIR) +endif + +CHROMIUM_TARGET_CFLAGS += $(CHROMIUM_TARGET_LDFLAGS) +CHROMIUM_TARGET_CXXFLAGS += $(CHROMIUM_TARGET_CFLAGS) + +CHROMIUM_HOST_CFLAGS += --target=$(HOSTARCH)-buildroot-linux-gnu +CHROMIUM_HOST_CXXFLAGS += $(CHROMIUM_HOST_CFLAGS) +CHROMIUM_HOST_LDFLAGS += --gcc-toolchain="/usr" + +define CHROMIUM_CONFIGURE_CMDS + mkdir -p $(@D)/third_party/node/linux/node-linux-x64/bin + ln -sf $(HOST_DIR)/bin/node $(@D)/third_party/node/linux/node-linux-x64/bin/ + + # The host's toolchain (GCC) is used for generating binaries that are to be + # run on the host. We can use Buildroot's HOST_*FLAGS variables for this + # toolchain. + # + # The generated host-clang toolchain is used for binaries that are built for + # the target, as well as for the V8 engine that's used to generate the V8 + # snapshot on the host. + ( cd $(@D); \ + $(TARGET_MAKE_ENV) \ + $(HOST_DIR)/bin/python2 tools/gn/bootstrap/bootstrap.py -s --no-clean; \ + HOST_AR="$(HOSTAR)" \ + HOST_NM="$(HOSTNM)" \ + HOST_CC="$(HOSTCC)" \ + HOST_CXX="$(HOSTCXX)" \ + HOST_CFLAGS="$(HOST_CFLAGS)" \ + HOST_CXXFLAGS="$(HOST_CXXFLAGS)" \ + V8_AR="$(HOSTAR)" \ + V8_NM="$(HOSTNM)" \ + V8_CC="clang" \ + V8_CXX="clang++" \ + V8_CFLAGS="$(CHROMIUM_HOST_CFLAGS)" \ + V8_CXXFLAGS="$(CHROMIUM_HOST_CXXFLAGS)" \ + V8_LDFLAGS="$(CHROMIUM_HOST_LDFLAGS)" \ + TARGET_AR="ar" \ + TARGET_NM="nm" \ + TARGET_CC="clang" \ + TARGET_CXX="clang++" \ + TARGET_CFLAGS="$(CHROMIUM_TARGET_CFLAGS)" \ + TARGET_CXXFLAGS="$(CHROMIUM_TARGET_CXXFLAGS)" \ + TARGET_LDFLAGS="$(CHROMIUM_TARGET_LDFLAGS)" \ + out/Release/gn gen out/Release --args="$(CHROMIUM_OPTS)" \ + --script-executable=$(HOST_DIR)/bin/python2 \ + ) +endef + +define CHROMIUM_BUILD_CMDS + ( cd $(@D); \ + $(TARGET_MAKE_ENV) \ + ninja -j$(PARALLEL_JOBS) -C out/Release chrome chrome_sandbox chromedriver \ + ) +endef + +define CHROMIUM_INSTALL_TARGET_CMDS + $(INSTALL) -D $(@D)/out/Release/chrome $(TARGET_DIR)/usr/lib/chromium/chromium + $(INSTALL) -Dm4755 $(@D)/out/Release/chrome_sandbox \ + $(TARGET_DIR)/usr/lib/chromium/chrome-sandbox + cp $(@D)/out/Release/{chrome_{100,200}_percent,resources}.pak \ + $(@D)/out/Release/{*.bin,chromedriver} \ + $(TARGET_DIR)/usr/lib/chromium/ + $(INSTALL) -Dm644 -t $(TARGET_DIR)/usr/lib/chromium/locales \ + $(@D)/out/Release/locales/*.pak + cp $(@D)/out/Release/icudtl.dat $(TARGET_DIR)/usr/lib/chromium/ +endef + +$(eval $(generic-package)) diff --git a/package/chromium/toolchain/BUILD.gn b/package/chromium/toolchain/BUILD.gn new file mode 100644 index 0000000000..e8525bd67d --- /dev/null +++ b/package/chromium/toolchain/BUILD.gn @@ -0,0 +1,71 @@ +import("//build/toolchain/gcc_toolchain.gni") +import("//build/config/sysroot.gni") + +gcc_toolchain("host") { + cc = getenv("HOST_CC") + cxx = getenv("HOST_CXX") + ar = getenv("HOST_AR") + nm = getenv("HOST_NM") + ld = cxx + + extra_cflags = getenv("HOST_CFLAGS") + extra_cppflags = getenv("HOST_CPPFLAGS") + extra_cxxflags = getenv("HOST_CXXFLAGS") + extra_ldflags = getenv("HOST_LDFLAGS") + + toolchain_args = { + cc_wrapper = "" + current_cpu = host_cpu + current_os = host_os + is_clang = false + use_sysroot = false + use_lld = false + } +} + +gcc_toolchain("target") { + cc = getenv("TARGET_CC") + cxx = getenv("TARGET_CXX") + ar = getenv("TARGET_AR") + nm = getenv("TARGET_NM") + ld = cxx + + extra_cflags = getenv("TARGET_CFLAGS") + extra_cppflags = getenv("TARGET_CPPFLAGS") + extra_cxxflags = getenv("TARGET_CXXFLAGS") + extra_ldflags = getenv("TARGET_LDFLAGS") + + toolchain_args = { + cc_wrapper = "" + current_cpu = target_cpu + current_os = target_os + is_clang = is_clang + use_sysroot = use_sysroot + } +} + +gcc_toolchain("v8_snapshot") { + cc = getenv("V8_CC") + cxx = getenv("V8_CXX") + ar = getenv("V8_AR") + nm = getenv("V8_NM") + ld = cxx + + extra_cflags = getenv("V8_CFLAGS") + extra_cppflags = getenv("V8_CPPFLAGS") + extra_cxxflags = getenv("V8_CXXFLAGS") + extra_ldflags = getenv("V8_LDFLAGS") + + toolchain_args = { + cc_wrapper = "" + if (target_cpu == "x86" || target_cpu == "arm" || target_cpu == "mipsel") { + current_cpu = "x86" + } else { + current_cpu = "x64" + } + current_os = host_os + is_clang = is_clang + use_sysroot = false + } +} +