From 5c81ef01e23db4988e27baf714a7eecb009975e9 Mon Sep 17 00:00:00 2001 From: fruffy Date: Thu, 24 Oct 2024 15:44:39 -0400 Subject: [PATCH] Rebase fixes. Signed-off-by: fruffy --- backends/p4tools/cmake/Z3.cmake | 85 ---------------------- cmake/Z3.cmake | 83 ++++++++++++--------- {backends/p4tools/cmake => cmake}/z3.patch | 0 3 files changed, 50 insertions(+), 118 deletions(-) delete mode 100644 backends/p4tools/cmake/Z3.cmake rename {backends/p4tools/cmake => cmake}/z3.patch (100%) diff --git a/backends/p4tools/cmake/Z3.cmake b/backends/p4tools/cmake/Z3.cmake deleted file mode 100644 index 02b0dc0be73..00000000000 --- a/backends/p4tools/cmake/Z3.cmake +++ /dev/null @@ -1,85 +0,0 @@ -macro(p4tools_obtain_z3) - option(TOOLS_USE_PREINSTALLED_Z3 "Look for a preinstalled version of Z3 instead of installing a prebuilt binary using FetchContent." OFF) - - if(TOOLS_USE_PREINSTALLED_Z3) - # We need a fairly recent version of Z3. - set(Z3_MIN_VERSION "4.8.14") - # But 4.12+ is currently broken with libGC - set(Z3_MAX_VERSION_EXCL "4.12") - find_package(Z3 ${Z3_MIN_VERSION} REQUIRED) - - if(NOT DEFINED Z3_VERSION_STRING OR ${Z3_VERSION_STRING} VERSION_LESS ${Z3_MIN_VERSION}) - message(FATAL_ERROR "The minimum required Z3 version is ${Z3_MIN_VERSION}. Has ${Z3_VERSION_STRING}.") - endif() - if(${Z3_VERSION_STRING} VERSION_GREATER_EQUAL ${Z3_MAX_VERSION_EXCL}) - message(FATAL_ERROR "The Z3 version has to be lower than ${Z3_MAX_VERSION_EXCL} (the latter currently does no work with libGC). Has ${Z3_VERSION_STRING}.") - endif() - # Set variables for later consumption. - set(P4TOOLS_Z3_LIB z3::z3) - set(P4TOOLS_Z3_INCLUDE_DIR ${Z3_INCLUDE_DIR}) - else() - # Pull in a specific version of Z3 and link against it. - set(P4TOOLS_Z3_VERSION "4.13.0") - message(STATUS "Fetching Z3 version ${P4TOOLS_Z3_VERSION} for P4Tools...") - - # Unity builds do not work for Protobuf... - set(CMAKE_UNITY_BUILD_PREV ${CMAKE_UNITY_BUILD}) - set(CMAKE_UNITY_BUILD OFF) - # Print out download state while setting up Z3. - set(FETCHCONTENT_QUIET_PREV ${FETCHCONTENT_QUIET}) - set(FETCHCONTENT_QUIET OFF) - - set(Z3_BUILD_LIBZ3_SHARED OFF CACHE BOOL "Build libz3 as a shared library if true, otherwise build a static library") - set(Z3_INCLUDE_GIT_HASH OFF CACHE BOOL "Include git hash in version output") - set(Z3_INCLUDE_GIT_DESCRIBE OFF CACHE BOOL "Include git describe output in version output") - set(Z3_BUILD_TEST_EXECUTABLES OFF CACHE BOOL "Include git describe output in version output") - set(Z3_SAVE_CLANG_OPTIMIZATION_RECORDS OFF CACHE BOOL "Include git describe output in version output") - set(Z3_ENABLE_TRACING_FOR_NON_DEBUG OFF CACHE BOOL "Include git describe output in version output") - set(Z3_ENABLE_EXAMPLE_TARGETS OFF CACHE BOOL "Include git describe output in version output") - set(Z3_BUILD_DOTNET_BINDINGS OFF CACHE BOOL "Include git describe output in version output") - set(Z3_BUILD_PYTHON_BINDINGS OFF CACHE BOOL "Include git describe output in version output") - set(Z3_BUILD_JAVA_BINDINGS OFF CACHE BOOL "Include git describe output in version output") - set(Z3_BUILD_JULIA_BINDINGS OFF CACHE BOOL "Include git describe output in version output") - set(Z3_BUILD_DOCUMENTATION OFF CACHE BOOL "Include git describe output in version output") - set(Z3_ALWAYS_BUILD_DOCS OFF CACHE BOOL "Include git describe output in version output") - set(Z3_API_LOG_SYNC OFF CACHE BOOL "Include git describe output in version output") - set(Z3_BUILD_EXECUTABLE OFF CACHE BOOL "Include git describe output in version output") - fetchcontent_declare( - z3 - GIT_REPOSITORY https://github.com/Z3Prover/z3.git - GIT_TAG 51fcb10b2ff0e4496a3c0c2ed7c32f0876c9ee49 # 4.13.0 - GIT_PROGRESS TRUE - # GIT_SHALLOW TRUE - # We need to patch because the Z3 CMakeLists.txt also adds an uinstall target. - # This leads to a namespace clash. - PATCH_COMMAND - git apply ${P4TOOLS_SOURCE_DIR}/cmake/z3.patch || git apply - ${P4TOOLS_SOURCE_DIR}/cmake/z3.patch -R --check && echo - "Patch does not apply because the patch was already applied." - ) - fetchcontent_makeavailable_but_exclude_install(z3) - - # Suppress warnings for all Z3 targets. - get_all_targets(Z3_BUILD_TARGETS ${z3_SOURCE_DIR}) - foreach(target ${Z3_BUILD_TARGETS}) - # Do not suppress warnings for Z3 library targets that are aliased. - get_target_property(target_type ${target} TYPE) - if (NOT ${target_type} STREQUAL "INTERFACE_LIBRARY") - target_compile_options(${target} PRIVATE "-Wno-error" "-w") - # Z3 does not add its own include directories for compilation, which can lead to conflicts. - target_include_directories(${target} BEFORE PRIVATE ${z3_SOURCE_DIR}/src) - endif() - endforeach() - - # Reset temporary variable modifications. - set(CMAKE_UNITY_BUILD ${CMAKE_UNITY_BUILD_PREV}) - set(FETCHCONTENT_QUIET ${FETCHCONTENT_QUIET_PREV}) - - # Other projects may also pull in Z3. - # We have to make sure we only include our local version with P4Tools. - set(P4TOOLS_Z3_LIB libz3) - set(P4TOOLS_Z3_INCLUDE_DIR ${z3_SOURCE_DIR}/src/api ${z3_SOURCE_DIR}/src/api/c++) - endif() - - message(STATUS "Done with setting up Z3 for P4Tools.") -endmacro(p4tools_obtain_z3) diff --git a/cmake/Z3.cmake b/cmake/Z3.cmake index cf2e7904729..02b0dc0be73 100644 --- a/cmake/Z3.cmake +++ b/cmake/Z3.cmake @@ -19,50 +19,67 @@ macro(p4tools_obtain_z3) set(P4TOOLS_Z3_INCLUDE_DIR ${Z3_INCLUDE_DIR}) else() # Pull in a specific version of Z3 and link against it. - set(P4TOOLS_Z3_VERSION "4.11.2") - message("Fetching Z3 version ${P4TOOLS_Z3_VERSION} for P4Tools...") - - # Determine platform to fetch pre-built Z3 - if (CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "x86_64") - set(Z3_ARCH "x64") - if (APPLE) - set(Z3_PLATFORM_SUFFIX "osx-10.16") - set(Z3_ZIP_HASH "a56b6c40d9251a963aabe1f15731dd88ad1cb801d0e7b16e45f8b232175e165c") - elseif (UNIX) - set(Z3_PLATFORM_SUFFIX "glibc-2.31") - set(Z3_ZIP_HASH "9d0f70e61e82b321f35e6cad1343615d2dead6f2c54337a24293725de2900fb6") - else() - message(FATAL_ERROR "Unsupported system platform") - endif() - elseif(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "arm64") - set(Z3_ARCH "arm64") - if (APPLE) - set(Z3_PLATFORM_SUFFIX "osx-11.0") - set(Z3_ZIP_HASH "c021f381fa3169b1f7fb3b4fae81a1d1caf0dd8aa4aa773f4ab9d5e28c6657a4") - else() - message(FATAL_ERROR "Unsupported system platform") - endif() - else() - message(FATAL_ERROR "Unsupported system processor") - endif() + set(P4TOOLS_Z3_VERSION "4.13.0") + message(STATUS "Fetching Z3 version ${P4TOOLS_Z3_VERSION} for P4Tools...") + # Unity builds do not work for Protobuf... + set(CMAKE_UNITY_BUILD_PREV ${CMAKE_UNITY_BUILD}) + set(CMAKE_UNITY_BUILD OFF) # Print out download state while setting up Z3. set(FETCHCONTENT_QUIET_PREV ${FETCHCONTENT_QUIET}) set(FETCHCONTENT_QUIET OFF) + + set(Z3_BUILD_LIBZ3_SHARED OFF CACHE BOOL "Build libz3 as a shared library if true, otherwise build a static library") + set(Z3_INCLUDE_GIT_HASH OFF CACHE BOOL "Include git hash in version output") + set(Z3_INCLUDE_GIT_DESCRIBE OFF CACHE BOOL "Include git describe output in version output") + set(Z3_BUILD_TEST_EXECUTABLES OFF CACHE BOOL "Include git describe output in version output") + set(Z3_SAVE_CLANG_OPTIMIZATION_RECORDS OFF CACHE BOOL "Include git describe output in version output") + set(Z3_ENABLE_TRACING_FOR_NON_DEBUG OFF CACHE BOOL "Include git describe output in version output") + set(Z3_ENABLE_EXAMPLE_TARGETS OFF CACHE BOOL "Include git describe output in version output") + set(Z3_BUILD_DOTNET_BINDINGS OFF CACHE BOOL "Include git describe output in version output") + set(Z3_BUILD_PYTHON_BINDINGS OFF CACHE BOOL "Include git describe output in version output") + set(Z3_BUILD_JAVA_BINDINGS OFF CACHE BOOL "Include git describe output in version output") + set(Z3_BUILD_JULIA_BINDINGS OFF CACHE BOOL "Include git describe output in version output") + set(Z3_BUILD_DOCUMENTATION OFF CACHE BOOL "Include git describe output in version output") + set(Z3_ALWAYS_BUILD_DOCS OFF CACHE BOOL "Include git describe output in version output") + set(Z3_API_LOG_SYNC OFF CACHE BOOL "Include git describe output in version output") + set(Z3_BUILD_EXECUTABLE OFF CACHE BOOL "Include git describe output in version output") fetchcontent_declare( z3 - URL https://github.com/Z3Prover/z3/releases/download/z3-${P4TOOLS_Z3_VERSION}/z3-${P4TOOLS_Z3_VERSION}-${Z3_ARCH}-${Z3_PLATFORM_SUFFIX}.zip - URL_HASH SHA256=${Z3_ZIP_HASH} - USES_TERMINAL_DOWNLOAD TRUE + GIT_REPOSITORY https://github.com/Z3Prover/z3.git + GIT_TAG 51fcb10b2ff0e4496a3c0c2ed7c32f0876c9ee49 # 4.13.0 GIT_PROGRESS TRUE + # GIT_SHALLOW TRUE + # We need to patch because the Z3 CMakeLists.txt also adds an uinstall target. + # This leads to a namespace clash. + PATCH_COMMAND + git apply ${P4TOOLS_SOURCE_DIR}/cmake/z3.patch || git apply + ${P4TOOLS_SOURCE_DIR}/cmake/z3.patch -R --check && echo + "Patch does not apply because the patch was already applied." ) - fetchcontent_makeavailable(z3) + fetchcontent_makeavailable_but_exclude_install(z3) + + # Suppress warnings for all Z3 targets. + get_all_targets(Z3_BUILD_TARGETS ${z3_SOURCE_DIR}) + foreach(target ${Z3_BUILD_TARGETS}) + # Do not suppress warnings for Z3 library targets that are aliased. + get_target_property(target_type ${target} TYPE) + if (NOT ${target_type} STREQUAL "INTERFACE_LIBRARY") + target_compile_options(${target} PRIVATE "-Wno-error" "-w") + # Z3 does not add its own include directories for compilation, which can lead to conflicts. + target_include_directories(${target} BEFORE PRIVATE ${z3_SOURCE_DIR}/src) + endif() + endforeach() + + # Reset temporary variable modifications. + set(CMAKE_UNITY_BUILD ${CMAKE_UNITY_BUILD_PREV}) set(FETCHCONTENT_QUIET ${FETCHCONTENT_QUIET_PREV}) - message("Done with setting up Z3 for P4Tools.") # Other projects may also pull in Z3. # We have to make sure we only include our local version with P4Tools. - set(P4TOOLS_Z3_LIB ${z3_SOURCE_DIR}/bin/libz3${CMAKE_STATIC_LIBRARY_SUFFIX}) - set(P4TOOLS_Z3_INCLUDE_DIR ${z3_SOURCE_DIR}/include) + set(P4TOOLS_Z3_LIB libz3) + set(P4TOOLS_Z3_INCLUDE_DIR ${z3_SOURCE_DIR}/src/api ${z3_SOURCE_DIR}/src/api/c++) endif() + + message(STATUS "Done with setting up Z3 for P4Tools.") endmacro(p4tools_obtain_z3) diff --git a/backends/p4tools/cmake/z3.patch b/cmake/z3.patch similarity index 100% rename from backends/p4tools/cmake/z3.patch rename to cmake/z3.patch