From owner-freebsd-ppc@freebsd.org Wed Aug 7 20:58:48 2019 Return-Path: Delivered-To: freebsd-ppc@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 C373FB792F; Wed, 7 Aug 2019 20:58:48 +0000 (UTC) (envelope-from brooks@spindle.one-eyed-alien.net) Received: from spindle.one-eyed-alien.net (spindle.one-eyed-alien.net [199.48.129.229]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 463kPg4wB7z4Khb; Wed, 7 Aug 2019 20:58:47 +0000 (UTC) (envelope-from brooks@spindle.one-eyed-alien.net) Received: by spindle.one-eyed-alien.net (Postfix, from userid 3001) id 3CD033C0199; Wed, 7 Aug 2019 20:58:46 +0000 (UTC) Date: Wed, 7 Aug 2019 20:58:46 +0000 From: Brooks Davis To: Mark Millard Cc: freebsd-toolchain@freebsd.org, freebsd-ports@freebsd.org, freebsd-ppc@freebsd.org Subject: Re: devel/llvm90 requires math/z3 first; building math/z3 requires a c++ toolchain be in place Message-ID: <20190807205846.GM94703@spindle.one-eyed-alien.net> References: <20190806165525.GC94703@spindle.one-eyed-alien.net> <2A88AADC-8ED0-4FFD-85A8-34C0186D5D4F@yahoo.com> <20190807020826.GH94703@spindle.one-eyed-alien.net> <602EEB6C-D0B0-4EFB-AB0E-BE98FF1C4D90@yahoo.com> <086C99B8-1289-4D81-AAF5-85FB0AE70B7C@yahoo.com> <20190807171714.GI94703@spindle.one-eyed-alien.net> <20190807180244.GJ94703@spindle.one-eyed-alien.net> <4FF9540B-E1FE-4947-8E45-8D4FB57A7E34@yahoo.com> <20190807195613.GK94703@spindle.one-eyed-alien.net> <68CDAEA5-73D8-40FB-A22F-CC3B357FA992@yahoo.com> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="IJFRpmOek+ZRSQoz" Content-Disposition: inline In-Reply-To: <68CDAEA5-73D8-40FB-A22F-CC3B357FA992@yahoo.com> User-Agent: Mutt/1.9.4 (2018-02-28) X-Rspamd-Queue-Id: 463kPg4wB7z4Khb X-Spamd-Bar: ------- Authentication-Results: mx1.freebsd.org; dkim=none; dmarc=none; spf=none (mx1.freebsd.org: domain of brooks@spindle.one-eyed-alien.net has no SPF policy when checking 199.48.129.229) smtp.mailfrom=brooks@spindle.one-eyed-alien.net X-Spamd-Result: default: False [-7.41 / 15.00]; ARC_NA(0.00)[]; FREEMAIL_TO(0.00)[yahoo.com]; NEURAL_HAM_MEDIUM(-1.00)[-1.000,0]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_THREE(0.00)[4]; TO_DN_SOME(0.00)[]; NEURAL_HAM_LONG(-1.00)[-0.999,0]; MIME_GOOD(-0.20)[multipart/signed,text/plain]; DMARC_NA(0.00)[freebsd.org]; AUTH_NA(1.00)[]; TO_MATCH_ENVRCPT_SOME(0.00)[]; NEURAL_HAM_SHORT(-0.94)[-0.944,0]; R_SPF_NA(0.00)[]; SIGNED_PGP(-2.00)[]; FORGED_SENDER(0.30)[brooks@freebsd.org,brooks@spindle.one-eyed-alien.net]; RCVD_COUNT_ZERO(0.00)[0]; R_DKIM_NA(0.00)[]; MIME_TRACE(0.00)[0:+,1:+,2:~]; ASN(0.00)[asn:36236, ipnet:199.48.128.0/22, country:US]; FROM_NEQ_ENVFROM(0.00)[brooks@freebsd.org,brooks@spindle.one-eyed-alien.net]; IP_SCORE(-3.57)[ip: (-9.29), ipnet: 199.48.128.0/22(-4.63), asn: 36236(-3.87), country: US(-0.05)] X-BeenThere: freebsd-ppc@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Porting FreeBSD to the PowerPC List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 07 Aug 2019 20:58:48 -0000 --IJFRpmOek+ZRSQoz Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Wed, Aug 07, 2019 at 01:42:26PM -0700, Mark Millard wrote: >=20 >=20 > On 2019-Aug-7, at 12:56, Brooks Davis wrote: >=20 > > On Wed, Aug 07, 2019 at 11:55:04AM -0700, Mark Millard wrote: > >>=20 > >>=20 > >> On 2019-Aug-7, at 11:02, Brooks Davis wrote: > >>=20 > >>> On Wed, Aug 07, 2019 at 05:17:14PM +0000, Brooks Davis wrote: > >>>> On Tue, Aug 06, 2019 at 09:22:52PM -0700, Mark Millard wrote: > >>>>> [I found something known to be missing in the > >>>>> in at least some versions of > >>>>> llvm/cmake/modules/CrossCompile.cmake that messes > >>>>> up the overall handling of LLVM_ENABLE_Z3_SOLVER .] > >>>>>=20 > >>>>> On 2019-Aug-6, at 20:23, Mark Millard wrote: > >>>>>=20 > >>>>>=20 > >>>>>=20 > >>>>>> On 2019-Aug-6, at 19:08, Brooks Davis wrot= e: > >>>>>>=20 > >>>>>>> On Tue, Aug 06, 2019 at 05:59:21PM -0700, Mark Millard wrote: > >>>>>>>>=20 > >>>>>>>>=20 > >>>>>>>> On 2019-Aug-6, at 09:55, Brooks Davis wr= ote: > >>>>>>>>=20 > >>>>>>>>> I'd prefer to disable this dependency. There's a knob that wor= ked in > >>>>>>>>> the 8.0 timeframe, but the lit build now autodetects z3 when it= is > >>>>>>>>> present and I've failed to find a knob to disable it. For now,= the easy > >>>>>>>>> workaround is probably to disable options LIT. We could make t= hat the > >>>>>>>>> default on non-LLVM platforms is that makes sense. > >>>>>>>>>=20 > >>>>>>>>> -- Brooks > >>>>>>>>=20 > >>>>>>>> Okay. > >>>>>>>>=20 > >>>>>>>> poudriere-devel automatically built math/z3 because > >>>>>>>> I'd indicated to build devel/llvm90 . math/z3 was not > >>>>>>>> previously built: I've never had other use of it. So > >>>>>>>> my context was not one of an implicit autodetect. > >>>>>>>=20 > >>>>>>> The dependency is there because if z3 is installed then the packa= ge > >>>>>>> that is built depends on z3. Thus I had not choice but to add a = z3 > >>>>>>> dependency until I find a way to turn it off. You can either hel= p find > >>>>>>> a way to disable z3 detection in the cmake infrastructure or turn= off > >>>>>>> LIT. I don't have any use for reports on the effects of commenti= ng out > >>>>>>> the DEPENDS line. I know what that does. > >>>>>>=20 > >>>>>>=20 > >>>>>> I hope this helps. (I'm not a cmake expert.) > >>>>>>=20 > >>>>>> llvm-9.0.0rc1.src/lib/Support/Z3Solver.cpp does: > >>>>>>=20 > >>>>>> #if LLVM_WITH_Z3 > >>>>>>=20 > >>>>>> #include > >>>>>>=20 > >>>>>> namespace { > >>>>>> . . . > >>>>>> } // end anonymous namespace > >>>>>>=20 > >>>>>> #endif > >>>>>>=20 > >>>>>> llvm::SMTSolverRef llvm::CreateZ3Solver() { > >>>>>> #if LLVM_WITH_Z3 > >>>>>> return llvm::make_unique(); > >>>>>> #else > >>>>>> llvm::report_fatal_error("LLVM was not compiled with Z3 support, r= ebuild " > >>>>>> "with -DLLVM_ENABLE_Z3_SOLVER=3DON", > >>>>>> false); > >>>>>> return nullptr; > >>>>>> #endif > >>>>>> } > >>>>>>=20 > >>>>>> (There are other places LLVM_WITH_Z3 is used but the > >>>>>> above is suggestive.) > >>>>>>=20 > >>>>>> Working backwards finds that: > >>>>>>=20 > >>>>>> /wrkdirs/usr/ports/devel/llvm90/work/llvm-9.0.0rc1.src/CMakeLists.= txt > >>>>>>=20 > >>>>>> shows LLVM_WITH_Z3 being conditionally set to 1 via . . . > >>>>>>=20 > >>>>>> set(LLVM_Z3_INSTALL_DIR "" CACHE STRING "Install directory of the = Z3 solver.") > >>>>>>=20 > >>>>>> find_package(Z3 4.7.1) > >>>>>>=20 > >>>>>> if (LLVM_Z3_INSTALL_DIR) > >>>>>> if (NOT Z3_FOUND) > >>>>>> message(FATAL_ERROR "Z3 >=3D 4.7.1 has not been found in LLVM_Z3_= INSTALL_DIR: ${LLVM_Z3_INSTALL_DIR}.") > >>>>>> endif() > >>>>>> endif() > >>>>>>=20 > >>>>>> set(LLVM_ENABLE_Z3_SOLVER_DEFAULT "${Z3_FOUND}") > >>>>>>=20 > >>>>>> option(LLVM_ENABLE_Z3_SOLVER > >>>>>> "Enable Support for the Z3 constraint solver in LLVM." > >>>>>> ${LLVM_ENABLE_Z3_SOLVER_DEFAULT} > >>>>>> ) > >>>>>>=20 > >>>>>> if (LLVM_ENABLE_Z3_SOLVER) > >>>>>> if (NOT Z3_FOUND) > >>>>>> message(FATAL_ERROR "LLVM_ENABLE_Z3_SOLVER cannot be enabled when= Z3 is not available.") > >>>>>> endif() > >>>>>>=20 > >>>>>> set(LLVM_WITH_Z3 1) > >>>>>> endif() > >>>>>>=20 > >>>>>> if( LLVM_TARGETS_TO_BUILD STREQUAL "all" ) > >>>>>> set( LLVM_TARGETS_TO_BUILD ${LLVM_ALL_TARGETS} ) > >>>>>> endif() > >>>>>>=20 > >>>>>>=20 > >>>>>> If I read that correctly, LLVM_ENABLE_Z3_SOLVER set directly > >>>>>> appears to override the default (that tracks if z3 was found). > >>>>>=20 > >>>>> I saw a reference to: > >>>>>=20 > >>>>> diff --git a/llvm/cmake/modules/CrossCompile.cmake b/llvm/cmake/mod= ules/CrossCompile.cmake > >>>>> index bc3b210f018..0c30b88f80f 100644 > >>>>> --- a/llvm/cmake/modules/CrossCompile.cmake > >>>>> +++ b/llvm/cmake/modules/CrossCompile.cmake > >>>>> @@ -53,6 +53,7 @@ function(llvm_create_cross_target_internal target= _name toolchain buildtype) > >>>>> -DLLVM_DEFAULT_TARGET_TRIPLE=3D"${TARGET_TRIPLE}" > >>>>> -DLLVM_TARGET_ARCH=3D"${LLVM_TARGET_ARCH}" > >>>>> -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=3D"${LLVM_TEMPORARILY= _ALLOW_OLD_TOOLCHAIN}" > >>>>> + -DLLVM_ENABLE_Z3_SOLVER=3D"${LLVM_ENABLE_Z3_SOLVER}" > >>>>> ${build_type_flags} ${linker_flag} ${external_clang_dir} > >>>>> WORKING_DIRECTORY ${LLVM_${target_name}_BUILD} > >>>>> DEPENDS CREATE_LLVM_${target_name} > >>>>>=20 > >>>>> in https://reviews.llvm.org/D54978 on Feb 12 2019, 5:41 PM > >>>>> and it had the comment: > >>>>>=20 > >>>>> QUOTE > >>>>> Independent of the rest of the discussion, this patch should be par= t of the reland, to make sure that explicitly turning off Z3 works reliably= =2E Thanks for coming up with that, and thanks everyone for the good discus= sion here :) > >>>>> END QUOTE > >>>>>=20 > >>>>> This apparently fixes a sub-cmake not respecting the > >>>>> LLVM_ENABLE_Z3_SOLVER setting in the parent cmake. > >>>>> (The overall review earlier describes the sub-cmake > >>>>> not doing the right thing.) > >>>>=20 > >>>> Thanks for digging this up. Unfortunately, this doesn't seem to have > >>>> solved the problem. With this patch applied I still get this if I h= ave > >>>> z3 installed on the system and no LIB_DEPENDS line: > >>>>=20 > >>>> Error: /usr/local/bin/FileCheck90 is linked to /usr/local/lib/libz3.= so.0 > >>>> from math/z3 but it is not declared as a dependency > >>>> Warning: you need LIB_DEPENDS+=3Dlibz3.so:math/z3 > >>>>=20 > >>>> I've generally observed that the portions of the system that cover l= it > >>>> (which includes FileCheck) aren't very well behaved. > >>>=20 > >>> I've filed https://bugs.llvm.org/show_bug.cgi?id=3D42921 upstream, > >>> hopefully someone who understand this part of the cmake system will h= elp > >>> us out. > >>=20 > >> You mentioned applying the patch but not also > >> setting: > >>=20 > >> LLVM_ENABLE_Z3_SOLVER:BOOL=3DOFF > >>=20 > >> with either: > >>=20 > >> -D LLVM_ENABLE_Z3_SOLVER:BOOL=3DOFF > >>=20 > >> on the command line or some line early in CMakeCache.txt . > >> (Actually, I had to look around to know to say those > >> specifics of what it means to have already initialized > >> LLVM_ENABLE_Z3_SOLVER .) > >>=20 > >> From what I see, taking the initial assignment via CMakeCache.txt > >> after it is initialized seems to be a common technique of controlling > >> the configuration. > >>=20 > >> Taking from an example from web of a CMakeCache.txt . . . > >>=20 > >>=20 > >> # This is the CMakeCache file. > >> # For build in directory: [edited out] > >> # It was generated by CMake: /Applications/CMake.app/Contents/bin/cmake > >> # You can edit this file to change values found and used by cmake. > >> # If you do not want to change any of the values, simply exit the edit= or. > >> # If you do want to change a value, simply edit, save, and exit the ed= itor. > >> # The syntax for the file is as follows: > >> # KEY:TYPE=3DVALUE > >> # KEY is the name of a variable in the cache. > >> # TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!. > >> # VALUE is the current value for the KEY. > >>=20 > >> ######################## > >> # EXTERNAL cache entries > >> ######################## > >>=20 > >> //Build a 32 bit version of the library. > >> BENCHMARK_BUILD_32_BITS:BOOL=3DOFF > >>=20 > >> . . . (lots omitted) . . . > >>=20 > >>=20 > >> //Fail and stop if a warning is triggered. > >> LLVM_ENABLE_WERROR:BOOL=3DOFF > >>=20 > >> //Enable Support for the Z3 constraint solver in LLVM. > >> LLVM_ENABLE_Z3_SOLVER:BOOL=3DOFF > >>=20 > >> //Use zlib for compression/decompression if available. > >> LLVM_ENABLE_ZLIB:BOOL=3DON > >>=20 > >> . . . (lots more omitted) . . . > >>=20 > >>=20 > >> The example already had the "LLVM_ENABLE_Z3_SOLVER:BOOL=3DOFF" > >> line, I did not adjust it. > >=20 > > Upstream spotted this error as well. I've hopefully committed a fix (of > > course just as I committed I discovered I'd had the patch applied and it > > shouldn't be needed so I'm now rebuilding again and will add the patch > > if needed.) >=20 > Just for my curiosity: which way are you > initializing LLVM_ENABLE_Z3_SOLVER to OFF ?: >=20 > A) Having -D LLVM_ENABLE_Z3_SOLVER:BOOL=3DOFF on the cmake command line? > B) Having LLVM_ENABLE_Z3_SOLVER:BOOL=3DOFF in the CMakeCache.txt file? > C) Something else (that I missed as a technique)? (A) via: CMAKE_ARGS+=3D -DLLVM_ENABLE_Z3_SOLVER=3DOFF -- Brooks --IJFRpmOek+ZRSQoz Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQEcBAEBAgAGBQJdSzuFAAoJEKzQXbSebgfAk8kIAKSC8auB8taB5Fd81iZqj26U mKfbd4/zNTvgo1v+c7c6EsiAm2JKbL0U0NcGyXH0+z1z25kdnPxEFTUdbs3G1YXd IQNlwK3F7OhOoRMbkbeGbaNjuzZnYBDxZyFBGGGeYw/uMooCv/+tXNDr02dtmhPN /SNnuCwWBkU8oghaffjmSg1VbqB2PZCdSu8YzvGPpU/V3iIpUThvb7HDYHbyx11K lC7UzFez2JwTjZQffPv1rSo/SNVubY47HtLQDJWPiiGEiG1KwzSMMQ9kN5833vBp wGyLrDUu/SL9vXWNSSZQ8P9+t4HIj9oo4WhSyX1aDyvJtCMQZG2UmjkVsvnghaE= =VKgt -----END PGP SIGNATURE----- --IJFRpmOek+ZRSQoz--