From e7011d0d0bc51d1019d64e902a9b6466112abcbc Mon Sep 17 00:00:00 2001 From: Eric Joldasov Date: Thu, 9 May 2024 19:07:11 +0500 Subject: [PATCH] cmake: add `ZIG_BUILD_ARGS_OVERRIDE` string option Useful when someone wants to pass argument that is not yet exposed to CMake via "ZIG_WHATEVER" option, for example "--search-prefix" from here: https://github.com/ziglang/zig/issues/18434 . Also bump minimum CMake version to "3.9". Signed-off-by: Eric Joldasov --- CMakeLists.txt | 105 +++++++++++++++++++++++--------------------- cmake/install.cmake | 2 +- 2 files changed, 57 insertions(+), 50 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 10885827fcec..30a34b9545ed 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.5) +cmake_minimum_required(VERSION 3.9) include(CheckSymbolExists) if(NOT CMAKE_BUILD_TYPE) @@ -925,57 +925,64 @@ if(MSVC OR MINGW) target_link_libraries(zig2 LINK_PUBLIC version) endif() -if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") - set(ZIG_RELEASE_ARG "") -elseif("${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo") - set(ZIG_RELEASE_ARG -Doptimize=ReleaseFast) -else() - set(ZIG_RELEASE_ARG -Doptimize=ReleaseFast -Dstrip) -endif() -if(ZIG_NO_LIB) - set(ZIG_NO_LIB_ARG "-Dno-lib") -else() - set(ZIG_NO_LIB_ARG "") -endif() -if(ZIG_SINGLE_THREADED) - set(ZIG_SINGLE_THREADED_ARG "-Dsingle-threaded") -else() - set(ZIG_SINGLE_THREADED_ARG "") -endif() -if(ZIG_STATIC AND NOT MSVC) - set(ZIG_STATIC_ARG "-Duse-zig-libcxx") -else() - set(ZIG_STATIC_ARG "") -endif() -if(CMAKE_POSITION_INDEPENDENT_CODE OR ZIG_PIE) - set(ZIG_PIE_ARG "-Dpie") -else() - set(ZIG_PIE_ARG "") -endif() -if("${ZIG_TARGET_DYNAMIC_LINKER}" STREQUAL "") - set(ZIG_DYNAMIC_LINKER_ARG "") +set(ZIG_BUILD_ARGS_OVERRIDE "" CACHE STRING "Override args used to build stage3. By default auto-filled using other CMake arguments. \"--prefix\" argument is passed before this.") + +if("${ZIG_BUILD_ARGS_OVERRIDE}" STREQUAL "") + if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") + set(ZIG_RELEASE_ARG "") + elseif("${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo") + set(ZIG_RELEASE_ARG -Doptimize=ReleaseFast) + else() + set(ZIG_RELEASE_ARG -Doptimize=ReleaseFast -Dstrip) + endif() + if(ZIG_NO_LIB) + set(ZIG_NO_LIB_ARG "-Dno-lib") + else() + set(ZIG_NO_LIB_ARG "") + endif() + if(ZIG_SINGLE_THREADED) + set(ZIG_SINGLE_THREADED_ARG "-Dsingle-threaded") + else() + set(ZIG_SINGLE_THREADED_ARG "") + endif() + if(ZIG_STATIC AND NOT MSVC) + set(ZIG_STATIC_ARG "-Duse-zig-libcxx") + else() + set(ZIG_STATIC_ARG "") + endif() + if(CMAKE_POSITION_INDEPENDENT_CODE OR ZIG_PIE) + set(ZIG_PIE_ARG "-Dpie") + else() + set(ZIG_PIE_ARG "") + endif() + if("${ZIG_TARGET_DYNAMIC_LINKER}" STREQUAL "") + set(ZIG_DYNAMIC_LINKER_ARG "") + else() + set(ZIG_DYNAMIC_LINKER_ARG "-Ddynamic-linker=${ZIG_TARGET_DYNAMIC_LINKER}") + endif() + + # -Dno-langref is currently hardcoded because building the langref takes too damn long + # To obtain these two forms of documentation, run zig build against stage3 rather than stage2. + set(ZIG_BUILD_ARGS + --zig-lib-dir "${CMAKE_SOURCE_DIR}/lib" + "-Dconfig_h=${ZIG_CONFIG_H_OUT}" + "-Denable-llvm" + ${ZIG_RELEASE_ARG} + ${ZIG_STATIC_ARG} + ${ZIG_NO_LIB_ARG} + "-Dno-langref" + ${ZIG_SINGLE_THREADED_ARG} + ${ZIG_PIE_ARG} + "-Dtarget=${ZIG_TARGET_TRIPLE}" + "-Dcpu=${ZIG_TARGET_MCPU}" + ${ZIG_DYNAMIC_LINKER_ARG} + "-Dversion-string=${RESOLVED_ZIG_VERSION}" + ) else() - set(ZIG_DYNAMIC_LINKER_ARG "-Ddynamic-linker=${ZIG_TARGET_DYNAMIC_LINKER}") + # Parse space-separated arguments into a list. + separate_arguments(ZIG_BUILD_ARGS NATIVE_COMMAND ${ZIG_BUILD_ARGS_OVERRIDE}) endif() -# -Dno-langref is currently hardcoded because building the langref takes too damn long -# To obtain these two forms of documentation, run zig build against stage3 rather than stage2. -set(ZIG_BUILD_ARGS - --zig-lib-dir "${CMAKE_SOURCE_DIR}/lib" - "-Dconfig_h=${ZIG_CONFIG_H_OUT}" - "-Denable-llvm" - ${ZIG_RELEASE_ARG} - ${ZIG_STATIC_ARG} - ${ZIG_NO_LIB_ARG} - "-Dno-langref" - ${ZIG_SINGLE_THREADED_ARG} - ${ZIG_PIE_ARG} - "-Dtarget=${ZIG_TARGET_TRIPLE}" - "-Dcpu=${ZIG_TARGET_MCPU}" - ${ZIG_DYNAMIC_LINKER_ARG} - "-Dversion-string=${RESOLVED_ZIG_VERSION}" -) - add_custom_target(stage3 ALL DEPENDS "${CMAKE_BINARY_DIR}/stage3/bin/zig" ) diff --git a/cmake/install.cmake b/cmake/install.cmake index 4a8356313e6f..7efa2fd180e2 100644 --- a/cmake/install.cmake +++ b/cmake/install.cmake @@ -1,4 +1,4 @@ -set(ZIG_INSTALL_ARGS build ${ZIG_BUILD_ARGS} --prefix "${CMAKE_INSTALL_PREFIX}") +set(ZIG_INSTALL_ARGS build --prefix "${CMAKE_INSTALL_PREFIX}" ${ZIG_BUILD_ARGS}) execute_process( COMMAND "${ZIG_EXECUTABLE}" ${ZIG_INSTALL_ARGS} WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"