CMake: try to avoid compilation for `install` target

This is andrewrk's patch from ziglang#6724 (rebased)

CMake: Fix dependency problem

I don't know whether the error was expected cmake behavior or a bug.
This change seems to fix the issue. See ziglang#6724 for details.
master
johnLate 2020-11-11 16:12:17 +01:00 committed by Andrew Kelley
parent f9d209787b
commit 77d67aa662
1 changed files with 14 additions and 8 deletions

View File

@ -299,6 +299,11 @@ set(ZIG_CPP_SOURCES
# https://github.com/ziglang/zig/issues/6363 # https://github.com/ziglang/zig/issues/6363
"${CMAKE_SOURCE_DIR}/src/windows_sdk.cpp" "${CMAKE_SOURCE_DIR}/src/windows_sdk.cpp"
) )
# Needed because we use cmake, not the zig build system, to build zig1.o.
set(ZIG_STAGE2_SOURCES
"${CMAKE_SOURCE_DIR}/src/main.zig"
"${CMAKE_SOURCE_DIR}/src/Module.zig"
)
if(MSVC) if(MSVC)
set(MSVC_DIA_SDK_DIR "$ENV{VSINSTALLDIR}DIA SDK") set(MSVC_DIA_SDK_DIR "$ENV{VSINSTALLDIR}DIA SDK")
@ -468,10 +473,10 @@ set(BUILD_ZIG1_ARGS
) )
if("${ZIG_EXECUTABLE}" STREQUAL "") if("${ZIG_EXECUTABLE}" STREQUAL "")
add_custom_target(zig_build_zig1 ALL add_custom_command(
OUTPUT "${ZIG1_OBJECT}"
COMMAND zig0 ${BUILD_ZIG1_ARGS} COMMAND zig0 ${BUILD_ZIG1_ARGS}
DEPENDS zig0 DEPENDS zig0 "${ZIG_STAGE2_SOURCES}"
BYPRODUCTS "${ZIG1_OBJECT}"
COMMENT STATUS "Building self-hosted component ${ZIG1_OBJECT}" COMMENT STATUS "Building self-hosted component ${ZIG1_OBJECT}"
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
) )
@ -480,28 +485,29 @@ if("${ZIG_EXECUTABLE}" STREQUAL "")
set(ZIG_EXECUTABLE "${ZIG_EXECUTABLE}.exe") set(ZIG_EXECUTABLE "${ZIG_EXECUTABLE}.exe")
endif() endif()
else() else()
add_custom_target(zig_build_zig1 ALL add_custom_command(
COMMAND "${ZIG_EXECUTABLE}" "build-obj" ${BUILD_ZIG1_ARGS} OUTPUT "${ZIG1_OBJECT}"
BYPRODUCTS "${ZIG1_OBJECT}" BYPRODUCTS "${ZIG1_OBJECT}"
COMMAND "${ZIG_EXECUTABLE}" "build-obj" ${BUILD_ZIG1_ARGS}
DEPENDS ${ZIG_STAGE2_SOURCES}
COMMENT STATUS "Building self-hosted component ${ZIG1_OBJECT}" COMMENT STATUS "Building self-hosted component ${ZIG1_OBJECT}"
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
) )
endif() endif()
# cmake won't let us configure an executable without C sources. # cmake won't let us configure an executable without C sources.
add_executable(zig "${CMAKE_SOURCE_DIR}/src/stage1/empty.cpp") add_executable(zig "${CMAKE_SOURCE_DIR}/src/stage1/empty.cpp" "${ZIG1_OBJECT}")
set_target_properties(zig PROPERTIES set_target_properties(zig PROPERTIES
COMPILE_FLAGS ${EXE_CFLAGS} COMPILE_FLAGS ${EXE_CFLAGS}
LINK_FLAGS ${EXE_LDFLAGS} LINK_FLAGS ${EXE_LDFLAGS}
) )
target_link_libraries(zig "${ZIG1_OBJECT}" zigstage1) target_link_libraries(zig zigstage1)
if(MSVC) if(MSVC)
target_link_libraries(zig ntdll.lib) target_link_libraries(zig ntdll.lib)
elseif(MINGW) elseif(MINGW)
target_link_libraries(zig ntdll) target_link_libraries(zig ntdll)
endif() endif()
add_dependencies(zig zig_build_zig1)
install(TARGETS zig DESTINATION bin) install(TARGETS zig DESTINATION bin)