Skip to content

Commit f087d6c

Browse files
authored
[cmake][windows] Add Ninja support on Windows (root-project#16690)
* [cmake][windows] Add Ninja support on Windows * [cmake][win] Fix native build (without Ninja)
1 parent 31ed063 commit f087d6c

File tree

19 files changed

+113
-54
lines changed

19 files changed

+113
-54
lines changed

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -704,7 +704,7 @@ Install path: ${CMAKE_INSTALL_PREFIX}
704704
Compiler: ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}
705705
C++ standard: ${CMAKE_CXX_STANDARD}
706706
Compiler flags:")
707-
if(MSVC)
707+
if(MSVC AND NOT CMAKE_GENERATOR MATCHES Ninja)
708708
message(STATUS "
709709
- C: ${CMAKE_C_FLAGS}
710710
- C (build type specific):

builtins/cfitsio/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ if(NOT WIN32)
1313
set(CFITSIO_C_FLAGS -fPIC)
1414
endif()
1515

16-
if(WIN32)
16+
if(WIN32 AND NOT CMAKE_GENERATOR MATCHES Ninja)
1717
if(winrtdebug)
1818
set(CFITSIO_BUILD_COMMAND_FLAGS "--config Debug")
1919
else()

builtins/pcre/CMakeLists.txt

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,19 @@ foreach(var PCRE_FOUND PCRE_VERSION PCRE_INCLUDE_DIR PCRE_PCRE_LIBRARY PCRE_LIBR
1313
endforeach()
1414

1515
if(WIN32)
16-
if(winrtdebug)
17-
set(PCRE_POSTFIX $<$<CONFIG:Debug>:d>)
18-
set(pcre_config_kind "Debug")
16+
if(CMAKE_GENERATOR MATCHES Ninja)
17+
if (CMAKE_BUILD_TYPE MATCHES Debug)
18+
set(PCRE_POSTFIX d)
19+
endif()
1920
else()
20-
set(pcre_config_kind "Release")
21+
if(winrtdebug)
22+
set(PCRE_POSTFIX $<$<CONFIG:Debug>:d>)
23+
set(pcre_config_kind "Debug")
24+
else()
25+
set(pcre_config_kind "Release")
26+
endif()
27+
set(pcre_config "--config ${pcre_config_kind}")
2128
endif()
22-
set(pcre_config "--config")
2329
endif()
2430

2531
set(PCRE_VERSION "8.43" CACHE INTERNAL "" FORCE)
@@ -52,7 +58,7 @@ ExternalProject_Add(PCRE
5258
-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=TRUE
5359

5460
BUILD_COMMAND
55-
${CMAKE_COMMAND} --build <BINARY_DIR> ${pcre_config} ${pcre_config_kind} --target pcre
61+
${CMAKE_COMMAND} --build <BINARY_DIR> ${pcre_config} --target pcre
5662

5763
BUILD_BYPRODUCTS
5864
${PCRE_BYPRODUCTS}

cmake/modules/RootMacros.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1848,7 +1848,7 @@ function(ROOT_ADD_GTEST test_suite)
18481848
endif(ARG_INCLUDE_DIRS)
18491849

18501850
if(MSVC)
1851-
set(test_exports "/EXPORT:_Init_thread_abort /EXPORT:_Init_thread_epoch
1851+
set(test_exports "/EXPORT:_Init_thread_abort /EXPORT:_Init_thread_epoch \
18521852
/EXPORT:_Init_thread_footer /EXPORT:_Init_thread_header /EXPORT:_tls_index")
18531853
set_property(TARGET ${test_suite} APPEND_STRING PROPERTY LINK_FLAGS ${test_exports})
18541854
endif()

cmake/modules/SearchInstalledSoftware.cmake

Lines changed: 63 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -186,20 +186,31 @@ if(builtin_freetype)
186186
message(STATUS "Building freetype version ${freetype_version} included in ROOT itself")
187187
set(FREETYPE_LIBRARY ${CMAKE_BINARY_DIR}/FREETYPE-prefix/src/FREETYPE/objs/.libs/${CMAKE_STATIC_LIBRARY_PREFIX}freetype${CMAKE_STATIC_LIBRARY_SUFFIX})
188188
if(WIN32)
189-
set(freetypebuild "Release")
190-
set(freetypelib freetype.lib)
191-
if(winrtdebug)
192-
set(freetypebuild "Debug")
193-
set(freetypelib freetyped.lib)
189+
set(FREETYPE_LIB_DIR ".")
190+
if(CMAKE_GENERATOR MATCHES Ninja)
191+
set(freetypelib freetype.lib)
192+
if (CMAKE_BUILD_TYPE MATCHES Debug)
193+
set(freetypelib freetyped.lib)
194+
endif()
195+
else()
196+
set(freetypebuild Release)
197+
set(freetypelib freetype.lib)
198+
if(winrtdebug)
199+
set(freetypebuild Debug)
200+
set(freetypelib freetyped.lib)
201+
endif()
202+
set(FREETYPE_LIB_DIR "${freetypebuild}")
203+
set(FREETYPE_EXTRA_BUILD_ARGS --config ${freetypebuild})
194204
endif()
195205
ExternalProject_Add(
196206
FREETYPE
197207
URL ${CMAKE_SOURCE_DIR}/graf2d/freetype/src/freetype-${freetype_version}.tar.gz
198208
URL_HASH SHA256=efe71fd4b8246f1b0b1b9bfca13cfff1c9ad85930340c27df469733bbb620938
199209
INSTALL_DIR ${CMAKE_BINARY_DIR}
200-
CMAKE_ARGS -G ${CMAKE_GENERATOR} -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} -DFT_DISABLE_BZIP2=TRUE
201-
BUILD_COMMAND ${CMAKE_COMMAND} --build . --config ${freetypebuild}
202-
INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_if_different ${freetypebuild}/${freetypelib} ${FREETYPE_LIBRARY}
210+
CMAKE_ARGS -G ${CMAKE_GENERATOR} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
211+
-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} -DFT_DISABLE_BZIP2=TRUE
212+
BUILD_COMMAND ${CMAKE_COMMAND} --build . ${FREETYPE_EXTRA_BUILD_ARGS}
213+
INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_if_different ${FREETYPE_LIB_DIR}/${freetypelib} ${FREETYPE_LIBRARY}
203214
LOG_DOWNLOAD 1 LOG_CONFIGURE 1 LOG_BUILD 1 LOG_INSTALL 1 BUILD_IN_SOURCE 0
204215
BUILD_BYPRODUCTS ${FREETYPE_LIBRARY}
205216
TIMEOUT 600
@@ -299,6 +310,7 @@ if(builtin_lzma)
299310
BUILD_COMMAND ""
300311
INSTALL_COMMAND ""
301312
LOG_DOWNLOAD 1
313+
BUILD_BYPRODUCTS ${LIBLZMA_LIBRARIES}
302314
TIMEOUT 600
303315
)
304316
set(LIBLZMA_INCLUDE_DIR ${CMAKE_BINARY_DIR}/LZMA/src/LZMA/include)
@@ -453,18 +465,24 @@ if(asimage)
453465
#---AfterImage---------------------------------------------------------------
454466
set(AFTERIMAGE_LIBRARIES ${CMAKE_BINARY_DIR}/lib/libAfterImage${CMAKE_STATIC_LIBRARY_SUFFIX})
455467
if(WIN32)
456-
if(winrtdebug)
457-
set(astepbld "Debug")
458-
else()
459-
set(astepbld "Release")
468+
set(ASTEP_LIB_DIR ".")
469+
if(NOT CMAKE_GENERATOR MATCHES Ninja)
470+
if(winrtdebug)
471+
set(astepbld Debug)
472+
else()
473+
set(astepbld Release)
474+
endif()
475+
set(ASTEP_LIB_DIR "${astepbld}")
476+
set(ASTEP_EXTRA_BUILD_ARGS --config ${astepbld})
460477
endif()
461478
ExternalProject_Add(
462479
AFTERIMAGE
463480
DOWNLOAD_COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/graf2d/asimage/src/libAfterImage AFTERIMAGE
464481
INSTALL_DIR ${CMAKE_BINARY_DIR}
465-
CMAKE_ARGS -G ${CMAKE_GENERATOR} -DCMAKE_VERBOSE_MAKEFILE=ON -DFREETYPE_INCLUDE_DIR=${FREETYPE_INCLUDE_DIR} -DZLIB_INCLUDE_DIR=${ZLIB_INCLUDE_DIR}
466-
BUILD_COMMAND ${CMAKE_COMMAND} --build . --config ${astepbld}
467-
INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_if_different ${astepbld}/libAfterImage.lib <INSTALL_DIR>/lib/
482+
CMAKE_ARGS -G ${CMAKE_GENERATOR} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
483+
-DFREETYPE_INCLUDE_DIR=${FREETYPE_INCLUDE_DIR} -DZLIB_INCLUDE_DIR=${ZLIB_INCLUDE_DIR}
484+
BUILD_COMMAND ${CMAKE_COMMAND} --build . ${ASTEP_EXTRA_BUILD_ARGS}
485+
INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_if_different ${ASTEP_LIB_DIR}/libAfterImage.lib <INSTALL_DIR>/lib/
468486
LOG_DOWNLOAD 1 LOG_CONFIGURE 1 LOG_BUILD 1 LOG_INSTALL 1 BUILD_IN_SOURCE 0
469487
BUILD_BYPRODUCTS ${AFTERIMAGE_LIBRARIES}
470488
TIMEOUT 600
@@ -1239,12 +1257,19 @@ if(builtin_tbb)
12391257
set(tbb_sha256 1ce48f34dada7837f510735ff1172f6e2c261b09460e3bf773b49791d247d24e)
12401258

12411259
if(MSVC)
1242-
set(tbb_build Release)
1243-
if(winrtdebug)
1244-
set(tbb_build Debug)
1245-
set(tbbsuffix "_debug")
1260+
if(CMAKE_GENERATOR MATCHES Ninja)
1261+
if(CMAKE_BUILD_TYPE MATCHES Debug)
1262+
set(tbbsuffix "_debug")
1263+
endif()
1264+
else()
1265+
set(tbb_build Release)
1266+
if(winrtdebug)
1267+
set(tbb_build Debug)
1268+
set(tbbsuffix "_debug")
1269+
endif()
12461270
endif()
12471271
set(TBB_LIBRARIES ${CMAKE_BINARY_DIR}/lib/tbb12${tbbsuffix}.lib)
1272+
set(TBB_CXXFLAGS "-D__TBB_NO_IMPLICIT_LINKAGE=1")
12481273
install(DIRECTORY ${CMAKE_BINARY_DIR}/bin/ DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT libraries FILES_MATCHING PATTERN "tbb*.dll")
12491274
install(DIRECTORY ${CMAKE_BINARY_DIR}/lib/ DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries FILES_MATCHING PATTERN "tbb*.lib")
12501275
else()
@@ -1822,9 +1847,21 @@ if (builtin_gtest)
18221847

18231848
set(GTEST_CXX_FLAGS "${ROOT_EXTERNAL_CXX_FLAGS}")
18241849
if(MSVC)
1825-
set(gtestbuild "Release")
1826-
if(winrtdebug)
1827-
set(gtestbuild "Debug")
1850+
if(winrtdebug)
1851+
set(GTEST_BUILD_TYPE Debug)
1852+
else()
1853+
set(GTEST_BUILD_TYPE Release)
1854+
endif()
1855+
set(_gtest_byproducts
1856+
${_gtest_byproduct_binary_dir}/lib/gtest.lib
1857+
${_gtest_byproduct_binary_dir}/lib/gtest_main.lib
1858+
${_gtest_byproduct_binary_dir}/lib/gmock.lib
1859+
${_gtest_byproduct_binary_dir}/lib/gmock_main.lib
1860+
)
1861+
if(CMAKE_GENERATOR MATCHES Ninja)
1862+
set(GTEST_BUILD_COMMAND "BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR>")
1863+
else()
1864+
set(GTEST_BUILD_COMMAND "BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config ${GTEST_BUILD_TYPE}")
18281865
endif()
18291866
if(asan)
18301867
if(NOT winrtdebug)
@@ -1838,7 +1875,9 @@ if (builtin_gtest)
18381875
-DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE:PATH=${_gtest_byproduct_binary_dir}/lib/
18391876
-DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELWITHDEBINFO:PATH=${_gtest_byproduct_binary_dir}/lib/
18401877
-Dgtest_force_shared_crt=ON
1841-
BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config ${gtestbuild})
1878+
${GTEST_BUILD_COMMAND})
1879+
else()
1880+
set(GTEST_BUILD_TYPE Release)
18421881
endif()
18431882
if(APPLE)
18441883
set(EXTRA_GTEST_OPTS
@@ -1857,7 +1896,7 @@ if (builtin_gtest)
18571896
# -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE:PATH=ReleaseLibs
18581897
# -Dgtest_force_shared_crt=ON
18591898
CMAKE_ARGS -G ${CMAKE_GENERATOR}
1860-
-DCMAKE_BUILD_TYPE=Release
1899+
-DCMAKE_BUILD_TYPE=${GTEST_BUILD_TYPE}
18611900
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
18621901
-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
18631902
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}

core/metacling/src/CMakeLists.txt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,7 @@ if(MSVC)
7171
target_include_directories(MetaCling PRIVATE
7272
${CMAKE_SOURCE_DIR}/core/winnt/inc
7373
)
74-
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
75-
set_source_files_properties(TCling.cxx COMPILE_FLAGS $<$<CONFIG:Debug>:/bigobj>)
76-
endif()
74+
set_source_files_properties(TCling.cxx COMPILE_FLAGS /bigobj)
7775
endif()
7876

7977
add_dependencies(MetaCling CLING)

core/rootcling_stage1/CMakeLists.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,5 +41,7 @@ if (CMAKE_SYSTEM_NAME MATCHES FreeBSD)
4141
target_link_libraries(rootcling_stage1 util procstat)
4242
endif()
4343

44-
set_target_properties(rootcling_stage1 PROPERTIES RUNTIME_OUTPUT_DIRECTORY src)
44+
if(NOT (WIN32 AND CMAKE_GENERATOR MATCHES Ninja))
45+
set_target_properties(rootcling_stage1 PROPERTIES RUNTIME_OUTPUT_DIRECTORY src)
46+
endif()
4547
add_dependencies(rootcling_stage1 ClingUtils)

graf2d/win32gdk/CMakeLists.txt

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,17 @@ file(GLOB iconvfiles "gdk/src/iconv/*.*")
3434
file(GLOB_RECURSE glibfiles "gdk/src/glib/*.*")
3535
file(GLOB_RECURSE gdkfiles "gdk/src/gdk/*.*")
3636

37-
if(winrtdebug)
38-
set(nmcxxflags "${CMAKE_CXX_FLAGS_DEBUG}" DEBUG=1)
37+
if(CMAKE_GENERATOR MATCHES Ninja)
38+
set(nmcxxflags ${CMAKE_CXX_FLAGS_${_BUILD_TYPE_UPPER}})
39+
if (CMAKE_BUILD_TYPE MATCHES "Debug")
40+
set(nmcxxflags "${nmcxxflags}" DEBUG=1)
41+
endif()
3942
else()
40-
set(nmcxxflags "${CMAKE_CXX_FLAGS_RELEASE}")
43+
if(winrtdebug)
44+
set(nmcxxflags "${CMAKE_CXX_FLAGS_DEBUG}" DEBUG=1)
45+
else()
46+
set(nmcxxflags "${CMAKE_CXX_FLAGS_RELEASE}")
47+
endif()
4148
endif()
4249
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
4350
set(nmcxxflags "${nmcxxflags} -D_WIN64")

hist/unfold/inc/TUnfold.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@
9292

9393
#include <TH1D.h>
9494
#include <TH2D.h>
95+
#include <TGraph.h>
9596
#include <TObject.h>
9697
#include <TArrayI.h>
9798
#include <TSpline.h>

interpreter/CMakeLists.txt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,9 +257,13 @@ if(builtin_llvm)
257257
get_directory_property(LLVM_TARGETS_TO_BUILD DIRECTORY llvm-project/llvm DEFINITION LLVM_TARGETS_TO_BUILD)
258258

259259
if(MSVC)
260+
if(CMAKE_GENERATOR MATCHES Ninja)
261+
set(LLVM_TABLEGEN_EXE "${LLVM_BINARY_DIR}/bin/llvm-tblgen.exe")
262+
else()
260263
set(LLVM_TABLEGEN_EXE "${LLVM_BINARY_DIR}/$<CONFIG>/bin/llvm-tblgen.exe")
264+
endif()
261265
else()
262-
set(LLVM_TABLEGEN_EXE "${LLVM_BINARY_DIR}/bin/llvm-tblgen")
266+
set(LLVM_TABLEGEN_EXE "${LLVM_BINARY_DIR}/bin/llvm-tblgen")
263267
endif()
264268
else()
265269
# Rely on llvm-config.

0 commit comments

Comments
 (0)