Skip to content

Commit c20811b

Browse files
authored
[libc] Fix libc-hdrgen crosscompiling (#78227)
The support introduced in 675702f356b0c3a540fa2e8af4192f7d658b2988 is not working correctly in all scenarios. Instead of setup_host_tool function, we can use the existing targets introduced by add_tablegen macro.
1 parent da6806d commit c20811b

File tree

4 files changed

+20
-12
lines changed

4 files changed

+20
-12
lines changed

libc/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@ if(LLVM_LIBC_FULL_BUILD OR LIBC_GPU_BUILD OR LIBC_GPU_ARCHITECTURES)
3434
# We need to set up hdrgen first since other targets depend on it.
3535
add_subdirectory(utils/LibcTableGenUtil)
3636
add_subdirectory(utils/HdrGen)
37+
# Calling add_tablegen sets variables like LIBC_TABLEGEN_EXE in
38+
# PARENT_SCOPE which get lost until saved in the cache.
39+
set(LIBC_TABLEGEN_EXE "${LIBC_TABLEGEN_EXE}" CACHE INTERNAL "")
40+
set(LIBC_TABLEGEN_TARGET "${LIBC_TABLEGEN_TARGET}" CACHE INTERNAL "")
3741
else()
3842
message(STATUS "Will use ${LIBC_HDRGEN_EXE} for libc header generation.")
3943
endif()

libc/utils/HdrGen/CMakeLists.txt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,3 @@ target_include_directories(libc-hdrgen PRIVATE ${LLVM_INCLUDE_DIR} ${LLVM_MAIN_I
1818
target_link_libraries(libc-hdrgen PRIVATE LibcTableGenUtil)
1919

2020
add_subdirectory(PrototypeTestGen)
21-
22-
setup_host_tool(libc-hdrgen LIBC_HDRGEN libc_hdrgen_exe libc_hdrgen_target)

llvm/cmake/modules/CrossCompile.cmake

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,8 @@ function(llvm_create_cross_target project_name target_name toolchain buildtype)
6767
"-DLLVM_EXTERNAL_${name}_SOURCE_DIR=${LLVM_EXTERNAL_${name}_SOURCE_DIR}")
6868
endforeach()
6969

70-
if("libc" IN_LIST LLVM_ENABLE_PROJECTS)
71-
if(LLVM_LIBC_FULL_BUILD AND NOT LIBC_HDRGEN_EXE)
72-
set(libc_flags -DLLVM_LIBC_FULL_BUILD=ON -DLIBC_HDRGEN_ONLY=ON)
73-
endif()
70+
if("libc" IN_LIST LLVM_ENABLE_PROJECTS AND NOT LIBC_HDRGEN_EXE)
71+
set(libc_flags -DLLVM_LIBC_FULL_BUILD=ON -DLIBC_HDRGEN_ONLY=ON)
7472
endif()
7573

7674
add_custom_command(OUTPUT ${${project_name}_${target_name}_BUILD}/CMakeCache.txt

llvm/runtimes/CMakeLists.txt

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -425,14 +425,22 @@ if(runtimes)
425425
endif()
426426
if("libc" IN_LIST LLVM_ENABLE_PROJECTS AND
427427
(LLVM_LIBC_FULL_BUILD OR LIBC_GPU_BUILD OR LIBC_GPU_ARCHITECTURES))
428-
get_host_tool_path(libc-hdrgen LIBC_HDRGEN libc_hdrgen_exe libc_hdrgen_target)
429-
if(NOT libc_hdrgen_exe)
428+
if(LIBC_HDRGEN_EXE)
429+
set(hdrgen_exe ${LIBC_HDRGEN_EXE})
430+
else()
431+
if(TARGET ${LIBC_TABLEGEN_EXE})
432+
set(hdrgen_exe $<TARGET_FILE:${LIBC_TABLEGEN_EXE}>)
433+
else()
434+
set(hdrgen_exe ${LIBC_TABLEGEN_EXE})
435+
endif()
436+
set(hdrgen_deps ${LIBC_TABLEGEN_TARGET})
437+
endif()
438+
if(NOT hdrgen_exe)
430439
message(FATAL_ERROR "libc-hdrgen executable missing")
431440
endif()
432-
set(libc_cmake_args "-DLIBC_HDRGEN_EXE=${libc_hdrgen_exe}"
441+
set(libc_cmake_args "-DLIBC_HDRGEN_EXE=${hdrgen_exe}"
433442
"-DLLVM_LIBC_FULL_BUILD=ON")
434-
set(libc_tools libc_hdrgen_target)
435-
list(APPEND extra_deps ${libc_hdrgen_target})
443+
list(APPEND extra_deps ${hdrgen_deps})
436444
if(LIBC_GPU_BUILD OR LIBC_GPU_ARCHITECTURES)
437445
foreach(dep clang-offload-packager nvptx-arch amdgpu-arch)
438446
if(TARGET ${dep})
@@ -485,7 +493,7 @@ if(runtimes)
485493
check_apple_target(${name} runtime)
486494

487495
runtime_register_target(${name}
488-
DEPENDS ${builtins_dep_name} ${libc_tools}
496+
DEPENDS ${builtins_dep_name} ${hdrgen_deps}
489497
CMAKE_ARGS -DLLVM_DEFAULT_TARGET_TRIPLE=${name} ${libc_cmake_args}
490498
EXTRA_ARGS TARGET_TRIPLE ${name})
491499
endforeach()

0 commit comments

Comments
 (0)