commit e23d48e61a594cabb735accf4c0a18dab6ae18a2 (tree)
parent e3736baddb8ecff90f0594be9f604c7484ce9aa2
Author: Andrew Kelley <andrew@ziglang.org>
Date: Sat, 17 Jun 2023 14:22:43 -0700
Merge pull request #15511 from mikdusan/netbsd-pkgsrc
netbsd: pkgsrc
Diffstat:
2 files changed, 13 insertions(+), 6 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
@@ -120,6 +120,8 @@ if(ZIG_AR_WORKAROUND)
string(REPLACE "<CMAKE_AR>" "<CMAKE_AR> ar" CMAKE_CXX_ARCHIVE_CREATE ${CMAKE_CXX_ARCHIVE_CREATE})
endif()
+set(ZIG_PIE off CACHE BOOL "produce a position independent zig executable")
+
find_package(llvm 16)
find_package(clang 16)
find_package(lld 16)
@@ -671,7 +673,12 @@ if(ZIG_STATIC)
endif()
add_library(zigcpp STATIC ${ZIG_CPP_SOURCES})
-set_target_properties(zigcpp PROPERTIES COMPILE_FLAGS ${EXE_CXX_FLAGS})
+if(ZIG_PIE)
+ set(ZIGCPP_CXX_FLAGS "${EXE_CXX_FLAGS} -fPIC")
+else()
+ set(ZIGCPP_CXX_FLAGS "${EXE_CXX_FLAGS}")
+endif()
+set_target_properties(zigcpp PROPERTIES COMPILE_FLAGS ${ZIGCPP_CXX_FLAGS})
target_link_libraries(zigcpp LINK_PUBLIC
${CLANG_LIBRARIES}
@@ -823,10 +830,10 @@ else()
set(ZIG_STATIC_ARG "")
endif()
-if(CMAKE_POSITION_INDEPENDENT_CODE)
- set(ZIG_PIE_ARG="-Dpie")
+if(CMAKE_POSITION_INDEPENDENT_CODE OR ZIG_PIE)
+ set(ZIG_PIE_ARG "-Dpie")
else()
- set(ZIG_PIE_ARG="")
+ set(ZIG_PIE_ARG "")
endif()
set(ZIG_BUILD_ARGS
diff --git a/src/link/Elf.zig b/src/link/Elf.zig
@@ -1667,10 +1667,10 @@ fn linkWithLLD(self: *Elf, comp: *Compilation, prog_node: *std.Progress.Node) !v
try argv.append("-pie");
}
- if (self.base.options.link_mode == .Dynamic and target.os.tag == .netbsd) {
+ if (is_dyn_lib and target.os.tag == .netbsd) {
// Add options to produce shared objects with only 2 PT_LOAD segments.
// NetBSD expects 2 PT_LOAD segments in a shared object, otherwise
- // ld.elf_so fails to load, emitting a general "not found" error.
+ // ld.elf_so fails loading dynamic libraries with "not found" error.
// See https://github.com/ziglang/zig/issues/9109 .
try argv.append("--no-rosegment");
try argv.append("-znorelro");