Skip to content

Commit fcd4259

Browse files
authored
Fix race condition when building multiple IDL files (#40130)
* Fix race condition when building multiple IDL files * Use the header as output * Use a single target * Use a separate command to set the stamp file * Remove stamp file
1 parent c0dd0ce commit fcd4259

7 files changed

Lines changed: 13 additions & 13 deletions

File tree

cmake/FindIDL.cmake

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ function(add_idl target idl_files_with_proxy idl_files_no_proxy)
1111
endforeach()
1212

1313
string(TOLOWER ${TARGET_PLATFORM} IDL_ENV)
14+
set(PREVIOUS_OUTPUT "")
1415

1516
foreach(idl_file ${idl_files_with_proxy})
1617

@@ -27,15 +28,16 @@ function(add_idl target idl_files_with_proxy idl_files_no_proxy)
2728
set(MIDL_OUTPUT ${IDL_HEADER} ${IDL_I} ${IDL_P} ${IDL_DLLDATA})
2829

2930
add_custom_command(
30-
OUTPUT ${MIDL_OUTPUT} ${CMAKE_CURRENT_BINARY_DIR}/CmakeFiles/${target}
31+
OUTPUT ${MIDL_OUTPUT}
3132
COMMAND midl /nologo /target NT100 /env "${IDL_ENV}" /Zp8 /char unsigned /ms_ext /c_ext /h ${IDL_HEADER} /iid ${IDL_I} /proxy ${IDL_P} /dlldata ${IDL_DLLDATA} ${idl_file} ${IDL_DEFINITIONS}
32-
COMMAND ${CMAKE_COMMAND} -E touch "${CMAKE_CURRENT_BINARY_DIR}/CmakeFiles/${target}"
3333
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
34-
DEPENDS ${idl_file}
34+
DEPENDS ${idl_file} ${PREVIOUS_OUTPUT}
3535
MAIN_DEPENDENCY ${idl_file}
3636
VERBATIM
3737
)
3838

39+
set(PREVIOUS_OUTPUT ${IDL_HEADER})
40+
3941
set_source_files_properties(${MIDL_OUTPUT} PROPERTIES GENERATED TRUE)
4042
list(APPEND TARGET_OUTPUTS ${MIDL_OUTPUT})
4143

@@ -48,9 +50,8 @@ function(add_idl target idl_files_with_proxy idl_files_no_proxy)
4850
set(IDL_HEADER ${OUTPUT_DIR}/${IDL_NAME}.h)
4951

5052
add_custom_command(
51-
OUTPUT ${IDL_HEADER} ${CMAKE_CURRENT_BINARY_DIR}/CmakeFiles/${target}
53+
OUTPUT ${IDL_HEADER}
5254
COMMAND midl /nologo /target NT100 /env "${IDL_ENV}" /Zp8 /char unsigned /ms_ext /c_ext /h ${IDL_HEADER} ${idl_file} ${IDL_DEFINITIONS}
53-
COMMAND ${CMAKE_COMMAND} -E touch "${CMAKE_CURRENT_BINARY_DIR}/CmakeFiles/${target}"
5455
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
5556
DEPENDS ${idl_file}
5657
MAIN_DEPENDENCY ${idl_file}

src/windows/WslcSDK/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ set(HEADERS
1515

1616
add_library(wslcsdk SHARED ${SOURCES} ${HEADERS} wslcsdk.def)
1717
set_target_properties(wslcsdk PROPERTIES EXCLUDE_FROM_ALL FALSE)
18-
add_dependencies(wslcsdk wslcidl)
18+
add_dependencies(wslcsdk wslserviceidl)
1919
target_link_libraries(wslcsdk ${COMMON_LINK_LIBRARIES} legacy_stdio_definitions common)
2020
target_precompile_headers(wslcsdk REUSE_FROM common)
2121
set_target_properties(wslcsdk PROPERTIES FOLDER windows)

src/windows/common/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ set(HEADERS
133133
)
134134

135135
add_library(common STATIC ${SOURCES} ${HEADERS})
136-
add_dependencies(common wslserviceidl wslcidl localization wslservicemc wslinstalleridl)
136+
add_dependencies(common wslserviceidl localization wslservicemc wslinstalleridl)
137137

138138
target_precompile_headers(common PRIVATE precomp.h)
139139
set_target_properties(common PROPERTIES FOLDER windows)

src/windows/service/exe/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ set(HEADERS
5656
WSLCSessionManagerFactory.h)
5757

5858
add_executable(wslservice ${SOURCES} ${HEADERS})
59-
add_dependencies(wslservice wslserviceidl wslcidl wslservicemc)
59+
add_dependencies(wslservice wslserviceidl wslservicemc)
6060
add_compile_definitions(__WRL_CLASSIC_COM__)
6161
add_compile_definitions(__WRL_DISABLE_STATIC_INITIALIZE__)
6262
add_compile_definitions(USE_COM_CONTEXT_DEF=1)
Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
add_idl(wslserviceidl "wslservice.idl" "windowsdefs.idl")
2-
add_idl(wslcidl "wslc.idl" "")
1+
add_idl(wslserviceidl "wslservice.idl;wslc.idl" "windowsdefs.idl")
2+
33
set_target_properties(wslserviceidl PROPERTIES FOLDER windows)
4-
set_target_properties(wslcidl PROPERTIES FOLDER windows)

src/windows/service/stub/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@ set(SOURCES
1010
set_source_files_properties(${SOURCES} PROPERTIES GENERATED TRUE)
1111

1212
add_library(wslserviceproxystub SHARED ${SOURCES})
13-
add_dependencies(wslserviceproxystub wslserviceidl wslcidl)
13+
add_dependencies(wslserviceproxystub wslserviceidl)
1414
target_link_libraries(wslserviceproxystub ${COMMON_LINK_LIBRARIES})
1515
set_target_properties(wslserviceproxystub PROPERTIES FOLDER windows)

src/windows/wslcsession/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ set(HEADERS
4545
WSLCVolumeMetadata.h)
4646

4747
add_executable(wslcsession WIN32 ${SOURCES} ${HEADERS})
48-
add_dependencies(wslcsession wslcidl)
48+
add_dependencies(wslcsession wslserviceidl)
4949
add_compile_definitions(__WRL_CLASSIC_COM__)
5050
add_compile_definitions(USE_COM_CONTEXT_DEF=1)
5151
target_link_libraries(wslcsession

0 commit comments

Comments
 (0)