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}")
8787set(ZIG_NO_LIB off CACHE BOOL
8888 "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
9590set(ZIG_STATIC off CACHE BOOL "Attempt to build a static zig executable (not compatible with glibc)")
9691set(ZIG_SHARED_LLVM off CACHE BOOL "Prefer linking against shared LLVM libraries")
9792set(ZIG_STATIC_LLVM ${ZIG_STATIC} CACHE BOOL "Prefer linking against static LLVM libraries")
......@@ -136,7 +131,17 @@ if(ZIG_AR_WORKAROUND)
136131 string(REPLACE "<CMAKE_AR>" "<CMAKE_AR> ar" CMAKE_CXX_ARCHIVE_CREATE ${CMAKE_CXX_ARCHIVE_CREATE})
137132endif()
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
141146# Detect system libcxx name.
142147if ("c++" IN_LIST CMAKE_CXX_IMPLICIT_LINK_LIBRARIES)
......@@ -925,56 +930,51 @@ if(MSVC OR MINGW)
925930 target_link_libraries(zig2 LINK_PUBLIC version)
926931endif()
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
928950if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
929 set(ZIG_RELEASE_ARG "")
951 list(APPEND ZIG_BUILD_ARGS -Doptimize=Debug)
930952elseif("${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo")
931 set(ZIG_RELEASE_ARG -Doptimize=ReleaseFast)
953 list(APPEND ZIG_BUILD_ARGS -Doptimize=ReleaseFast)
932954else()
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)
934960endif()
961
935962if(ZIG_NO_LIB)
936 set(ZIG_NO_LIB_ARG "-Dno-lib")
937else()
938 set(ZIG_NO_LIB_ARG "")
963 list(APPEND ZIG_BUILD_ARGS -Dno-lib)
939964endif()
965
940966if(ZIG_SINGLE_THREADED)
941 set(ZIG_SINGLE_THREADED_ARG "-Dsingle-threaded")
942else()
943 set(ZIG_SINGLE_THREADED_ARG "")
967 list(APPEND ZIG_BUILD_ARGS -Dsingle-threaded)
944968endif()
945if(ZIG_STATIC AND NOT MSVC)
946 set(ZIG_STATIC_ARG "-Duse-zig-libcxx")
947else()
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 "")
969
970if(ZIG_PIE)
971 list(APPEND ZIG_BUILD_ARGS -Dpie)
954972endif()
955if("${ZIG_TARGET_DYNAMIC_LINKER}" STREQUAL "")
956 set(ZIG_DYNAMIC_LINKER_ARG "")
957else()
958 set(ZIG_DYNAMIC_LINKER_ARG "-Ddynamic-linker=${ZIG_TARGET_DYNAMIC_LINKER}")
973
974if(NOT "${ZIG_TARGET_DYNAMIC_LINKER}" STREQUAL "")
975 list(APPEND ZIG_BUILD_ARGS "-Ddynamic-linker=${ZIG_TARGET_DYNAMIC_LINKER}")
959976endif()
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
979979add_custom_target(stage3 ALL
980980 DEPENDS "${PROJECT_BINARY_DIR}/stage3/bin/zig"