From patchwork Sat Sep 7 09:40:19 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Romain Naour X-Patchwork-Id: 1159311 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.136; helo=silver.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="pLCRTwUy"; dkim-atps=neutral Received: from silver.osuosl.org (smtp3.osuosl.org [140.211.166.136]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 46QTvL6pp1z9sDB for ; Sat, 7 Sep 2019 19:41:02 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by silver.osuosl.org (Postfix) with ESMTP id 2DB1520398; Sat, 7 Sep 2019 09:41:00 +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 YoJs7dsRF3BW; Sat, 7 Sep 2019 09:40:48 +0000 (UTC) Received: from ash.osuosl.org (ash.osuosl.org [140.211.166.34]) by silver.osuosl.org (Postfix) with ESMTP id 840FB20518; Sat, 7 Sep 2019 09:40:47 +0000 (UTC) X-Original-To: buildroot@lists.busybox.net Delivered-To: buildroot@osuosl.org Received: from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138]) by ash.osuosl.org (Postfix) with ESMTP id 7D5C81BF401 for ; Sat, 7 Sep 2019 09:40:41 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by whitealder.osuosl.org (Postfix) with ESMTP id 75C0787D93 for ; Sat, 7 Sep 2019 09:40:41 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from whitealder.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 1ODuRp2EdZ8t for ; Sat, 7 Sep 2019 09:40:40 +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 whitealder.osuosl.org (Postfix) with ESMTPS id B36A086DB3 for ; Sat, 7 Sep 2019 09:40:39 +0000 (UTC) Received: by mail-wm1-f67.google.com with SMTP id p13so9581106wmh.1 for ; Sat, 07 Sep 2019 02:40:39 -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=pLCRTwUyEqyyCD15JvQ35+9pyG9XhXvDmVvbO/QhB36amWp2O9Ndqw1BhtsM6jWGXb SzaYjzRR92+AuxahZRAhSp2RkypSVHzPuJ7GeCO+0BwLNfZX3o+D8/8AEfzipXXXVYDD V/AyEBlSAd28Nad+A6xEGiKXWU/5jpmC7YsQ/00Aw7GBofbTHCJI3KGp1cCrwg+IvK4P 0KpkwwQziwJNaRtti2i/xCtTu8EF/xoFp/4dhzRAUssyOvoaOcC5V5bxOQ8WQwB2h3fM nuhUpTJK5c/a2vplYOywv4i3J9Uhlg6EDawTnBK2SfjMWTMKoYvLoqwFrnKEDe+qejGU OdiA== 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=eiMo2mqufX+Yj662zfkqgAkZheNQ3sd9w99lni1WaafFRB6vTZbGUFWJ4sD+cAnq+7 /jJUVa1kQGjmCdOg0gXWWk/8nALxpgOzp24Rf7Y+wQ5mqHww/AJMDci+rGt/NCoQtv8G eNMI0KH1yeG8/CWkD16NI9MWiS2UpTAk0id0ogl9vCRlTITs965oaNXDAoDEWr2FuPPV TloDl+mKAo4qixN85gNSvcqKHdP7qutAkWfBjQbBBwnx69thlFi4q6eS3MHlK6YqIC/Z 10nhHCOmSsue7X/51QG76K3dKxCQrU+siAw7wERzf3n/Tc49oNioA9LMHniuCUcQsOsu NRLQ== X-Gm-Message-State: APjAAAUUF/As7MOtr9KIibMtlGNtvbsXvAsWc+7A2qibicgk+Lod9f0e wAItpxrP4dR3Xn5GBnXOCiE0TxCukzE= X-Google-Smtp-Source: APXvYqxqai92lETHYNTAdcN+PFFSoT7U2LEO12Zwc74Hoc8/+hMBAgROoTvNqoL/7XSefYKwQDJTMg== X-Received: by 2002:a1c:ef13:: with SMTP id n19mr11150036wmh.48.1567849237550; Sat, 07 Sep 2019 02:40:37 -0700 (PDT) Received: from P-ASN-Evian.home (2a01cb0589880c00c543929d43aec786.ipv6.abo.wanadoo.fr. [2a01:cb05:8988:c00:c543:929d:43ae:c786]) by smtp.gmail.com with ESMTPSA id f13sm6384700wrq.3.2019.09.07.02.40.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 07 Sep 2019 02:40:37 -0700 (PDT) From: Romain Naour To: buildroot@buildroot.org Date: Sat, 7 Sep 2019 11:40:19 +0200 Message-Id: <20190907094027.9537-5-romain.naour@smile.fr> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190907094027.9537-1-romain.naour@smile.fr> References: <20190907094027.9537-1-romain.naour@smile.fr> MIME-Version: 1.0 Subject: [Buildroot] [PATCH v2 04/12] 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))