From owner-svn-src-head@freebsd.org Mon Apr 6 23:38:47 2020 Return-Path: Delivered-To: svn-src-head@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 4A4222A1056; Mon, 6 Apr 2020 23:38:47 +0000 (UTC) (envelope-from brooks@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 48x6S7191Zz3J3n; Mon, 6 Apr 2020 23:38:47 +0000 (UTC) (envelope-from brooks@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 22EA21B5; Mon, 6 Apr 2020 23:38:47 +0000 (UTC) (envelope-from brooks@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 036Nck5S022133; Mon, 6 Apr 2020 23:38:46 GMT (envelope-from brooks@FreeBSD.org) Received: (from brooks@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 036Nckt3022130; Mon, 6 Apr 2020 23:38:46 GMT (envelope-from brooks@FreeBSD.org) Message-Id: <202004062338.036Nckt3022130@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: brooks set sender to brooks@FreeBSD.org using -f From: Brooks Davis Date: Mon, 6 Apr 2020 23:38:46 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r359681 - in head: . share/mk X-SVN-Group: head X-SVN-Commit-Author: brooks X-SVN-Commit-Paths: in head: . share/mk X-SVN-Commit-Revision: 359681 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Apr 2020 23:38:47 -0000 Author: brooks Date: Mon Apr 6 23:38:46 2020 New Revision: 359681 URL: https://svnweb.freebsd.org/changeset/base/359681 Log: Fix compilation with upstream clang builtin headers. By using -nobuiltininc and adding the clang builtin headers resource dir to the end of the compiler header search path, we can still find headers such as immintrin.h but find the FreeBSD version of stddef.h/stdarg.h/.. first. This is a workaround until we are able to settle on and complete a plan to harmonize guard macros with LLVM. We've mostly worked out this on FreeBSD systems by removing select headers from the installed set of devel/llvm*, but that isn't a good solution for cross build. Submitted by: arichardson Obtained from: CheriBSD Sponsored by: DARPA, AFRL Differential Revision: https://reviews.freebsd.org/D17002 Modified: head/Makefile.inc1 head/share/mk/bsd.compiler.mk head/share/mk/bsd.sys.mk Modified: head/Makefile.inc1 ============================================================================== --- head/Makefile.inc1 Mon Apr 6 23:28:24 2020 (r359680) +++ head/Makefile.inc1 Mon Apr 6 23:38:46 2020 (r359681) @@ -337,6 +337,7 @@ _TOOLCHAIN_METADATA_VARS= COMPILER_VERSION \ COMPILER_TYPE \ COMPILER_FEATURES \ COMPILER_FREEBSD_VERSION \ + COMPILER_RESOURCE_DIR \ LINKER_VERSION \ LINKER_FEATURES \ LINKER_TYPE \ Modified: head/share/mk/bsd.compiler.mk ============================================================================== --- head/share/mk/bsd.compiler.mk Mon Apr 6 23:28:24 2020 (r359680) +++ head/share/mk/bsd.compiler.mk Mon Apr 6 23:38:46 2020 (r359681) @@ -143,7 +143,7 @@ _cc_vars+=XCC X_ # The value is only used/exported for the same environment that impacts # CC and COMPILER_* settings here. _exported_vars= ${X_}COMPILER_TYPE ${X_}COMPILER_VERSION \ - ${X_}COMPILER_FREEBSD_VERSION + ${X_}COMPILER_FREEBSD_VERSION ${X_}COMPILER_RESOURCE_DIR ${X_}_cc_hash= ${${cc}}${MACHINE}${PATH} ${X_}_cc_hash:= ${${X_}_cc_hash:hash} # Only import if none of the vars are set somehow else. @@ -201,6 +201,10 @@ ${X_}COMPILER_FREEBSD_VERSION= unknown .endif .endif +.if !defined(${X_}COMPILER_RESOURCE_DIR) +${X_}COMPILER_RESOURCE_DIR!= ${${cc}:N${CCACHE_BIN}} -print-resource-dir 2>/dev/null || echo unknown +.endif + ${X_}COMPILER_FEATURES= .if (${${X_}COMPILER_TYPE} == "clang" && ${${X_}COMPILER_VERSION} >= 30300) || \ (${${X_}COMPILER_TYPE} == "gcc" && ${${X_}COMPILER_VERSION} >= 40800) @@ -224,6 +228,7 @@ X_COMPILER_TYPE= ${COMPILER_TYPE} X_COMPILER_VERSION= ${COMPILER_VERSION} X_COMPILER_FREEBSD_VERSION= ${COMPILER_FREEBSD_VERSION} X_COMPILER_FEATURES= ${COMPILER_FEATURES} +X_COMPILER_RESOURCE_DIR= ${COMPILER_RESOURCE_DIR} .endif # ${cc} == "CC" || (${cc} == "XCC" && ${XCC} != ${CC}) # Export the values so sub-makes don't have to look them up again, using the Modified: head/share/mk/bsd.sys.mk ============================================================================== --- head/share/mk/bsd.sys.mk Mon Apr 6 23:28:24 2020 (r359680) +++ head/share/mk/bsd.sys.mk Mon Apr 6 23:38:46 2020 (r359681) @@ -206,6 +206,21 @@ CWARNFLAGS+= -Wno-unknown-pragmas # This warning is utter nonsense CFLAGS+= -Wno-format-zero-length +.if ${COMPILER_TYPE} == "clang" +# The headers provided by clang are incompatible with the FreeBSD headers. +# If the version of clang is not one that has been patched to omit the +# incompatible headers, we need to compile with -nobuiltininc and add the +# resource dir to the end of the search paths. This ensures that headers such as +# immintrin.h are still found but stddef.h, etc. are picked up from FreeBSD. +# +# XXX: This is a hack to support complete external installs of clang while +# we work to synchronize our decleration guards with those in the clang tree. +.if ${MK_CLANG_BOOTSTRAP} == "no" && ${COMPILER_RESOURCE_DIR} != "unknown" && \ + !defined(BOOTSTRAPPING) +CFLAGS+=-nobuiltininc -idirafter ${COMPILER_RESOURCE_DIR}/include +.endif +.endif + CLANG_OPT_SMALL= -mstack-alignment=8 -mllvm -inline-threshold=3\ -mllvm -simplifycfg-dup-ret .if ${COMPILER_VERSION} >= 30500 && ${COMPILER_VERSION} < 30700