From patchwork Fri Sep 6 09:09:40 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Romain Naour X-Patchwork-Id: 1158893 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=none (p=none dis=none) header.from=smile.fr Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=smile-fr.20150623.gappssmtp.com header.i=@smile-fr.20150623.gappssmtp.com header.b="aHgHaW+k"; dkim-atps=neutral Received: from hemlock.osuosl.org (smtp2.osuosl.org [140.211.166.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 46PsGB5lk8z9sDB for ; Fri, 6 Sep 2019 19:10:10 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by hemlock.osuosl.org (Postfix) with ESMTP id 6CB0387E13; Fri, 6 Sep 2019 09:10:06 +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 YKQ0KaZZMvdQ; Fri, 6 Sep 2019 09:10:04 +0000 (UTC) Received: from ash.osuosl.org (ash.osuosl.org [140.211.166.34]) by hemlock.osuosl.org (Postfix) with ESMTP id ECA1E87D0E; Fri, 6 Sep 2019 09:10:03 +0000 (UTC) X-Original-To: buildroot@lists.busybox.net Delivered-To: buildroot@osuosl.org Received: from hemlock.osuosl.org (smtp2.osuosl.org [140.211.166.133]) by ash.osuosl.org (Postfix) with ESMTP id 6AFEB1BF2E3 for ; Fri, 6 Sep 2019 09:10:00 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by hemlock.osuosl.org (Postfix) with ESMTP id 6771B87DCE for ; Fri, 6 Sep 2019 09:10:00 +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 2+EVOUzkW8cK for ; Fri, 6 Sep 2019 09:09:59 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mail-wm1-f67.google.com (mail-wm1-f67.google.com [209.85.128.67]) by hemlock.osuosl.org (Postfix) with ESMTPS id 0CCAE87B20 for ; Fri, 6 Sep 2019 09:09:59 +0000 (UTC) Received: by mail-wm1-f67.google.com with SMTP id r195so6194638wme.2 for ; Fri, 06 Sep 2019 02:09:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=smile-fr.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=zp+FDGC+8hxW2qA4RB22zv9FOPiCEqp/KqjTZDHxhME=; b=aHgHaW+kQjCv+JtEjU4RQ21en/RIlNTwwbSTR0VbPOBdKYJNagwRLeA9DSojZFVrpj 0NfMIwQL6m2kJitwv1ZqoEUCGauqzwSpNdjCEcfnPZlO/FX4xqoQVA+/HzzwHRn6xFQ1 loUHiJa1gZFOKLIpLItlrLzAcIl83aW6FQ1O3p6FugsmdJT6AquloMeSzOJHbbO4gwNs lsx95A0DC5EnSjvRoHAYSSHC/fC9vqa9UZfzB0Y6UeJz7U+fP1dh7uJtVtbNUG3M6lVc qvnpd296yvl/HRCqAvum37ibGI/ELG8PGQflqjP1r8jIrh3ZR71LJyOSzuT5ShepNdua wgiA== 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:mime-version:content-transfer-encoding; bh=zp+FDGC+8hxW2qA4RB22zv9FOPiCEqp/KqjTZDHxhME=; b=K/3qgVkFnzS+8AY38ZTofdwbr9oH+RsNk6mUZgXOc3cW2xG7mfzuiF0GwNQHNWB46u BN1M1Xs8+ombAXvZqvESn95tQaauXUHLBk7QugI5fOQLatNKMe6fKFbapG6lUAGaHgDd vZDyClYIt77nonvajatyQ4uF9tBu/b+UYX752ilARyZzH0jxwNmoltqDKxjk3EoUZXzB Enz8j7Jazn4SEXV9TrySrKDYTb+JgsEMcGWxMuEOTU0vtJfHxlck/Qy9nurDZ456qkMw /9X4oJgfxCoamksufMhRCxGmCE3HKJQBspzx6frhZnPBTiCxLNiMsHjaYdozBIElbEl4 yoPw== X-Gm-Message-State: APjAAAWMwPM+1M0UrT4/S2lREFaNCd8c/NYqYxRoNm3j4t9iz+aB3l+1 thenR+jxaY6gU72RKTNkiuKicYOUFCg= X-Google-Smtp-Source: APXvYqyjTi/h0IWYK10pSt9zql2c+N4fOd6h3jBALyP7uXURaW26Nx3MAVw6lSWk3UQfUx7CwznwDw== X-Received: by 2002:a7b:cf35:: with SMTP id m21mr6724781wmg.38.1567760997153; Fri, 06 Sep 2019 02:09:57 -0700 (PDT) Received: from P-ASN-Evian.nantes.intranet (static-css-ccs-204145.business.bouyguestelecom.com. [176.157.204.145]) by smtp.gmail.com with ESMTPSA id u6sm4582924wrr.26.2019.09.06.02.09.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Sep 2019 02:09:56 -0700 (PDT) From: Romain Naour To: buildroot@buildroot.org Date: Fri, 6 Sep 2019 11:09:40 +0200 Message-Id: <20190906090947.5476-5-romain.naour@smile.fr> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190906090947.5476-1-romain.naour@smile.fr> References: <20190906090947.5476-1-romain.naour@smile.fr> MIME-Version: 1.0 Subject: [Buildroot] [PATCH 04/11] package/clang: install a toolchain-wrapper for the host clang cross-compiler X-BeenThere: buildroot@busybox.net X-Mailman-Version: 2.1.29 Precedence: list List-Id: Discussion and development of buildroot List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Romain Naour , Valentin Korenblit Errors-To: buildroot-bounces@busybox.net Sender: "buildroot" In order to use clang as a host cross-compiler for Buildroot, we need to provide at least the path to the sysroot (using --sysroot) and some other compiler flags. Hoppefully, we can reuse the toolchain wrapper for gcc since clang support most of the gcc flags used in the Buildroot's toolchain wrapper. Only the flag -mfused-madd (deprecated since gcc 4.6) for mips is not supported by clang. Since Clang require gcc >= 5.x this flag can never be used. Since host-clang is always build by Buildroot as an internal toolchain, we have to use a second toolchain-wrapper called toolchain-wrapper-clang when an external toolchain is used. Inded, the two wrapper use a different path BR_CROSS_PATH_SUFFIX in this case. After building the clang toolchain wrapper, create the symlinks needed to force package infrastructure to use clang througt the wrapper. Initially clang install the clang-8 binary and create all other symlinks: # clang -> clang-8 # clang++ -> clang # clang-8 # clang-cl -> clang # clang-cpp -> clang Use a post install hook to rename the clang-8 binary to clang-8.br_real and recreate all symlinks: # clang -> toolchain-wrapper-clang # clang++ -> toolchain-wrapper-clang # clang-8 -> toolchain-wrapper-clang # clang-8.br_real # clang++.br_real -> clang-8.br_real # clang.br_real -> clang-8.br_real # clang-cl -> toolchain-wrapper-clang # clang-cl.br_real -> clang-8.br_real # clang-cpp -> toolchain-wrapper-clang # clang-cpp.br_real -> clang-8.br_real Use the previously introduced CLANG_VERSION_MAJOR variable to create theses symlinks. Set BR_CROSS_PATH_SUFFIX to ".br_real" as for the Buildroot's internal GCC toolchain backend to find the "real" clang binary installed in $(HOST_DIR)/bin. Borrow TOOLCHAIN_WRAPPER_BUILD and TOOLCHAIN_WRAPPER_INSTALL to build and install the specific clang toolchain wrapper. Signed-off-by: Romain Naour Cc: Matt Weber Cc: Valentin Korenblit --- package/clang/clang.mk | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/package/clang/clang.mk b/package/clang/clang.mk index 857ec148ac..148df8e611 100644 --- a/package/clang/clang.mk +++ b/package/clang/clang.mk @@ -110,5 +110,39 @@ ifeq ($(BR2_TOOLCHAIN_EXTERNAL),y) HOST_CLANG_CONF_OPTS += -DGCC_INSTALL_PREFIX:PATH=`realpath --relative-to=$(HOST_DIR)/bin/ $(TOOLCHAIN_EXTERNAL_INSTALL_DIR)` endif +define HOST_CLANG_INSTALL_WRAPPER_AND_SIMPLE_SYMLINKS + $(Q)cd $(HOST_DIR)/bin; \ + for i in clang clang-$(CLANG_VERSION_MAJOR) clang++ clang-cl clang-cpp; do \ + case "$$i" in \ + *clang-$(CLANG_VERSION_MAJOR)) \ + rm -f $$i.br_real; \ + mv $$i $$i.br_real; \ + ln -sf toolchain-wrapper-clang $$i; \ + ;; \ + *) \ + ln -snf toolchain-wrapper-clang $$i; \ + ln -snf clang-$(CLANG_VERSION_MAJOR).br_real $$i.br_real; \ + ;; \ + esac; \ + done +endef + +define HOST_CLANG_TOOLCHAIN_WRAPPER_BUILD + $(HOSTCC) $(HOST_CFLAGS) $(TOOLCHAIN_WRAPPER_ARGS) \ + -s -Wl,--hash-style=$(TOOLCHAIN_WRAPPER_HASH_STYLE) \ + toolchain/toolchain-wrapper.c \ + -o $(@D)/toolchain-wrapper-clang +endef + +define HOST_CLANG_TOOLCHAIN_WRAPPER_INSTALL + $(INSTALL) -D -m 0755 $(@D)/toolchain-wrapper-clang \ + $(HOST_DIR)/bin/toolchain-wrapper-clang +endef + +HOST_CLANG_TOOLCHAIN_WRAPPER_ARGS += -DBR_CROSS_PATH_SUFFIX='".br_real"' +HOST_CLANG_POST_BUILD_HOOKS += HOST_CLANG_TOOLCHAIN_WRAPPER_BUILD +HOST_CLANG_POST_INSTALL_HOOKS += HOST_CLANG_TOOLCHAIN_WRAPPER_INSTALL +HOST_CLANG_POST_INSTALL_HOOKS += HOST_CLANG_INSTALL_WRAPPER_AND_SIMPLE_SYMLINKS + $(eval $(cmake-package)) $(eval $(host-cmake-package))