Skip to content

Commit

Permalink
cmake: add ZIG_BUILD_ARGS_OVERRIDE string option
Browse files Browse the repository at this point in the history
Useful when someone wants to pass argument that is not yet exposed
to CMake via `ZIG_WHATEVER` option, for example `--search-prefix` from here:
ziglang#18434 .

Also change order of arguments in cmake/install.cmake to be the same
as in CMakeLists.txt, so that `--prefix` can be overriden in both steps.

Also bump minimum CMake version to "3.9".

Signed-off-by: Eric Joldasov <[email protected]>
  • Loading branch information
BratishkaErik committed May 10, 2024
1 parent bcb534c commit 61c619f
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 51 deletions.
105 changes: 56 additions & 49 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.5)
cmake_minimum_required(VERSION 3.9)
include(CheckSymbolExists)

if(NOT CMAKE_BUILD_TYPE)
Expand Down Expand Up @@ -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"
)
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ mechanism supports that use case too (i.e. `/usr/bin/zig` and `/usr/lib/zig/`).

Ensure you have the required dependencies:

* CMake >= 3.5
* CMake >= 3.9
* System C/C++ Toolchain
* LLVM, Clang, LLD development libraries == 17.x

Expand Down
2 changes: 1 addition & 1 deletion cmake/install.cmake
Original file line number Diff line number Diff line change
@@ -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}"
Expand Down

0 comments on commit 61c619f

Please sign in to comment.