authorgravatar for kcbanner@gmail.comCasey Banner <kcbanner@gmail.com> 2022-11-01 23:11:52-04:00
committergravatar for kcbanner@gmail.comCasey Banner <kcbanner@gmail.com> 2023-01-04 21:45:05-05:00
log4ffc2bbb5ec6993802a59f358c4316375615a27c
tree64243bb1a8b4d909a11ca0685573a4668144c301
parented2361563860031559addbe276eb64114b93cec5

cmake: handle llvm system libraries separately from the llvm libraries themselves, to fix path issues on windows


3 files changed, 33 insertions(+), 3 deletions(-)

build.zig+24
...@@ -552,6 +552,7 @@ fn addCmakeCfgOptionsToExe(...@@ -552,6 +552,7 @@ fn addCmakeCfgOptionsToExe(
552 addCMakeLibraryList(exe, cfg.clang_libraries);552 addCMakeLibraryList(exe, cfg.clang_libraries);
553 addCMakeLibraryList(exe, cfg.lld_libraries);553 addCMakeLibraryList(exe, cfg.lld_libraries);
554 addCMakeLibraryList(exe, cfg.llvm_libraries);554 addCMakeLibraryList(exe, cfg.llvm_libraries);
555 addCMakeSystemLibraryList(exe, cfg.llvm_system_libraries);
555556
556 if (use_zig_libcxx) {557 if (use_zig_libcxx) {
557 exe.linkLibCpp();558 exe.linkLibCpp();
...@@ -679,6 +680,23 @@ fn addCMakeLibraryList(exe: *std.build.LibExeObjStep, list: []const u8) void {...@@ -679,6 +680,23 @@ fn addCMakeLibraryList(exe: *std.build.LibExeObjStep, list: []const u8) void {
679 }680 }
680}681}
681682
683fn addCMakeSystemLibraryList(exe: *std.build.LibExeObjStep, list: []const u8) void {
684 var it = mem.tokenize(u8, list, ";");
685 while (it.next()) |lib| {
686 var start_offset: usize = 0;
687 var end_offset: usize = 0;
688 if (mem.startsWith(u8, lib, "-l")) {
689 start_offset = "-l".len;
690 }
691
692 if (exe.target.isWindows() and mem.endsWith(u8, lib, ".lib")) {
693 end_offset = ".lib".len;
694 }
695
696 exe.linkSystemLibrary(lib[start_offset..lib.len - end_offset]);
697 }
698}
699
682const CMakeConfig = struct {700const CMakeConfig = struct {
683 llvm_linkage: std.build.LibExeObjStep.Linkage,701 llvm_linkage: std.build.LibExeObjStep.Linkage,
684 cmake_binary_dir: []const u8,702 cmake_binary_dir: []const u8,
...@@ -692,6 +710,7 @@ const CMakeConfig = struct {...@@ -692,6 +710,7 @@ const CMakeConfig = struct {
692 llvm_lib_dir: []const u8,710 llvm_lib_dir: []const u8,
693 llvm_include_dir: []const u8,711 llvm_include_dir: []const u8,
694 llvm_libraries: []const u8,712 llvm_libraries: []const u8,
713 llvm_system_libraries: []const u8,
695 dia_guids_lib: []const u8,714 dia_guids_lib: []const u8,
696};715};
697716
...@@ -757,6 +776,7 @@ fn parseConfigH(b: *Builder, config_h_text: []const u8) ?CMakeConfig {...@@ -757,6 +776,7 @@ fn parseConfigH(b: *Builder, config_h_text: []const u8) ?CMakeConfig {
757 .llvm_lib_dir = undefined,776 .llvm_lib_dir = undefined,
758 .llvm_include_dir = undefined,777 .llvm_include_dir = undefined,
759 .llvm_libraries = undefined,778 .llvm_libraries = undefined,
779 .llvm_system_libraries = undefined,
760 .dia_guids_lib = undefined,780 .dia_guids_lib = undefined,
761 };781 };
762782
...@@ -797,6 +817,10 @@ fn parseConfigH(b: *Builder, config_h_text: []const u8) ?CMakeConfig {...@@ -797,6 +817,10 @@ fn parseConfigH(b: *Builder, config_h_text: []const u8) ?CMakeConfig {
797 .prefix = "#define ZIG_LLVM_LIBRARIES ",817 .prefix = "#define ZIG_LLVM_LIBRARIES ",
798 .field = "llvm_libraries",818 .field = "llvm_libraries",
799 },819 },
820 .{
821 .prefix = "#define ZIG_LLVM_SYSTEM_LIBRARIES ",
822 .field = "llvm_system_libraries",
823 },
800 .{824 .{
801 .prefix = "#define ZIG_DIA_GUIDS_LIB ",825 .prefix = "#define ZIG_DIA_GUIDS_LIB ",
802 .field = "dia_guids_lib",826 .field = "dia_guids_lib",
cmake/Findllvm.cmake+8-3
...@@ -5,6 +5,7 @@...@@ -5,6 +5,7 @@
5# LLVM_FOUND5# LLVM_FOUND
6# LLVM_INCLUDE_DIRS6# LLVM_INCLUDE_DIRS
7# LLVM_LIBRARIES7# LLVM_LIBRARIES
8# LLVM_SYSTEM_LIBRARIES
8# LLVM_LIBDIRS9# LLVM_LIBDIRS
9# LLVM_LINK_MODE10# LLVM_LINK_MODE
1011
...@@ -172,9 +173,9 @@ if(ZIG_USE_LLVM_CONFIG)...@@ -172,9 +173,9 @@ if(ZIG_USE_LLVM_CONFIG)
172 OUTPUT_STRIP_TRAILING_WHITESPACE)173 OUTPUT_STRIP_TRAILING_WHITESPACE)
173 string(REPLACE " " ";" LLVM_STATIC_SYSTEM_LIBS "${LLVM_STATIC_SYSTEM_LIBS_SPACES}")174 string(REPLACE " " ";" LLVM_STATIC_SYSTEM_LIBS "${LLVM_STATIC_SYSTEM_LIBS_SPACES}")
174175
175 set(LLVM_LIBRARIES ${LLVM_LIBRARIES} ${LLVM_SYSTEM_LIBS} ${LLVM_STATIC_SYSTEM_LIBS})176 set(LLVM_SYSTEM_LIBRARIES ${LLVM_SYSTEM_LIBS} ${LLVM_STATIC_SYSTEM_LIBS})
176 else()177 else()
177 set(LLVM_LIBRARIES ${LLVM_LIBRARIES} ${LLVM_SYSTEM_LIBS})178 set(LLVM_SYSTEM_LIBRARIES ${LLVM_SYSTEM_LIBS})
178 endif()179 endif()
179180
180 execute_process(181 execute_process(
...@@ -369,7 +370,11 @@ else()...@@ -369,7 +370,11 @@ else()
369 find_path(LLVM_INCLUDE_DIRS NAMES llvm/IR/IRBuilder.h)370 find_path(LLVM_INCLUDE_DIRS NAMES llvm/IR/IRBuilder.h)
370endif()371endif()
371372
373if(NOT LLVM_SYSTEM_LIBRARIES)
374 set(LLVM_SYSTEM_LIBRARIES "")
375endif()
376
372include(FindPackageHandleStandardArgs)377include(FindPackageHandleStandardArgs)
373find_package_handle_standard_args(llvm DEFAULT_MSG LLVM_LIBRARIES LLVM_INCLUDE_DIRS)378find_package_handle_standard_args(llvm DEFAULT_MSG LLVM_LIBRARIES LLVM_INCLUDE_DIRS)
374379
375mark_as_advanced(LLVM_INCLUDE_DIRS LLVM_LIBRARIES LLVM_LIBDIRS)380mark_as_advanced(LLVM_INCLUDE_DIRS LLVM_LIBRARIES LLVM_SYSTEM_LIBRARIES LLVM_LIBDIRS)
stage1/config.h.in+1
...@@ -28,5 +28,6 @@...@@ -28,5 +28,6 @@
28#define ZIG_LLVM_LIBRARIES "@LLVM_LIBRARIES@"28#define ZIG_LLVM_LIBRARIES "@LLVM_LIBRARIES@"
29#define ZIG_LLVM_LIB_PATH "@LLVM_LIBDIRS@"29#define ZIG_LLVM_LIB_PATH "@LLVM_LIBDIRS@"
30#define ZIG_LLVM_LINK_MODE "@LLVM_LINK_MODE@"30#define ZIG_LLVM_LINK_MODE "@LLVM_LINK_MODE@"
31#define ZIG_LLVM_SYSTEM_LIBRARIES "@LLVM_SYSTEM_LIBRARIES@"
3132
32#endif33#endif