Skip to content

Commit a8fffb0

Browse files
committed
Fix MSVC external deps build
1 parent 29bcb4b commit a8fffb0

7 files changed

Lines changed: 166 additions & 48 deletions

File tree

cmake/ProjectDefaults.cmake

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,16 +55,16 @@ function(itlabai_link_externals target_name)
5555
endif()
5656
if(ITLABAI_AUTOINCLUDE_EXTERNALS)
5757
if(ext STREQUAL "tbb" AND DEFINED TBB_INSTALL_DIR)
58-
target_include_directories(${target_name} ${_scope} $<BUILD_INTERFACE:${TBB_INSTALL_DIR}/include>)
58+
target_include_directories(${target_name} SYSTEM ${_scope} $<BUILD_INTERFACE:${TBB_INSTALL_DIR}/include>)
5959
endif()
6060
if(ext STREQUAL "kokkos" AND DEFINED KOKKOS_INSTALL_DIR)
61-
target_include_directories(${target_name} ${_scope} $<BUILD_INTERFACE:${KOKKOS_INSTALL_DIR}/include>)
61+
target_include_directories(${target_name} SYSTEM ${_scope} $<BUILD_INTERFACE:${KOKKOS_INSTALL_DIR}/include>)
6262
endif()
6363
if(ext STREQUAL "gtest" AND DEFINED GTEST_INSTALL_DIR)
64-
target_include_directories(${target_name} ${_scope} $<BUILD_INTERFACE:${GTEST_INSTALL_DIR}/include>)
64+
target_include_directories(${target_name} SYSTEM ${_scope} $<BUILD_INTERFACE:${GTEST_INSTALL_DIR}/include>)
6565
endif()
6666
if(ext STREQUAL "opencv" AND DEFINED OPENCV_INSTALL_DIR)
67-
target_include_directories(${target_name} ${_scope} $<BUILD_INTERFACE:${OPENCV_INSTALL_DIR}/include/opencv4>)
67+
target_include_directories(${target_name} SYSTEM ${_scope} $<BUILD_INTERFACE:${OPENCV_INSTALL_DIR}/include/opencv4>)
6868
endif()
6969
endif()
7070
endif()

cmake/deps/gtest.cmake

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ if(NOT GTest_FOUND)
1818
-DBUILD_GMOCK=ON
1919
-DINSTALL_GTEST=ON
2020
-DBUILD_SHARED_LIBS=OFF
21+
$<$<BOOL:${MSVC}>:-Dgtest_force_shared_crt=ON>
22+
$<$<BOOL:${MSVC}>:-DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreadedDLL>
2123
BUILD_BYPRODUCTS
2224
${GTEST_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}gtest${CMAKE_STATIC_LIBRARY_SUFFIX}
2325
${GTEST_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}gtest_main${CMAKE_STATIC_LIBRARY_SUFFIX}

cmake/deps/kokkos.cmake

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@ if(NOT Kokkos_FOUND)
1313
set(_kokkos_openmp_flag ON)
1414
set(_kokkos_threads_flag OFF)
1515
endif()
16+
if(MSVC)
17+
# MSVC OpenMP is limited to 2.0; disable OpenMP for Kokkos.
18+
set(_kokkos_openmp_flag OFF)
19+
set(_kokkos_threads_flag ON)
20+
endif()
1621

1722
ExternalProject_Add(kokkos_external
1823
SOURCE_DIR "${CMAKE_SOURCE_DIR}/3rdparty/kokkos"

cmake/deps/onednn.cmake

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -31,29 +31,44 @@ if(NOT dnnl_FOUND)
3131
-DDNNL_LIBRARY_TYPE=SHARED
3232
-DBUILD_SHARED_LIBS=ON
3333
BUILD_BYPRODUCTS
34-
${ONEDNN_INSTALL_DIR}/lib/libdnnl${CMAKE_SHARED_LIBRARY_SUFFIX}
34+
${ONEDNN_INSTALL_DIR}/lib/dnnl.lib
35+
${ONEDNN_INSTALL_DIR}/bin/dnnl.dll
3536
)
3637
add_dependencies(itlabai_external onednn_external)
3738

3839
if(MSVC)
39-
set(_dnnl_lib "${ONEDNN_INSTALL_DIR}/lib/dnnl.dll")
40+
set(_dnnl_lib "${ONEDNN_INSTALL_DIR}/lib/dnnl.lib")
41+
set(_dnnl_dll "${ONEDNN_INSTALL_DIR}/bin/dnnl.dll")
4042
else()
4143
set(_dnnl_lib "${ONEDNN_INSTALL_DIR}/lib/libdnnl${CMAKE_SHARED_LIBRARY_SUFFIX}")
4244
endif()
4345

4446
file(MAKE_DIRECTORY "${ONEDNN_INSTALL_DIR}/include")
4547
file(MAKE_DIRECTORY "${ONEDNN_INSTALL_DIR}/lib")
4648

47-
add_library(dnnl STATIC IMPORTED GLOBAL)
48-
set_target_properties(dnnl PROPERTIES
49-
IMPORTED_LOCATION_RELEASE "${_dnnl_lib}"
50-
IMPORTED_LOCATION_DEBUG "${_dnnl_lib}"
51-
INTERFACE_INCLUDE_DIRECTORIES "${ONEDNN_INSTALL_DIR}/include"
52-
)
53-
set_target_properties(dnnl PROPERTIES
54-
IMPORTED_LOCATION_RELWITHDEBINFO "${_dnnl_lib}"
55-
IMPORTED_LOCATION_MINSIZEREL "${_dnnl_lib}"
56-
)
49+
add_library(dnnl SHARED IMPORTED GLOBAL)
50+
if(MSVC)
51+
set_target_properties(dnnl PROPERTIES
52+
IMPORTED_LOCATION_RELEASE "${_dnnl_dll}"
53+
IMPORTED_LOCATION_DEBUG "${_dnnl_dll}"
54+
IMPORTED_LOCATION_RELWITHDEBINFO "${_dnnl_dll}"
55+
IMPORTED_LOCATION_MINSIZEREL "${_dnnl_dll}"
56+
IMPORTED_IMPLIB "${_dnnl_lib}"
57+
IMPORTED_IMPLIB_RELEASE "${_dnnl_lib}"
58+
IMPORTED_IMPLIB_DEBUG "${_dnnl_lib}"
59+
IMPORTED_IMPLIB_RELWITHDEBINFO "${_dnnl_lib}"
60+
IMPORTED_IMPLIB_MINSIZEREL "${_dnnl_lib}"
61+
INTERFACE_INCLUDE_DIRECTORIES "${ONEDNN_INSTALL_DIR}/include"
62+
)
63+
else()
64+
set_target_properties(dnnl PROPERTIES
65+
IMPORTED_LOCATION_RELEASE "${_dnnl_lib}"
66+
IMPORTED_LOCATION_DEBUG "${_dnnl_lib}"
67+
IMPORTED_LOCATION_RELWITHDEBINFO "${_dnnl_lib}"
68+
IMPORTED_LOCATION_MINSIZEREL "${_dnnl_lib}"
69+
INTERFACE_INCLUDE_DIRECTORIES "${ONEDNN_INSTALL_DIR}/include"
70+
)
71+
endif()
5772
target_link_libraries(dnnl INTERFACE TBB::tbb)
5873
add_dependencies(dnnl onednn_external)
5974
else()

cmake/deps/opencv.cmake

Lines changed: 69 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -46,42 +46,95 @@ if(NOT OpenCV_FOUND)
4646
-DCMAKE_CXX_STANDARD=17
4747
)
4848

49+
if(WIN32)
50+
set(_opencv_ver_header "${CMAKE_SOURCE_DIR}/3rdparty/opencv/modules/core/include/opencv2/core/version.hpp")
51+
if(EXISTS "${_opencv_ver_header}")
52+
file(READ "${_opencv_ver_header}" _opencv_ver_text)
53+
string(REGEX REPLACE ".*#define CV_VERSION_MAJOR[ \t]+([0-9]+).*" "\\1" _opencv_ver_major "${_opencv_ver_text}")
54+
string(REGEX REPLACE ".*#define CV_VERSION_MINOR[ \t]+([0-9]+).*" "\\1" _opencv_ver_minor "${_opencv_ver_text}")
55+
string(REGEX REPLACE ".*#define CV_VERSION_REVISION[ \t]+([0-9]+).*" "\\1" _opencv_ver_patch "${_opencv_ver_text}")
56+
set(_opencv_dllversion "${_opencv_ver_major}${_opencv_ver_minor}${_opencv_ver_patch}")
57+
else()
58+
set(_opencv_dllversion "")
59+
endif()
60+
61+
if(MSVC_VERSION GREATER_EQUAL 1930)
62+
set(_opencv_vc "vc17")
63+
elseif(MSVC_VERSION GREATER_EQUAL 1920)
64+
set(_opencv_vc "vc16")
65+
else()
66+
set(_opencv_vc "vc15")
67+
endif()
68+
set(_opencv_arch "x64")
69+
set(_opencv_libdir "${OPENCV_INSTALL_DIR}/${_opencv_arch}/${_opencv_vc}/lib")
70+
set(_opencv_bindir "${OPENCV_INSTALL_DIR}/${_opencv_arch}/${_opencv_vc}/bin")
71+
72+
set(_opencv_world_lib "${_opencv_libdir}/opencv_world${_opencv_dllversion}.lib")
73+
set(_opencv_world_dll "${_opencv_bindir}/opencv_world${_opencv_dllversion}.dll")
74+
set(_opencv_include_dir "${OPENCV_INSTALL_DIR}/include")
75+
76+
set(_opencv_byproducts
77+
"${_opencv_world_lib}"
78+
"${_opencv_world_dll}"
79+
)
80+
else()
81+
set(_opencv_world "${OPENCV_INSTALL_DIR}/lib/libopencv_world${CMAKE_SHARED_LIBRARY_SUFFIX}")
82+
set(_opencv_include_dir "${OPENCV_INSTALL_DIR}/include/opencv4")
83+
84+
set(_opencv_byproducts
85+
"${_opencv_world}"
86+
)
87+
endif()
88+
4989
ExternalProject_Add(opencv_external
5090
SOURCE_DIR "${CMAKE_SOURCE_DIR}/3rdparty/opencv"
5191
BINARY_DIR "${OPENCV_BUILD_DIR}"
5292
INSTALL_DIR "${OPENCV_INSTALL_DIR}"
5393
CMAKE_ARGS
5494
-DCMAKE_INSTALL_PREFIX=${OPENCV_INSTALL_DIR}
5595
-DCMAKE_BUILD_TYPE=Release
96+
-DOPENCV_INSTALL_BIN_DIR=bin
97+
-DOPENCV_INSTALL_LIB_DIR=lib
98+
-DOPENCV_INSTALL_INCLUDE_DIR=include
5699
-DBUILD_SHARED_LIBS=ON
57100
-DBUILD_PROTOBUF=ON
58101
-DPROTOBUF_UPDATE_FILES=OFF
59102
${OPENCV_FEATURE_ARGS}
60103
CMAKE_CACHE_ARGS
61104
-DBUILD_LIST:STRING=${OPENCV_COMPONENTS_ESC}
62105
BUILD_BYPRODUCTS
63-
${OPENCV_INSTALL_DIR}/lib/libopencv_world${CMAKE_SHARED_LIBRARY_SUFFIX}
106+
${_opencv_byproducts}
64107
)
65108
add_dependencies(itlabai_external opencv_external)
66109

67-
if(MSVC)
68-
set(_opencv_world "${OPENCV_INSTALL_DIR}/lib/opencv_world.lib")
69-
else()
70-
set(_opencv_world "${OPENCV_INSTALL_DIR}/lib/libopencv_world${CMAKE_SHARED_LIBRARY_SUFFIX}")
71-
endif()
72-
73-
file(MAKE_DIRECTORY "${OPENCV_INSTALL_DIR}/include/opencv4")
110+
file(MAKE_DIRECTORY "${_opencv_include_dir}")
74111
file(MAKE_DIRECTORY "${OPENCV_INSTALL_DIR}/lib")
75112

76113
add_library(OpenCV::opencv_world SHARED IMPORTED GLOBAL)
77-
set_target_properties(OpenCV::opencv_world PROPERTIES
78-
IMPORTED_LOCATION "${_opencv_world}"
79-
IMPORTED_LOCATION_RELEASE "${_opencv_world}"
80-
IMPORTED_LOCATION_DEBUG "${_opencv_world}"
81-
IMPORTED_LOCATION_RELWITHDEBINFO "${_opencv_world}"
82-
IMPORTED_LOCATION_MINSIZEREL "${_opencv_world}"
83-
INTERFACE_INCLUDE_DIRECTORIES "${OPENCV_INSTALL_DIR}/include/opencv4"
84-
)
114+
if(WIN32)
115+
set_target_properties(OpenCV::opencv_world PROPERTIES
116+
IMPORTED_LOCATION "${_opencv_world_dll}"
117+
IMPORTED_LOCATION_RELEASE "${_opencv_world_dll}"
118+
IMPORTED_LOCATION_DEBUG "${_opencv_world_dll}"
119+
IMPORTED_LOCATION_RELWITHDEBINFO "${_opencv_world_dll}"
120+
IMPORTED_LOCATION_MINSIZEREL "${_opencv_world_dll}"
121+
IMPORTED_IMPLIB "${_opencv_world_lib}"
122+
IMPORTED_IMPLIB_RELEASE "${_opencv_world_lib}"
123+
IMPORTED_IMPLIB_DEBUG "${_opencv_world_lib}"
124+
IMPORTED_IMPLIB_RELWITHDEBINFO "${_opencv_world_lib}"
125+
IMPORTED_IMPLIB_MINSIZEREL "${_opencv_world_lib}"
126+
INTERFACE_INCLUDE_DIRECTORIES "${_opencv_include_dir}"
127+
)
128+
else()
129+
set_target_properties(OpenCV::opencv_world PROPERTIES
130+
IMPORTED_LOCATION "${_opencv_world}"
131+
IMPORTED_LOCATION_RELEASE "${_opencv_world}"
132+
IMPORTED_LOCATION_DEBUG "${_opencv_world}"
133+
IMPORTED_LOCATION_RELWITHDEBINFO "${_opencv_world}"
134+
IMPORTED_LOCATION_MINSIZEREL "${_opencv_world}"
135+
INTERFACE_INCLUDE_DIRECTORIES "${_opencv_include_dir}"
136+
)
137+
endif()
85138
else()
86139
# System OpenCV: ensure a world-like target exists
87140
if(NOT TARGET OpenCV::opencv_world)

cmake/deps/tbb.cmake

Lines changed: 58 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,39 +7,81 @@ if(ITLABAI_USE_SYSTEM_DEPS)
77
endif()
88

99
if(NOT TBB_FOUND)
10+
set(_tbb_cmake_args "")
11+
if(MSVC)
12+
list(APPEND _tbb_cmake_args
13+
-DCMAKE_C_COMPILER=cl
14+
-DCMAKE_CXX_COMPILER=cl
15+
)
16+
elseif(WIN32)
17+
get_filename_component(_clang_dir "${CMAKE_C_COMPILER}" DIRECTORY)
18+
set(_clang_cl "${_clang_dir}/clang-cl.exe")
19+
if(EXISTS "${_clang_cl}")
20+
list(APPEND _tbb_cmake_args
21+
-DCMAKE_C_COMPILER=${_clang_cl}
22+
-DCMAKE_CXX_COMPILER=${_clang_cl}
23+
)
24+
endif()
25+
endif()
26+
27+
if(WIN32)
28+
set(_tbb_lib_name "tbb12")
29+
set(_tbb_lib "${TBB_INSTALL_DIR}/lib/${_tbb_lib_name}.lib")
30+
set(_tbb_dll "${TBB_INSTALL_DIR}/bin/${_tbb_lib_name}.dll")
31+
set(_tbb_byproducts
32+
"${_tbb_lib}"
33+
"${_tbb_dll}"
34+
)
35+
else()
36+
set(_tbb_byproducts
37+
"${TBB_INSTALL_DIR}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}tbb${CMAKE_SHARED_LIBRARY_SUFFIX}"
38+
)
39+
set(_tbb_lib "${TBB_INSTALL_DIR}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}tbb${CMAKE_SHARED_LIBRARY_SUFFIX}")
40+
endif()
41+
1042
ExternalProject_Add(tbb_external
1143
SOURCE_DIR "${CMAKE_SOURCE_DIR}/3rdparty/TBB"
1244
BINARY_DIR "${TBB_BUILD_DIR}"
1345
INSTALL_DIR "${TBB_INSTALL_DIR}"
1446
CMAKE_ARGS
1547
-DCMAKE_INSTALL_PREFIX=${TBB_INSTALL_DIR}
1648
-DCMAKE_BUILD_TYPE=Release
17-
-DBUILD_SHARED_LIBS=OFF
49+
-DBUILD_SHARED_LIBS=ON
1850
-DTBB_TEST=OFF
1951
-DTBB_EXAMPLES=OFF
2052
-DTBB_STRICT=OFF
53+
${_tbb_cmake_args}
2154
BUILD_BYPRODUCTS
22-
${TBB_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}tbb${CMAKE_STATIC_LIBRARY_SUFFIX}
55+
${_tbb_byproducts}
2356
)
2457
add_dependencies(itlabai_external tbb_external)
2558

26-
if(MSVC)
27-
set(_tbb_lib "${TBB_INSTALL_DIR}/lib/tbb_static.lib")
28-
else()
29-
set(_tbb_lib "${TBB_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}tbb${CMAKE_STATIC_LIBRARY_SUFFIX}")
30-
endif()
31-
3259
file(MAKE_DIRECTORY "${TBB_INSTALL_DIR}/include")
3360
file(MAKE_DIRECTORY "${TBB_INSTALL_DIR}/lib")
3461

35-
add_library(TBB::tbb STATIC IMPORTED GLOBAL)
36-
set_target_properties(TBB::tbb PROPERTIES
37-
IMPORTED_LOCATION_RELEASE "${_tbb_lib}"
38-
IMPORTED_LOCATION_DEBUG "${_tbb_lib}"
39-
IMPORTED_LOCATION_RELWITHDEBINFO "${_tbb_lib}"
40-
IMPORTED_LOCATION_MINSIZEREL "${_tbb_lib}"
41-
INTERFACE_INCLUDE_DIRECTORIES "${TBB_INSTALL_DIR}/include"
42-
)
62+
add_library(TBB::tbb SHARED IMPORTED GLOBAL)
63+
if(WIN32)
64+
set_target_properties(TBB::tbb PROPERTIES
65+
IMPORTED_LOCATION_RELEASE "${_tbb_dll}"
66+
IMPORTED_LOCATION_DEBUG "${_tbb_dll}"
67+
IMPORTED_LOCATION_RELWITHDEBINFO "${_tbb_dll}"
68+
IMPORTED_LOCATION_MINSIZEREL "${_tbb_dll}"
69+
IMPORTED_IMPLIB "${_tbb_lib}"
70+
IMPORTED_IMPLIB_RELEASE "${_tbb_lib}"
71+
IMPORTED_IMPLIB_DEBUG "${_tbb_lib}"
72+
IMPORTED_IMPLIB_RELWITHDEBINFO "${_tbb_lib}"
73+
IMPORTED_IMPLIB_MINSIZEREL "${_tbb_lib}"
74+
INTERFACE_INCLUDE_DIRECTORIES "${TBB_INSTALL_DIR}/include"
75+
)
76+
else()
77+
set_target_properties(TBB::tbb PROPERTIES
78+
IMPORTED_LOCATION_RELEASE "${_tbb_lib}"
79+
IMPORTED_LOCATION_DEBUG "${_tbb_lib}"
80+
IMPORTED_LOCATION_RELWITHDEBINFO "${_tbb_lib}"
81+
IMPORTED_LOCATION_MINSIZEREL "${_tbb_lib}"
82+
INTERFACE_INCLUDE_DIRECTORIES "${TBB_INSTALL_DIR}/include"
83+
)
84+
endif()
4385
add_dependencies(TBB::tbb tbb_external)
4486
else()
4587
# Use system-provided TBB target

test/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ target_include_directories(run_test PRIVATE "${CMAKE_SOURCE_DIR}/app/ReaderImage
5555
itlabai_target_defaults(run_test)
5656

5757
if (WIN32)
58+
target_compile_definitions(run_test PRIVATE _CRT_SECURE_NO_WARNINGS)
5859
add_custom_command(TARGET run_test POST_BUILD
5960
COMMAND ${CMAKE_COMMAND} -E copy
6061
$<TARGET_FILE:dnnl>

0 commit comments

Comments
 (0)