diff --git a/CMakeLists.txt b/CMakeLists.txt index 83d32c239b684beac69914d04c81ace018957f1f..7f8e6820ebdae5e72681875080061dd45d6556b8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -210,7 +210,7 @@ install(FILES "${CMAKE_BINARY_DIR}/include/module.modulemap" DESTINATION ${CMAKE add_dependencies(move_artifacts copymodulemap) # Provide our own modulemap for implementations other than libcxx. -if (NOT libcxx) +if (NOT WIN32 AND NOT libcxx) # Write a empty overlay file to the output directory that CMake can run its compiler tests. # We will create the actual overlay later in the configuration. file(WRITE ${CMAKE_BINARY_DIR}/include/modulemap.overlay.yaml "{'version' : 0, 'roots' : []}") @@ -309,6 +309,11 @@ if(cxxmodules) string(REPLACE "${ROOT_CXXMODULES_CXXFLAGS}" "" CMAKE_CXX_FLAGS_SEPARATE ${CMAKE_CXX_FLAGS_SEPARATE}) endif(cxxmodules) string(REGEX REPLACE "[ ]-" ";-" CMAKE_CXX_FLAGS_SEPARATE "${CMAKE_CXX_FLAGS_SEPARATE} ${CORE_OS_DICT_CXX_FLAGS}") +if(MSVC) + string(REPLACE "-nologo" "" CMAKE_CXX_FLAGS_SEPARATE "${CMAKE_CXX_FLAGS_SEPARATE}") + string(REPLACE "-EHsc-" "" CMAKE_CXX_FLAGS_SEPARATE "${CMAKE_CXX_FLAGS_SEPARATE}") + string(REPLACE "-GR" "" CMAKE_CXX_FLAGS_SEPARATE "${CMAKE_CXX_FLAGS_SEPARATE}") +endif() add_custom_command(OUTPUT etc/dictpch/allLinkDefs.h etc/dictpch/allHeaders.h @@ -322,6 +327,11 @@ foreach(d ${incdirs}) set(__allIncludes ${__allIncludes} -I${d}) endif() endforeach() +if(MSVC) + set(__allIncludes ${__allIncludes} -I${CMAKE_SOURCE_DIR}/graf2d/win32gdk/gdk/src/glib) + set(__allIncludes ${__allIncludes} -I${CMAKE_SOURCE_DIR}/graf2d/win32gdk/gdk/src) + set(__allIncludes ${__allIncludes} -I${CMAKE_SOURCE_DIR}/graf2d/win32gdk/gdk/src/gdk) +endif() add_custom_command(OUTPUT etc/allDict.cxx.pch COMMAND ${CMAKE_COMMAND} -E env ROOTIGNOREPREFIX=1 ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/etc/dictpch/makepch.py etc/allDict.cxx.pch ${__allIncludes} -I${CMAKE_BINARY_DIR}/include @@ -357,9 +367,11 @@ endif() install(FILES ${CMAKE_BINARY_DIR}/tutorials/hsimple.root DESTINATION ${CMAKE_INSTALL_TUTDIR} COMPONENT tests) #---version-------------------------------------------------------------------------------------- +if(NOT WIN32) add_custom_target(version COMMAND ${CMAKE_SOURCE_DIR}/build/unix/makeversion.sh ${CMAKE_BINARY_DIR} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) #add_dependencies(version root.exe) +endif() #---distribution commands------------------------------------------------------------------------ add_custom_target(distsrc COMMAND ${CMAKE_SOURCE_DIR}/build/unix/makedistsrc.sh ${CMAKE_SOURCE_DIR} diff --git a/cmake/modules/RootNewMacros.cmake b/cmake/modules/RootNewMacros.cmake index ce25af4d3a90c76e0297821c3868f9a80e88f54f..f44f3ae05dbfe4877b6b1e22006c95b1c5410caa 100644 --- a/cmake/modules/RootNewMacros.cmake +++ b/cmake/modules/RootNewMacros.cmake @@ -582,6 +582,7 @@ function(ROOT_LINKER_LIBRARY library) if(WIN32 AND ARG_TYPE STREQUAL SHARED AND NOT ARG_DLLEXPORT) #---create a list of all the object files----------------------------- if(CMAKE_GENERATOR MATCHES "Visual Studio") + set(library_name ${libprefix}${library}) #foreach(src1 ${lib_srcs}) # if(NOT src1 MATCHES "[.]h$|[.]icc$|[.]hxx$|[.]hpp$") # string (REPLACE ${CMAKE_CURRENT_SOURCE_DIR} "" src2 ${src1}) @@ -591,7 +592,7 @@ function(ROOT_LINKER_LIBRARY library) # set(lib_objs ${lib_objs} ${library}.dir/${CMAKE_CFG_INTDIR}/${name}.obj) # endif() #endforeach() - set(lib_objs ${lib_objs} ${library}.dir/${CMAKE_CFG_INTDIR}/*.obj) + set(lib_objs ${lib_objs} ${library}.dir/${CMAKE_CFG_INTDIR}/*.obj) else() foreach(src1 ${lib_srcs}) if(NOT src1 MATCHES "[.]h$|[.]icc$|[.]hxx$|[.]hpp$") @@ -607,15 +608,7 @@ function(ROOT_LINKER_LIBRARY library) #---create a shared library with the .def file------------------------ add_library(${library} ${_all} SHARED ${lib_srcs}) target_link_libraries(${library} ${ARG_LIBRARIES} ${ARG_DEPENDENCIES}) - set_target_properties(${library} PROPERTIES ${ROOT_LIBRARY_PROPERTIES} LINK_FLAGS -DEF:${library}.def) - - #---set the .def file as generated------------------------------------ - set_source_files_properties(${library}.def PROPERTIES GENERATED 1) - #---create a custom pre-link command that runs bindexplib - add_custom_command(TARGET ${library} PRE_LINK - COMMAND bindexplib - ARGS -o ${library}.def ${libprefix}${library} ${lib_objs} - DEPENDS bindexplib ) + set_target_properties(${library} PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE) else() #---Need to add a dummy source file if all sources are OBJECT libraries (Xcode, ...) if(NOT lib_srcs MATCHES "(^|[;])[^$][^<]") @@ -701,6 +694,9 @@ function(ROOT_OBJECT_LIBRARY library) # creates extra module variants, and not useful because we don't use these # macros. set_target_properties(${library} PROPERTIES DEFINE_SYMBOL "") + if(WIN32) + set_target_properties(${library} PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE) + endif() if(ARG_BUILTINS) foreach(arg1 ${ARG_BUILTINS}) diff --git a/cmake/modules/SearchInstalledSoftware.cmake b/cmake/modules/SearchInstalledSoftware.cmake index 048584d5dd8faa17c1fdf18d556a28e86413af5c..c3c0e161822f4d3f80d8498e1cff65ac86200240 100644 --- a/cmake/modules/SearchInstalledSoftware.cmake +++ b/cmake/modules/SearchInstalledSoftware.cmake @@ -86,21 +86,18 @@ if(builtin_freetype) set(FREETYPE_LIBRARY ${CMAKE_BINARY_DIR}/FREETYPE-prefix/src/FREETYPE/objs/.libs/${CMAKE_STATIC_LIBRARY_PREFIX}freetype${CMAKE_STATIC_LIBRARY_SUFFIX}) if(WIN32) if(winrtdebug) - set(freetypeliba objs/freetype261MT_D.lib) - set(freetypebuild "freetype - Win32 Debug Multithreaded") + set(freetypebuild "Debug") else() - set(freetypeliba objs/freetype261MT.lib) - set(freetypebuild "freetype - Win32 Release Multithreaded") + set(freetypebuild "Release") endif() ExternalProject_Add( FREETYPE URL ${CMAKE_SOURCE_DIR}/graf2d/freetype/src/freetype-${freetype_version}.tar.gz - PATCH_COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/graf2d/freetype/src/win32 builds/windows/visualc/. - CONFIGURE_COMMAND "" - BUILD_COMMAND ${CMAKE_COMMAND} -E chdir builds/windows/visualc/ - nmake -nologo -f freetype.mak CFG=${freetypebuild} NMAKECXXFLAGS=-D_CRT_SECURE_NO_DEPRECATE - INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_if_different ${freetypeliba} ./libs/freetype.lib - LOG_DOWNLOAD 1 LOG_CONFIGURE 1 LOG_BUILD 1 LOG_INSTALL 1 BUILD_IN_SOURCE 1 + INSTALL_DIR ${CMAKE_BINARY_DIR} + CMAKE_ARGS -G ${CMAKE_GENERATOR} -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} + BUILD_COMMAND ${CMAKE_COMMAND} --build . --config ${freetypebuild} + INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_if_different ${freetypebuild}/freetype.lib ${FREETYPE_LIBRARY} + LOG_DOWNLOAD 1 LOG_CONFIGURE 1 LOG_BUILD 1 LOG_INSTALL 1 BUILD_IN_SOURCE 0 BUILD_BYPRODUCTS ${FREETYPE_LIBRARY}) else() set(_freetype_cflags -O) @@ -139,19 +136,20 @@ if(builtin_pcre) message(STATUS "Building pcre version ${pcre_version} included in ROOT itself") set(PCRE_LIBRARY ${CMAKE_BINARY_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}pcre${CMAKE_STATIC_LIBRARY_SUFFIX}) if(WIN32) - if(winrtdebug) - set(pcrebuild "libpcre - Win32 Debug") - else() - set(pcrebuild "libpcre - Win32 Release") + if (winrtdebug) + set(pcre_lib pcred.lib) + set(pcre_build_type Debug) + else() + set(pcre_lib pcre.lib) + set(pcre_build_type Release) endif() ExternalProject_Add( PCRE URL ${CMAKE_SOURCE_DIR}/core/pcre/src/pcre-${pcre_version}.tar.gz - PATCH_COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/core/pcre/src/win32 . - CONFIGURE_COMMAND "" - BUILD_COMMAND ${CMAKE_COMMAND} nmake -nologo -f Makefile.msc - CFG=${pcrebuild} NMCXXFLAGS=${CMAKE_CC_FLAGS} - INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_if_different libpcre-8.37.lib <INSTALL_DIR>/lib/pcre.lib + INSTALL_DIR ${CMAKE_BINARY_DIR} +# CMAKE_ARGS -G ${CMAKE_GENERATOR} -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} + BUILD_COMMAND ${CMAKE_COMMAND} --build . --config ${pcre_build_type} + INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_if_different ${pcre_build_type}/${pcre_lib} ${PCRE_LIBRARY} COMMAND ${CMAKE_COMMAND} -E copy_if_different pcre.h <INSTALL_DIR>/include COMMAND ${CMAKE_COMMAND} -E copy_if_different pcre_scanner.h <INSTALL_DIR>/include COMMAND ${CMAKE_COMMAND} -E copy_if_different pcre_stringpiece.h <INSTALL_DIR>/include @@ -244,18 +242,34 @@ if(builtin_lz4) set(LZ4_CFLAGS "-Wno-format-nonliteral") elseif( CMAKE_CXX_COMPILER_ID STREQUAL Intel) set(LZ4_CFLAGS "-wd188 -wd181 -wd1292 -wd10006 -wd10156 -wd2259 -wd981 -wd128 -wd3179") + elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") + set(LZ4_CFLAGS "/Zl") endif() set(LZ4_LIBRARIES ${CMAKE_BINARY_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}lz4${CMAKE_STATIC_LIBRARY_SUFFIX}) - ExternalProject_Add( - LZ4 - URL ${lcgpackages}/lz4-${lz4_version}.tar.gz - URL_MD5 c9610c5ce97eb431dddddf0073d919b9 - INSTALL_DIR ${CMAKE_BINARY_DIR} - CONFIGURE_COMMAND /bin/sh -c "PREFIX=<INSTALL_DIR> CMAKE_PARAMS='-DCMAKE_C_COMPILER=\\\"${CMAKE_C_COMPILER}\\\" -DCMAKE_C_FLAGS=\\\"${CMAKE_C_FLAGS}\\\" -DCMAKE_OSX_SYSROOT=\\\"${CMAKE_OSX_SYSROOT}\\\"' make cmake" - BUILD_COMMAND /bin/sh -c "PREFIX=<INSTALL_DIR> MOREFLAGS=-fPIC make" - INSTALL_COMMAND /bin/sh -c "PREFIX=<INSTALL_DIR> make install" - LOG_DOWNLOAD 1 LOG_CONFIGURE 1 LOG_BUILD 1 LOG_INSTALL 1 BUILD_IN_SOURCE 1 - BUILD_BYPRODUCTS ${LZ4_LIBRARIES}) + if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") + file(TO_NATIVE_PATH "${CMAKE_BINARY_DIR}/include" NATIVE_INCLUDEDIR) + ExternalProject_Add( + LZ4 + URL http://lcgpackages.web.cern.ch/lcgpackages/tarFiles/sources/lz4-${lz4_version}.tar.gz + URL_MD5 c9610c5ce97eb431dddddf0073d919b9 + INSTALL_DIR ${CMAKE_BINARY_DIR} + CONFIGURE_COMMAND cl /c "${LZ4_CFLAGS}" -DXXH_NAMESPACE=LZ4_ lib/lz4.c lib/lz4hc.c lib/lz4frame.c lib/xxhash.c + BUILD_COMMAND lib /NODEFAULTLIB lz4.obj lz4hc.obj lz4frame.obj xxhash.obj /OUT:${LZ4_LIBRARIES} + INSTALL_COMMAND xcopy "lib\\*.h" "${NATIVE_INCLUDEDIR}\\" /Y + LOG_DOWNLOAD 1 LOG_CONFIGURE 1 LOG_BUILD 1 LOG_INSTALL 1 BUILD_IN_SOURCE 1 + BUILD_BYPRODUCTS ${LZ4_LIBRARIES}) + else() + ExternalProject_Add( + LZ4 + URL ${lcgpackages}/lz4-${lz4_version}.tar.gz + URL_MD5 c9610c5ce97eb431dddddf0073d919b9 + INSTALL_DIR ${CMAKE_BINARY_DIR} + CONFIGURE_COMMAND /bin/sh -c "PREFIX=<INSTALL_DIR> CMAKE_PARAMS='-DCMAKE_C_COMPILER=\\\"${CMAKE_C_COMPILER}\\\" -DCMAKE_C_FLAGS=\\\"${CMAKE_C_FLAGS}\\\" -DCMAKE_OSX_SYSROOT=\\\"${CMAKE_OSX_SYSROOT}\\\"' make cmake" + BUILD_COMMAND /bin/sh -c "PREFIX=<INSTALL_DIR> MOREFLAGS=-fPIC make" + INSTALL_COMMAND /bin/sh -c "PREFIX=<INSTALL_DIR> make install" + LOG_DOWNLOAD 1 LOG_CONFIGURE 1 LOG_BUILD 1 LOG_INSTALL 1 BUILD_IN_SOURCE 1 + BUILD_BYPRODUCTS ${LZ4_LIBRARIES}) + endif() set(LZ4_INCLUDE_DIR ${CMAKE_BINARY_DIR}/include) set(LZ4_DEFINITIONS -DBUILTIN_LZ4) endif() @@ -356,8 +370,9 @@ if(builtin_afterimage) AFTERIMAGE DOWNLOAD_COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/graf2d/asimage/src/libAfterImage AFTERIMAGE INSTALL_DIR ${CMAKE_BINARY_DIR} + CONFIGURE_COMMAND "" BUILD_COMMAND nmake -nologo -f libAfterImage.mak FREETYPEDIRI=-I${FREETYPE_INCLUDE_DIR} - CFG=${astepbld} NMAKECXXFLAGS="${CMAKE_CXX_FLAGS} /wd4244" + CFG=${astepbld} NMAKECXXFLAGS=${CMAKE_CXX_FLAGS} INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_if_different libAfterImage.lib <INSTALL_DIR>/lib/. LOG_DOWNLOAD 1 LOG_CONFIGURE 1 LOG_BUILD 1 LOG_INSTALL 1 BUILD_IN_SOURCE 1 BUILD_BYPRODUCTS ${AFTERIMAGE_LIBRARIES}) diff --git a/cmake/modules/SetUpWindows.cmake b/cmake/modules/SetUpWindows.cmake index 82ec44ca497cc5ada6344932cd3cff3006424578..302abf1ad54b44b418dfa8bedaee00a81d3952b0 100644 --- a/cmake/modules/SetUpWindows.cmake +++ b/cmake/modules/SetUpWindows.cmake @@ -63,8 +63,8 @@ elseif(MSVC) endif() if(CMAKE_PROJECT_NAME STREQUAL ROOT) - set(CMAKE_CXX_FLAGS "-nologo -I${CMAKE_SOURCE_DIR}/build/win -FIw32pragma.h -FIsehmap.h ${BLDCXXFLAGS} -EHsc- -W3 -wd4244 -D_WIN32 -D_XKEYCHECK_H") - set(CMAKE_C_FLAGS "-nologo -I${CMAKE_SOURCE_DIR}/build/win -FIw32pragma.h -FIsehmap.h ${BLDCFLAGS} -EHsc- -W3 -D_WIN32") + set(CMAKE_CXX_FLAGS "-nologo -I${CMAKE_SOURCE_DIR}/build/win -FIw32pragma.h -FIsehmap.h ${BLDCXXFLAGS} -EHsc- -W3 -wd4244 -D_WIN32 -D_XKEYCHECK_H -D_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER -DNOMINMAX") + set(CMAKE_C_FLAGS "-nologo -I${CMAKE_SOURCE_DIR}/build/win -FIw32pragma.h -FIsehmap.h ${BLDCFLAGS} -EHsc- -W3 -D_WIN32 -D_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER -DNOMINMAX") install(FILES ${CMAKE_SOURCE_DIR}/build/win/w32pragma.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT headers) install(FILES ${CMAKE_SOURCE_DIR}/build/win/sehmap.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT headers) else() diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt index f3ff8129a1da63e462a45b47c4b17ccecf458d1b..2314b2bedfcc2bfb2296bcb8b71083741203222d 100644 --- a/core/CMakeLists.txt +++ b/core/CMakeLists.txt @@ -9,7 +9,9 @@ add_subdirectory(dictgen) add_subdirectory(foundation) add_subdirectory(meta) add_subdirectory(metacling) +if(NOT WIN32) add_subdirectory(multiproc) +endif() add_subdirectory(rint) add_subdirectory(textinput) add_subdirectory(thread)