On 2019-Aug-7, at 13:58, Brooks Davis <brooks at freebsd.org> wrote:
> On Wed, Aug 07, 2019 at 01:42:26PM -0700, Mark Millard wrote:
>>
>>
>> On 2019-Aug-7, at 12:56, Brooks Davis <brooks at freebsd.org> wrote:
>>
>>> On Wed, Aug 07, 2019 at 11:55:04AM -0700, Mark Millard wrote:
>>>>
>>>>
>>>> On 2019-Aug-7, at 11:02, Brooks Davis <brooks at freebsd.org> wrote:
>>>>
>>>>> 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 .]
>>>>>>>
>>>>>>> On 2019-Aug-6, at 20:23, Mark Millard <marklmi at yahoo.com> wrote:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>> On 2019-Aug-6, at 19:08, Brooks Davis <brooks at freebsd.org> wrote:
>>>>>>>>
>>>>>>>>> On Tue, Aug 06, 2019 at 05:59:21PM -0700, Mark Millard wrote:
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On 2019-Aug-6, at 09:55, Brooks Davis <brooks at freebsd.org> wrote:
>>>>>>>>>>
>>>>>>>>>>> I'd prefer to disable this dependency. There's a knob that worked
>>>>>>>>>>> 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 that
>>>>>>>>>>> the
>>>>>>>>>>> default on non-LLVM platforms is that makes sense.
>>>>>>>>>>>
>>>>>>>>>>> -- Brooks
>>>>>>>>>>
>>>>>>>>>> Okay.
>>>>>>>>>>
>>>>>>>>>> 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.
>>>>>>>>>
>>>>>>>>> The dependency is there because if z3 is installed then the package
>>>>>>>>> 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 help
>>>>>>>>> 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 commenting
>>>>>>>>> out
>>>>>>>>> the DEPENDS line. I know what that does.
>>>>>>>>
>>>>>>>>
>>>>>>>> I hope this helps. (I'm not a cmake expert.)
>>>>>>>>
>>>>>>>> llvm-9.0.0rc1.src/lib/Support/Z3Solver.cpp does:
>>>>>>>>
>>>>>>>> #if LLVM_WITH_Z3
>>>>>>>>
>>>>>>>> #include <z3.h>
>>>>>>>>
>>>>>>>> namespace {
>>>>>>>> . . .
>>>>>>>> } // end anonymous namespace
>>>>>>>>
>>>>>>>> #endif
>>>>>>>>
>>>>>>>> llvm::SMTSolverRef llvm::CreateZ3Solver() {
>>>>>>>> #if LLVM_WITH_Z3
>>>>>>>> return llvm::make_unique<Z3Solver>();
>>>>>>>> #else
>>>>>>>> llvm::report_fatal_error("LLVM was not compiled with Z3 support,
>>>>>>>> rebuild "
>>>>>>>> "with -DLLVM_ENABLE_Z3_SOLVER=ON",
>>>>>>>> false);
>>>>>>>> return nullptr;
>>>>>>>> #endif
>>>>>>>> }
>>>>>>>>
>>>>>>>> (There are other places LLVM_WITH_Z3 is used but the
>>>>>>>> above is suggestive.)
>>>>>>>>
>>>>>>>> Working backwards finds that:
>>>>>>>>
>>>>>>>> /wrkdirs/usr/ports/devel/llvm90/work/llvm-9.0.0rc1.src/CMakeLists.txt
>>>>>>>>
>>>>>>>> shows LLVM_WITH_Z3 being conditionally set to 1 via . . .
>>>>>>>>
>>>>>>>> set(LLVM_Z3_INSTALL_DIR "" CACHE STRING "Install directory of the Z3
>>>>>>>> solver.")
>>>>>>>>
>>>>>>>> find_package(Z3 4.7.1)
>>>>>>>>
>>>>>>>> if (LLVM_Z3_INSTALL_DIR)
>>>>>>>> if (NOT Z3_FOUND)
>>>>>>>> message(FATAL_ERROR "Z3 >= 4.7.1 has not been found in
>>>>>>>> LLVM_Z3_INSTALL_DIR: ${LLVM_Z3_INSTALL_DIR}.")
>>>>>>>> endif()
>>>>>>>> endif()
>>>>>>>>
>>>>>>>> set(LLVM_ENABLE_Z3_SOLVER_DEFAULT "${Z3_FOUND}")
>>>>>>>>
>>>>>>>> option(LLVM_ENABLE_Z3_SOLVER
>>>>>>>> "Enable Support for the Z3 constraint solver in LLVM."
>>>>>>>> ${LLVM_ENABLE_Z3_SOLVER_DEFAULT}
>>>>>>>> )
>>>>>>>>
>>>>>>>> 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()
>>>>>>>>
>>>>>>>> set(LLVM_WITH_Z3 1)
>>>>>>>> endif()
>>>>>>>>
>>>>>>>> if( LLVM_TARGETS_TO_BUILD STREQUAL "all" )
>>>>>>>> set( LLVM_TARGETS_TO_BUILD ${LLVM_ALL_TARGETS} )
>>>>>>>> endif()
>>>>>>>>
>>>>>>>>
>>>>>>>> If I read that correctly, LLVM_ENABLE_Z3_SOLVER set directly
>>>>>>>> appears to override the default (that tracks if z3 was found).
>>>>>>>
>>>>>>> I saw a reference to:
>>>>>>>
>>>>>>> diff --git a/llvm/cmake/modules/CrossCompile.cmake
>>>>>>> b/llvm/cmake/modules/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="${TARGET_TRIPLE}"
>>>>>>> -DLLVM_TARGET_ARCH="${LLVM_TARGET_ARCH}"
>>>>>>>
>>>>>>> -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN="${LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN}"
>>>>>>> + -DLLVM_ENABLE_Z3_SOLVER="${LLVM_ENABLE_Z3_SOLVER}"
>>>>>>> ${build_type_flags} ${linker_flag} ${external_clang_dir}
>>>>>>> WORKING_DIRECTORY ${LLVM_${target_name}_BUILD}
>>>>>>> DEPENDS CREATE_LLVM_${target_name}
>>>>>>>
>>>>>>> in https://reviews.llvm.org/D54978 on Feb 12 2019, 5:41 PM
>>>>>>> and it had the comment:
>>>>>>>
>>>>>>> QUOTE
>>>>>>> Independent of the rest of the discussion, this patch should be part of
>>>>>>> the reland, to make sure that explicitly turning off Z3 works reliably.
>>>>>>> Thanks for coming up with that, and thanks everyone for the good
>>>>>>> discussion here :)
>>>>>>> END QUOTE
>>>>>>>
>>>>>>> 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.)
>>>>>>
>>>>>> 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 have
>>>>>> z3 installed on the system and no LIB_DEPENDS line:
>>>>>>
>>>>>> 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+=libz3.so:math/z3
>>>>>>
>>>>>> I've generally observed that the portions of the system that cover lit
>>>>>> (which includes FileCheck) aren't very well behaved.
>>>>>
>>>>> I've filed https://bugs.llvm.org/show_bug.cgi?id=42921 upstream,
>>>>> hopefully someone who understand this part of the cmake system will help
>>>>> us out.
>>>>
>>>> You mentioned applying the patch but not also
>>>> setting:
>>>>
>>>> LLVM_ENABLE_Z3_SOLVER:BOOL=OFF
>>>>
>>>> with either:
>>>>
>>>> -D LLVM_ENABLE_Z3_SOLVER:BOOL=OFF
>>>>
>>>> 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 .)
>>>>
>>>> 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.
>>>>
>>>> Taking from an example from web of a CMakeCache.txt . . .
>>>>
>>>>
>>>> # 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 editor.
>>>> # If you do want to change a value, simply edit, save, and exit the editor.
>>>> # The syntax for the file is as follows:
>>>> # KEY:TYPE=VALUE
>>>> # 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.
>>>>
>>>> ########################
>>>> # EXTERNAL cache entries
>>>> ########################
>>>>
>>>> //Build a 32 bit version of the library.
>>>> BENCHMARK_BUILD_32_BITS:BOOL=OFF
>>>>
>>>> . . . (lots omitted) . . .
>>>>
>>>>
>>>> //Fail and stop if a warning is triggered.
>>>> LLVM_ENABLE_WERROR:BOOL=OFF
>>>>
>>>> //Enable Support for the Z3 constraint solver in LLVM.
>>>> LLVM_ENABLE_Z3_SOLVER:BOOL=OFF
>>>>
>>>> //Use zlib for compression/decompression if available.
>>>> LLVM_ENABLE_ZLIB:BOOL=ON
>>>>
>>>> . . . (lots more omitted) . . .
>>>>
>>>>
>>>> The example already had the "LLVM_ENABLE_Z3_SOLVER:BOOL=OFF"
>>>> line, I did not adjust it.
>>>
>>> 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.)
>>
>> Just for my curiosity: which way are you
>> initializing LLVM_ENABLE_Z3_SOLVER to OFF ?:
>>
>> A) Having -D LLVM_ENABLE_Z3_SOLVER:BOOL=OFF on the cmake command line?
>> B) Having LLVM_ENABLE_Z3_SOLVER:BOOL=OFF in the CMakeCache.txt file?
>> C) Something else (that I missed as a technique)?
>
> (A) via:
>
> CMAKE_ARGS+= -DLLVM_ENABLE_Z3_SOLVER=OFF
Thanks.
>From what I've seen the :BOOL part of the syntax should be used:
CMAKE_ARGS+= -DLLVM_ENABLE_Z3_SOLVER:BOOL=OFF
It is not a textual definition from what I gather and
the intended type should be specified as well. (But
I'm learning things as I go.)
===
Mark Millard
marklmi at yahoo.com
( dsl-only.net <http://dsl-only.net/> went
away in early 2018-Mar)
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-toolchain
To unsubscribe, send any mail to "[email protected]"
Re: devel/llvm90 requires math/z3 first; building math/z3 requires a c++ toolchain be in place
Mark Millard via freebsd-toolchain Wed, 07 Aug 2019 14:37:23 -0700
- Re: devel/llvm90 requires math/z3 ... Mark Millard via freebsd-toolchain
- Re: devel/llvm90 requires math/z3 first... Brooks Davis
- Re: devel/llvm90 requires math/z3 ... Mark Millard via freebsd-toolchain
- Re: devel/llvm90 requires math... Mark Millard via freebsd-toolchain
- Re: devel/llvm90 requires ... Brooks Davis
- Re: devel/llvm90 requi... Brooks Davis
- Re: devel/llvm90 requi... Mark Millard via freebsd-toolchain
- Re: devel/llvm90 requi... Brooks Davis
- Re: devel/llvm90 requi... Mark Millard via freebsd-toolchain
- Re: devel/llvm90 requi... Brooks Davis
- Re: devel/llvm90 requi... Mark Millard via freebsd-toolchain
- Re: devel/llvm90 requi... Mark Millard via freebsd-toolchain
