build: refresh toolchain and dependency wiring
This commit is contained in:
@@ -14,9 +14,24 @@ set(_YAZE_USE_SYSTEM_GTEST ${YAZE_USE_SYSTEM_DEPS})
|
||||
|
||||
# Detect Homebrew installation automatically (helps offline builds)
|
||||
if(APPLE AND NOT _YAZE_USE_SYSTEM_GTEST)
|
||||
set(_YAZE_GTEST_PREFIX_CANDIDATES
|
||||
/opt/homebrew/opt/googletest
|
||||
/usr/local/opt/googletest)
|
||||
set(_YAZE_GTEST_PREFIX_CANDIDATES)
|
||||
set(_YAZE_HOST_ARCH "${CMAKE_SYSTEM_PROCESSOR}")
|
||||
if(NOT _YAZE_HOST_ARCH)
|
||||
execute_process(
|
||||
COMMAND uname -m
|
||||
OUTPUT_VARIABLE _YAZE_HOST_ARCH
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
ERROR_QUIET)
|
||||
endif()
|
||||
|
||||
if(_YAZE_HOST_ARCH STREQUAL "arm64")
|
||||
list(APPEND _YAZE_GTEST_PREFIX_CANDIDATES
|
||||
/opt/homebrew/opt/googletest)
|
||||
else()
|
||||
list(APPEND _YAZE_GTEST_PREFIX_CANDIDATES
|
||||
/usr/local/opt/googletest
|
||||
/opt/homebrew/opt/googletest)
|
||||
endif()
|
||||
|
||||
foreach(_prefix IN LISTS _YAZE_GTEST_PREFIX_CANDIDATES)
|
||||
if(EXISTS "${_prefix}")
|
||||
@@ -37,9 +52,13 @@ if(APPLE AND NOT _YAZE_USE_SYSTEM_GTEST)
|
||||
RESULT_VARIABLE HOMEBREW_GTEST_RESULT
|
||||
ERROR_QUIET)
|
||||
if(HOMEBREW_GTEST_RESULT EQUAL 0 AND EXISTS "${HOMEBREW_GTEST_PREFIX}")
|
||||
if(_YAZE_HOST_ARCH STREQUAL "arm64" AND NOT HOMEBREW_GTEST_PREFIX MATCHES "^/opt/homebrew")
|
||||
message(STATUS "Skipping Homebrew googletest prefix on arm64: ${HOMEBREW_GTEST_PREFIX}")
|
||||
else()
|
||||
list(APPEND CMAKE_PREFIX_PATH "${HOMEBREW_GTEST_PREFIX}")
|
||||
message(STATUS "Added Homebrew googletest prefix: ${HOMEBREW_GTEST_PREFIX}")
|
||||
set(_YAZE_USE_SYSTEM_GTEST ON)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@@ -7,16 +7,39 @@
|
||||
# 1. Set the target system (macOS)
|
||||
set(CMAKE_SYSTEM_NAME Darwin)
|
||||
|
||||
# Ensure a non-empty system version for third-party CMake logic.
|
||||
if(NOT CMAKE_SYSTEM_VERSION)
|
||||
execute_process(
|
||||
COMMAND sw_vers -productVersion
|
||||
OUTPUT_VARIABLE _yaze_macos_version
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
ERROR_QUIET
|
||||
)
|
||||
if(_yaze_macos_version)
|
||||
set(CMAKE_SYSTEM_VERSION "${_yaze_macos_version}")
|
||||
else()
|
||||
set(CMAKE_SYSTEM_VERSION "0")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# 2. Find the Homebrew LLVM installation path
|
||||
# We use execute_process to make this portable across machine architectures.
|
||||
execute_process(
|
||||
COMMAND brew --prefix llvm@18
|
||||
OUTPUT_VARIABLE HOMEBREW_LLVM_PREFIX
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
set(_yaze_llvm_candidates llvm@21 llvm@20 llvm@19 llvm@18 llvm)
|
||||
foreach(_yaze_llvm_candidate IN LISTS _yaze_llvm_candidates)
|
||||
execute_process(
|
||||
COMMAND brew --prefix ${_yaze_llvm_candidate}
|
||||
OUTPUT_VARIABLE _yaze_llvm_prefix
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
RESULT_VARIABLE _yaze_llvm_result
|
||||
)
|
||||
if(_yaze_llvm_result EQUAL 0 AND EXISTS "${_yaze_llvm_prefix}")
|
||||
set(HOMEBREW_LLVM_PREFIX "${_yaze_llvm_prefix}")
|
||||
break()
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
if(NOT EXISTS "${HOMEBREW_LLVM_PREFIX}")
|
||||
message(FATAL_ERROR "Homebrew LLVM not found. Please run 'brew install llvm'. Path: ${HOMEBREW_LLVM_PREFIX}")
|
||||
message(FATAL_ERROR "Homebrew LLVM not found. Please run 'brew install llvm'.")
|
||||
endif()
|
||||
|
||||
# Cache this variable so it's available in the main CMakeLists.txt
|
||||
@@ -52,18 +75,29 @@ execute_process(
|
||||
set(CMAKE_SYSROOT "${CMAKE_OSX_SYSROOT}")
|
||||
message(STATUS "Using macOS SDK at: ${CMAKE_SYSROOT}")
|
||||
|
||||
# 5. **[THE CRITICAL FIX]** Explicitly define the C++ standard library include directory.
|
||||
# This forces CMake to add Homebrew's libc++ headers to the search path *before*
|
||||
# any other system paths, resolving the header conflict for the main project
|
||||
# and all dependencies.
|
||||
set(CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES "${HOMEBREW_LLVM_PREFIX}/include/c++/v1")
|
||||
# 5. Ensure Homebrew libc++ + Clang resource headers are searched before SDK headers.
|
||||
execute_process(
|
||||
COMMAND "${HOMEBREW_LLVM_PREFIX}/bin/clang++" -print-resource-dir
|
||||
OUTPUT_VARIABLE HOMEBREW_LLVM_RESOURCE_DIR
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
set(HOMEBREW_LLVM_RESOURCE_INCLUDE "${HOMEBREW_LLVM_RESOURCE_DIR}/include")
|
||||
|
||||
if(EXISTS "${HOMEBREW_LLVM_PREFIX}/include/c++/v1")
|
||||
set(CMAKE_INCLUDE_DIRECTORIES_BEFORE ON)
|
||||
include_directories(BEFORE SYSTEM "${HOMEBREW_LLVM_PREFIX}/include/c++/v1")
|
||||
endif()
|
||||
if(EXISTS "${HOMEBREW_LLVM_RESOURCE_INCLUDE}")
|
||||
include_directories(BEFORE SYSTEM "${HOMEBREW_LLVM_RESOURCE_INCLUDE}")
|
||||
endif()
|
||||
|
||||
# 5.5 Ensure Homebrew libc++ is linked to avoid mixing ABI with system libc++.
|
||||
set(_yaze_llvm_lib_dir "${HOMEBREW_LLVM_PREFIX}/lib")
|
||||
set(_yaze_llvm_libcxx_dir "${HOMEBREW_LLVM_PREFIX}/lib/c++")
|
||||
set(CMAKE_CXX_FLAGS_INIT "${CMAKE_CXX_FLAGS_INIT} -stdlib=libc++")
|
||||
set(CMAKE_EXE_LINKER_FLAGS_INIT "${CMAKE_EXE_LINKER_FLAGS_INIT} -L${_yaze_llvm_lib_dir} -Wl,-rpath,${_yaze_llvm_lib_dir}")
|
||||
set(CMAKE_SHARED_LINKER_FLAGS_INIT "${CMAKE_SHARED_LINKER_FLAGS_INIT} -L${_yaze_llvm_lib_dir} -Wl,-rpath,${_yaze_llvm_lib_dir}")
|
||||
set(CMAKE_MODULE_LINKER_FLAGS_INIT "${CMAKE_MODULE_LINKER_FLAGS_INIT} -L${_yaze_llvm_lib_dir} -Wl,-rpath,${_yaze_llvm_lib_dir}")
|
||||
set(CMAKE_EXE_LINKER_FLAGS_INIT "${CMAKE_EXE_LINKER_FLAGS_INIT} -L${_yaze_llvm_lib_dir} -Wl,-rpath,${_yaze_llvm_lib_dir} -L${_yaze_llvm_libcxx_dir} -Wl,-rpath,${_yaze_llvm_libcxx_dir}")
|
||||
set(CMAKE_SHARED_LINKER_FLAGS_INIT "${CMAKE_SHARED_LINKER_FLAGS_INIT} -L${_yaze_llvm_lib_dir} -Wl,-rpath,${_yaze_llvm_lib_dir} -L${_yaze_llvm_libcxx_dir} -Wl,-rpath,${_yaze_llvm_libcxx_dir}")
|
||||
set(CMAKE_MODULE_LINKER_FLAGS_INIT "${CMAKE_MODULE_LINKER_FLAGS_INIT} -L${_yaze_llvm_lib_dir} -Wl,-rpath,${_yaze_llvm_lib_dir} -L${_yaze_llvm_libcxx_dir} -Wl,-rpath,${_yaze_llvm_libcxx_dir}")
|
||||
|
||||
# 6. Set the default installation path for macOS frameworks
|
||||
set(CMAKE_FIND_FRAMEWORK FIRST)
|
||||
|
||||
@@ -8,6 +8,7 @@ option(YAZE_BUILD_Z3ED "Build z3ed CLI executable" ON)
|
||||
option(YAZE_BUILD_EMU "Build emulator components" ON)
|
||||
option(YAZE_BUILD_LIB "Build static library" ON)
|
||||
option(YAZE_BUILD_TESTS "Build test suite" ON)
|
||||
option(YAZE_BUILD_TOOLS "Build development utility tools" ${YAZE_BUILD_TESTS})
|
||||
|
||||
# Feature flags
|
||||
option(YAZE_ENABLE_GRPC "Enable gRPC agent support" ON)
|
||||
@@ -149,4 +150,3 @@ message(STATUS "Sanitizers: ${YAZE_ENABLE_SANITIZERS}")
|
||||
message(STATUS "Coverage: ${YAZE_ENABLE_COVERAGE}")
|
||||
message(STATUS "OpenCV Visual Analysis: ${YAZE_ENABLE_OPENCV}")
|
||||
message(STATUS "=================================")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user