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 9, 2024
1 parent bcb534c commit ffd8abb
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 50 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 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 ffd8abb

Please sign in to comment.