authorgravatar for bratishkaerik@getgoogleoff.meEric Joldasov <bratishkaerik@getgoogleoff.me> 2024-05-14 22:49:12+05:00
committergravatar for bratishkaerik@landless-city.netEric Joldasov <bratishkaerik@landless-city.net> 2024-05-14 23:40:42+05:00
log34ed49c62d55e43afcc7be91391243d273985818
treece30e3ec9031c5f4f0f3f4d3d4d29c0783d6f66a
parentb59c722a3fed1b873d4f82f38d248775bfe23ae4
signaturelock-open Commit is signed but in an unrecognized format.

CMake: refactor `ZIG_PIE` and `ZIG_BUILD_ARGS`

Set `ZIG_PIE` default to be same as `CMAKE_POSITION_INDEPENDENT_CODE`, and add check for situation when `ZIG_PIE` is set to True but CMake does not support compiling position independent code. CMake's support is needed for "zigcpp" target. Also remove temporary variables for constructing `ZIG_BUILD_ARGS`, instead use `list(APPEND ...)` functions. Also remove long unused `ZIG_NO_LANGREF` variable. Signed-off-by: Eric Joldasov <bratishkaerik@landless-city.net>

1 files changed, 45 insertions(+), 45 deletions(-)

CMakeLists.txt+45-45
...@@ -87,11 +87,6 @@ message(STATUS "Configuring zig version ${RESOLVED_ZIG_VERSION}")...@@ -87,11 +87,6 @@ message(STATUS "Configuring zig version ${RESOLVED_ZIG_VERSION}")
87set(ZIG_NO_LIB off CACHE BOOL87set(ZIG_NO_LIB off CACHE BOOL
88 "Disable copying lib/ files to install prefix during the build phase")88 "Disable copying lib/ files to install prefix during the build phase")
8989
90# This used to do something and it may or may not do something in the future.
91# Right now it does nothing.
92set(ZIG_NO_LANGREF off CACHE BOOL
93 "Disable copying of langref to the install prefix during the build phase")
94
95set(ZIG_STATIC off CACHE BOOL "Attempt to build a static zig executable (not compatible with glibc)")90set(ZIG_STATIC off CACHE BOOL "Attempt to build a static zig executable (not compatible with glibc)")
96set(ZIG_SHARED_LLVM off CACHE BOOL "Prefer linking against shared LLVM libraries")91set(ZIG_SHARED_LLVM off CACHE BOOL "Prefer linking against shared LLVM libraries")
97set(ZIG_STATIC_LLVM ${ZIG_STATIC} CACHE BOOL "Prefer linking against static LLVM libraries")92set(ZIG_STATIC_LLVM ${ZIG_STATIC} CACHE BOOL "Prefer linking against static LLVM libraries")
...@@ -136,7 +131,17 @@ if(ZIG_AR_WORKAROUND)...@@ -136,7 +131,17 @@ if(ZIG_AR_WORKAROUND)
136 string(REPLACE "<CMAKE_AR>" "<CMAKE_AR> ar" CMAKE_CXX_ARCHIVE_CREATE ${CMAKE_CXX_ARCHIVE_CREATE})131 string(REPLACE "<CMAKE_AR>" "<CMAKE_AR> ar" CMAKE_CXX_ARCHIVE_CREATE ${CMAKE_CXX_ARCHIVE_CREATE})
137endif()132endif()
138133
139set(ZIG_PIE off CACHE BOOL "produce a position independent zig executable")134
135option(ZIG_PIE "Produce a position independent zig executable" ${CMAKE_POSITION_INDEPENDENT_CODE})
136include(CheckPIESupported)
137check_pie_supported(
138 OUTPUT_VARIABLE ZIG_PIE_SUPPORTED_BY_CMAKE
139 LANGUAGES C CXX
140)
141if(ZIG_PIE AND NOT ZIG_PIE_SUPPORTED_BY_CMAKE)
142 message(SEND_ERROR "ZIG_PIE was requested but CMake does not support it for \"zigcpp\" target")
143endif()
144
140145
141# Detect system libcxx name.146# Detect system libcxx name.
142if ("c++" IN_LIST CMAKE_CXX_IMPLICIT_LINK_LIBRARIES)147if ("c++" IN_LIST CMAKE_CXX_IMPLICIT_LINK_LIBRARIES)
...@@ -925,56 +930,51 @@ if(MSVC OR MINGW)...@@ -925,56 +930,51 @@ if(MSVC OR MINGW)
925 target_link_libraries(zig2 LINK_PUBLIC version)930 target_link_libraries(zig2 LINK_PUBLIC version)
926endif()931endif()
927932
933
934# "-Dno-langref" and "-Dstd-docs=false" are hardcoded because they take too long to build.
935# To obtain these two forms of documentation, run zig build against stage3 rather than stage2.
936set(ZIG_BUILD_ARGS
937 --zig-lib-dir "${PROJECT_SOURCE_DIR}/lib"
938
939 "-Dversion-string=${RESOLVED_ZIG_VERSION}"
940 "-Dtarget=${ZIG_TARGET_TRIPLE}"
941 "-Dcpu=${ZIG_TARGET_MCPU}"
942
943 -Denable-llvm
944 "-Dconfig_h=${ZIG_CONFIG_H_OUT}"
945
946 -Dno-langref
947 -Dstd-docs=false
948)
949
928if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")950if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
929 set(ZIG_RELEASE_ARG "")951 list(APPEND ZIG_BUILD_ARGS -Doptimize=Debug)
930elseif("${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo")952elseif("${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo")
931 set(ZIG_RELEASE_ARG -Doptimize=ReleaseFast)953 list(APPEND ZIG_BUILD_ARGS -Doptimize=ReleaseFast)
932else()954else()
933 set(ZIG_RELEASE_ARG -Doptimize=ReleaseFast -Dstrip)955 list(APPEND ZIG_BUILD_ARGS -Doptimize=ReleaseFast -Dstrip)
956endif()
957
958if(ZIG_STATIC AND NOT MSVC)
959 list(APPEND ZIG_BUILD_ARGS -Duse-zig-libcxx)
934endif()960endif()
961
935if(ZIG_NO_LIB)962if(ZIG_NO_LIB)
936 set(ZIG_NO_LIB_ARG "-Dno-lib")963 list(APPEND ZIG_BUILD_ARGS -Dno-lib)
937else()
938 set(ZIG_NO_LIB_ARG "")
939endif()964endif()
965
940if(ZIG_SINGLE_THREADED)966if(ZIG_SINGLE_THREADED)
941 set(ZIG_SINGLE_THREADED_ARG "-Dsingle-threaded")967 list(APPEND ZIG_BUILD_ARGS -Dsingle-threaded)
942else()
943 set(ZIG_SINGLE_THREADED_ARG "")
944endif()968endif()
945if(ZIG_STATIC AND NOT MSVC)969
946 set(ZIG_STATIC_ARG "-Duse-zig-libcxx")970if(ZIG_PIE)
947else()971 list(APPEND ZIG_BUILD_ARGS -Dpie)
948 set(ZIG_STATIC_ARG "")
949endif()
950if(CMAKE_POSITION_INDEPENDENT_CODE OR ZIG_PIE)
951 set(ZIG_PIE_ARG "-Dpie")
952else()
953 set(ZIG_PIE_ARG "")
954endif()972endif()
955if("${ZIG_TARGET_DYNAMIC_LINKER}" STREQUAL "")973
956 set(ZIG_DYNAMIC_LINKER_ARG "")974if(NOT "${ZIG_TARGET_DYNAMIC_LINKER}" STREQUAL "")
957else()975 list(APPEND ZIG_BUILD_ARGS "-Ddynamic-linker=${ZIG_TARGET_DYNAMIC_LINKER}")
958 set(ZIG_DYNAMIC_LINKER_ARG "-Ddynamic-linker=${ZIG_TARGET_DYNAMIC_LINKER}")
959endif()976endif()
960977
961# -Dno-langref is currently hardcoded because building the langref takes too damn long
962# To obtain these two forms of documentation, run zig build against stage3 rather than stage2.
963set(ZIG_BUILD_ARGS
964 --zig-lib-dir "${PROJECT_SOURCE_DIR}/lib"
965 "-Dconfig_h=${ZIG_CONFIG_H_OUT}"
966 "-Denable-llvm"
967 ${ZIG_RELEASE_ARG}
968 ${ZIG_STATIC_ARG}
969 ${ZIG_NO_LIB_ARG}
970 "-Dno-langref"
971 ${ZIG_SINGLE_THREADED_ARG}
972 ${ZIG_PIE_ARG}
973 "-Dtarget=${ZIG_TARGET_TRIPLE}"
974 "-Dcpu=${ZIG_TARGET_MCPU}"
975 ${ZIG_DYNAMIC_LINKER_ARG}
976 "-Dversion-string=${RESOLVED_ZIG_VERSION}"
977)
978978
979add_custom_target(stage3 ALL979add_custom_target(stage3 ALL
980 DEPENDS "${PROJECT_BINARY_DIR}/stage3/bin/zig"980 DEPENDS "${PROJECT_BINARY_DIR}/stage3/bin/zig"