From e060a449009075b574bd555831f4652acad35451 Mon Sep 17 00:00:00 2001 From: Fons Rademakers <Fons.Rademakers@cern.ch> Date: Thu, 19 Apr 2012 10:06:46 +0000 Subject: [PATCH] From Pere: - add support for 'clang' compiler, which was not the case before. - add support for 'cocoa' - Added rpath link options "@loader_path/../lib" for executables and "@rpath" for libraries for MacOSX platform git-svn-id: http://root.cern.ch/svn/root/trunk@43836 27541ba8-7e3a-0410-8455-c3a389f83636 --- CMakeLists.txt | 2 +- cint/cint/CMakeLists.txt | 2 ++ cint/cint/PlatformDependentSettings.cmake | 4 +++ cmake/modules/CheckCompiler.cmake | 2 +- cmake/modules/RootNewMacros.cmake | 17 +++++++-- cmake/modules/SetUpMacOS.cmake | 44 ++++++++++++++++++++--- core/CMakeLists.txt | 21 +++++++++++ core/macosx/CMakeLists.txt | 15 ++++++++ graf2d/CMakeLists.txt | 4 +++ graf2d/cocoa/CMakeLists.txt | 15 ++++++++ graf2d/quartz/CMakeLists.txt | 12 +++++++ graf3d/eve/CMakeLists.txt | 2 +- graf3d/gviz3d/CMakeLists.txt | 2 +- net/net/CMakeLists.txt | 2 +- 14 files changed, 132 insertions(+), 12 deletions(-) create mode 100644 core/macosx/CMakeLists.txt create mode 100644 graf2d/cocoa/CMakeLists.txt create mode 100644 graf2d/quartz/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 3e17bf65045..3d506f31545 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -60,7 +60,7 @@ add_subdirectory (proof) add_subdirectory (html) add_subdirectory (montecarlo) add_subdirectory (geom) -if(NOT WIN32) +if(x11) add_subdirectory (rootx) endif() add_subdirectory (misc) diff --git a/cint/cint/CMakeLists.txt b/cint/cint/CMakeLists.txt index 452082e3286..1c181003525 100644 --- a/cint/cint/CMakeLists.txt +++ b/cint/cint/CMakeLists.txt @@ -58,6 +58,8 @@ set_source_files_properties(loadfile_tmp.cxx COMPILE_FLAGS "-UR__HAVE_CONFIG -D #---Generate and/or copy the iosenum headerfile to the include directory------------------------------- if(${CLANG_MAJOR} EQUAL 2) set(IOSENUM_H ${PROJECT_SOURCE_DIR}/cint/iosenum/iosenum.${ROOT_ARCHITECTURE}3) +elseif(${CLANG_MAJOR} EQUAL 3) + set(IOSENUM_H ${PROJECT_SOURCE_DIR}/cint/iosenum/iosenum.${ROOT_ARCHITECTURE}3) elseif(${GCC_MAJOR} EQUAL 4) set(IOSENUM_H ${PROJECT_SOURCE_DIR}/cint/iosenum/iosenum.${ROOT_ARCHITECTURE}3) elseif(${GCC_MAJOR} EQUAL 3) diff --git a/cint/cint/PlatformDependentSettings.cmake b/cint/cint/PlatformDependentSettings.cmake index 7300fa43634..7628b2f892f 100644 --- a/cint/cint/PlatformDependentSettings.cmake +++ b/cint/cint/PlatformDependentSettings.cmake @@ -111,6 +111,10 @@ IF(${CLANG_MAJOR} EQUAL 2) LIST(APPEND CINT_CXX_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/src/dict/gcc4strm.cxx) ENDIF(${CLANG_MAJOR} EQUAL 2) +IF(${CLANG_MAJOR} EQUAL 3) + LIST(REMOVE_ITEM CINT_CXX_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/src/dict/libstrm.cxx ${CMAKE_CURRENT_SOURCE_DIR}/src/dict/longif.cxx) + LIST(APPEND CINT_CXX_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/src/dict/gcc4strm.cxx) +ENDIF() if (CMAKE_C_COMPILER MATCHES "xlC") LIST(REMOVE_ITEM CINT_CXX_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/src/dict/libstrm.cxx ${CMAKE_CURRENT_SOURCE_DIR}/src/dict/longif.cxx) diff --git a/cmake/modules/CheckCompiler.cmake b/cmake/modules/CheckCompiler.cmake index 4335a977e56..777df5911e3 100644 --- a/cmake/modules/CheckCompiler.cmake +++ b/cmake/modules/CheckCompiler.cmake @@ -13,7 +13,7 @@ endif() #----Test if clang setup works---------------------------------------------------------------------- -if(CMAKE_C_COMPILER MATCHES clang) +if(${CMAKE_CXX_COMPILER_ID} STREQUAL Clang) exec_program(${CMAKE_C_COMPILER} ARGS "-v" OUTPUT_VARIABLE _clang_version_info) string(REGEX REPLACE "^.*[ ]([0-9]+)\\.[0-9].*$" "\\1" CLANG_MAJOR "${_clang_version_info}") string(REGEX REPLACE "^.*[ ][0-9]+\\.([0-9]).*$" "\\1" CLANG_MINOR "${_clang_version_info}") diff --git a/cmake/modules/RootNewMacros.cmake b/cmake/modules/RootNewMacros.cmake index 22697881b4b..bcd6a8fff02 100644 --- a/cmake/modules/RootNewMacros.cmake +++ b/cmake/modules/RootNewMacros.cmake @@ -44,6 +44,12 @@ else() IMPORT_PREFIX ${libprefix} ) endif() +if(APPLE) + set(ROOT_LIBRARY_PROPERTIES ${ROOT_LIBRARY_PROPERTIES} + INSTALL_NAME_DIR "@rpath" + BUILD_WITH_INSTALL_RPATH ON) +endif() + #---Modify the behaviour for local and non-local builds-------------------------------------------- if(CMAKE_PROJECT_NAME STREQUAL ROOT) @@ -103,14 +109,19 @@ function(ROOT_GET_SOURCES variable cwd ) set(sources) foreach( fp ${ARGN}) if( IS_ABSOLUTE ${fp}) - file(GLOB files ${fp}) + file(GLOB files ${fp}) else() file(GLOB files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${cwd}/${fp}) endif() if(files) - set(sources ${sources} ${files}) + foreach(s ${files}) + if(fp MATCHES "[*]" AND s MATCHES "(^|/)G__") # Eliminate G__* files only when using wildcards + else() + set(sources ${sources} ${s}) + endif() + endforeach() else() - if(fp MATCHES G__) + if(fp MATCHES "(^|/)G__") set(sources ${fp} ${sources}) else() set(sources ${sources} ${fp}) diff --git a/cmake/modules/SetUpMacOS.cmake b/cmake/modules/SetUpMacOS.cmake index ca8795d36b0..190195b57b4 100644 --- a/cmake/modules/SetUpMacOS.cmake +++ b/cmake/modules/SetUpMacOS.cmake @@ -73,14 +73,50 @@ if (CMAKE_SYSTEM_NAME MATCHES Darwin) #settings for cint set(CPPPREP "${CMAKE_CXX_COMPILER} -E -C") set(CXXOUT "-o ") - set(EXPLICITLINK "no") #TODO - set(EXEEXT "") set(SOEXT "so") - else (CMAKE_COMPILER_IS_GNUCXX) + elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL Clang) + + message(STATUS "Found LLVM compiler collection") + execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE) + + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pipe -W -Wall -Woverloaded-virtual -fsigned-char -fno-common") + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pipe -W -Wall -fsigned-char -fno-common") + SET(CMAKE_Fortran_FLAGS "${CMAKE_FORTRAN_FLAGS} -std=legacy") + SET(CINT_CXX_DEFINITIONS "-DG__REGEXP -DG__UNIX -DG__SHAREDLIB -DG__ROOT -DG__REDIRECTIO -DG__OSFDLL -DG__STD_EXCEPTION") + SET(CINT_C_DEFINITIONS "-DG__REGEXP -DG__UNIX -DG__SHAREDLIB -DG__ROOT -DG__REDIRECTIO -DG__OSFDLL -DG__STD_EXCEPTION") + + SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "${CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS} -flat_namespace -single_module -undefined dynamic_lookup") + SET(CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS "${CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS} -flat_namespace -single_module -undefined dynamic_lookup") + + set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -bind_at_load -m64") + set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -bind_at_load -m64") + + # Select flags. + set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g") + set(CMAKE_CXX_FLAGS_RELEASE "-O2") + set(CMAKE_CXX_FLAGS_DEBUG "-g -O2 -fno-reorder-blocks -fno-schedule-insns -fno-inline") + set(CMAKE_CXX_FLAGS_DEBUGFULL "-g3 -fno-inline") + set(CMAKE_CXX_FLAGS_PROFILE "-g3 -fno-inline -ftest-coverage -fprofile-arcs") + set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g") + set(CMAKE_C_FLAGS_RELEASE "-O2") + set(CMAKE_C_FLAGS_DEBUG "-g -O2 -fno-reorder-blocks -fno-schedule-insns -fno-inline") + set(CMAKE_C_FLAGS_DEBUGFULL "-g3 -fno-inline") + set(CMAKE_C_FLAGS_PROFILE "-g3 -fno-inline -ftest-coverage -fprofile-arcs") + + #settings for cint + set(CPPPREP "${CMAKE_CXX_COMPILER} -E -C") + set(CXXOUT "-o ") + set(EXEEXT "") + set(SOEXT "so") + else() MESSAGE(FATAL_ERROR "There is no setup for this compiler up to now. Don't know waht to do. Stop cmake at this point.") - endif (CMAKE_COMPILER_IS_GNUCXX) + endif() + + #---Set Linker flags---------------------------------------------------------------------- + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath,@loader_path/../lib") + else (CMAKE_SYSTEM_NAME MATCHES Darwin) MESSAGE(FATAL_ERROR "There is no setup for this this Apple system up to now. Don't know waht to do. Stop cmake at this point.") diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt index d8fdb00d1b1..82575311253 100644 --- a/core/CMakeLists.txt +++ b/core/CMakeLists.txt @@ -9,6 +9,7 @@ ROOT_USE_PACKAGE(core/meta) ROOT_USE_PACKAGE(core/textinput) ROOT_USE_PACKAGE(core/unix) ROOT_USE_PACKAGE(core/winnt) +ROOT_USE_PACKAGE(core/macosx) ROOT_USE_PACKAGE(core/zip) ROOT_USE_PACKAGE(core/lzma) ROOT_USE_PACKAGE(cint/cint) @@ -30,6 +31,9 @@ endif() if(WIN32) add_subdirectory(winnt) endif() +if(cocoa) + add_subdirectory(macosx) +endif() add_subdirectory(zip) add_subdirectory(lzma) add_subdirectory(base) @@ -44,6 +48,7 @@ set(CORE_DICTIONARIES ${META_DICTIONARY} ${UNIX_DICTIONARY} ${WINNT_DICTIONARY} + ${MACOSX_DICTIONARY} ${BASE1_DICTIONARY} ${BASE2_DICTIONARY} ${BASE3_DICTIONARY} @@ -61,6 +66,9 @@ endif() if(WIN32) set_source_files_properties(${WINNT_DICTIONARY} GENERATED) endif() +if(cocoa) + set_source_files_properties(${MACOSX_DICTIONARY} GENERATED) +endif() set_source_files_properties(${BASE1_DICTIONARY} GENERATED) set_source_files_properties(${BASE2_DICTIONARY} GENERATED) set_source_files_properties(${BASE3_DICTIONARY} GENERATED) @@ -107,8 +115,18 @@ include_directories( ${INCLUDE_DIRECTORIES}) if(WIN32) set(corelinklibs shell32.lib WSock32.lib Oleaut32.lib Iphlpapi.lib) +elseif(cocoa) + set(corelinklibs "-framework Cocoa") endif() +#---Add flags to compile ObjC++ +foreach(src ${LibCore_SRCS}) + if(${src} MATCHES "\\.mm$") + set_source_files_properties(${src} COMPILE_FLAGS "-ObjC++ -std=c++11") + endif() +endforeach() + + ROOT_LINKER_LIBRARY(Core ${LibCore_SRCS} ${CORE_DICTIONARIES} LIBRARIES ${PCRE_LIBRARIES} ${LZMA_LIBRARIES} ${ZLIB_LIBRARY} ${CMAKE_DL_LIBS} ${CMAKE_THREAD_LIBS_INIT} ${corelinklibs} DEPENDENCIES Cint) @@ -119,6 +137,9 @@ endif() if(WIN32) add_dependencies(Core WINNT_DICTIONARY) endif() +if(cocoa) + add_dependencies(Core MACOSX_DICTIONARY) +endif() add_dependencies(Core TEXTINPUT_DICTIONARY) if(builtin_pcre) add_dependencies(Core PCRE) diff --git a/core/macosx/CMakeLists.txt b/core/macosx/CMakeLists.txt new file mode 100644 index 00000000000..a03e315eef9 --- /dev/null +++ b/core/macosx/CMakeLists.txt @@ -0,0 +1,15 @@ +############################################################################ +# CMakeLists.txt file for building ROOT core/macosx package +############################################################################ + +ROOT_GLOB_SOURCES(sources ${CMAKE_CURRENT_SOURCE_DIR}/src/*.mm) + +ROOT_GENERATE_DICTIONARY(G__Macosx T*.h LINKDEF LinkDef.h) +set(MACOSX_DICTIONARY ${CMAKE_CURRENT_BINARY_DIR}/G__Macosx.cxx PARENT_SCOPE) + +set(LibCore_SRCS ${LibCore_SRCS} ${sources} PARENT_SCOPE) +set(LibCore_LINKDEF ${LibCore_LINKDEF} ${CMAKE_CURRENT_SOURCE_DIR}/inc/LinkDef.h PARENT_SCOPE) +add_custom_target(MACOSX_DICTIONARY DEPENDS G__Macosx.cxx) +set_target_properties(MACOSX_DICTIONARY PROPERTIES FOLDER Dictionaries) + +ROOT_INSTALL_HEADERS() diff --git a/graf2d/CMakeLists.txt b/graf2d/CMakeLists.txt index 1a6cf03d5c2..1074ec24153 100644 --- a/graf2d/CMakeLists.txt +++ b/graf2d/CMakeLists.txt @@ -23,5 +23,9 @@ endif() if(fitsio) add_subdirectory(fitsio) endif() +if(cocoa) + add_subdirectory(quartz) + add_subdirectory(cocoa) +endif() diff --git a/graf2d/cocoa/CMakeLists.txt b/graf2d/cocoa/CMakeLists.txt new file mode 100644 index 00000000000..556051cb836 --- /dev/null +++ b/graf2d/cocoa/CMakeLists.txt @@ -0,0 +1,15 @@ +############################################################################ +# CMakeLists.txt file for building ROOT graf2d/cocoa package +# @author Pere Mato, CERN +############################################################################ + +ROOT_USE_PACKAGE(graf2d/quartz) +ROOT_USE_PACKAGE(gui/gui) + +add_definitions("-ObjC++ -std=c++11") + +ROOT_GENERATE_DICTIONARY(G__Cocoa T*.h LINKDEF LinkDef.h) +ROOT_GENERATE_ROOTMAP(GCocoa LINKDEF LinkDef.h DEPENDENCIES Gui GQuartz ) +ROOT_LINKER_LIBRARY(GCocoa *.mm G__Cocoa.cxx LIBRARIES "-framework Cocoa" DEPENDENCIES Gui GQuartz ) +ROOT_INSTALL_HEADERS() + diff --git a/graf2d/quartz/CMakeLists.txt b/graf2d/quartz/CMakeLists.txt new file mode 100644 index 00000000000..32851e99349 --- /dev/null +++ b/graf2d/quartz/CMakeLists.txt @@ -0,0 +1,12 @@ +############################################################################ +# CMakeLists.txt file for building ROOT graf2d/quartz package +# @author Pere Mato, CERN +############################################################################ + +add_definitions("-ObjC++ -std=c++11") + +ROOT_GENERATE_DICTIONARY(G__Quartz "" LINKDEF LinkDef.h) +ROOT_GENERATE_ROOTMAP(GQuartz LINKDEF LinkDef.h DEPENDENCIES ) +ROOT_LINKER_LIBRARY(GQuartz *.mm G__Quartz.cxx LIBRARIES "-framework Cocoa" DEPENDENCIES ) +ROOT_INSTALL_HEADERS() + diff --git a/graf3d/eve/CMakeLists.txt b/graf3d/eve/CMakeLists.txt index 93240208cc4..72ee0852833 100644 --- a/graf3d/eve/CMakeLists.txt +++ b/graf3d/eve/CMakeLists.txt @@ -30,6 +30,6 @@ ROOT_GENERATE_DICTIONARY(G__Eve1 ${headers1} LINKDEF src/SolarisCCDictHack.h Lin ROOT_GENERATE_DICTIONARY(G__Eve2 ${headers2} LINKDEF src/SolarisCCDictHack.h LinkDef2.h) ROOT_GENERATE_ROOTMAP(Eve LINKDEF LinkDef1.h LinkDef2.h DEPENDENCIES Geom GeomPainter Graf3d Gui Gpad Graf Hist Physics Ged EG Tree TreePlayer RGL RIO Rint MathCore) -ROOT_LINKER_LIBRARY(Eve *.cxx G__Eve1.cxx G__Eve2.cxx LIBRARIES ${OPENGL_LIBRARIES} GLEW Cint Core DEPENDENCIES Geom Ged RGL Physics EG) +ROOT_LINKER_LIBRARY(Eve *.cxx G__Eve1.cxx G__Eve2.cxx LIBRARIES ${OPENGL_LIBRARIES} GLEW FTGL Cint Core DEPENDENCIES Geom Ged RGL Physics EG) ROOT_INSTALL_HEADERS() \ No newline at end of file diff --git a/graf3d/gviz3d/CMakeLists.txt b/graf3d/gviz3d/CMakeLists.txt index 3172c986263..bc3feeb6fa8 100644 --- a/graf3d/gviz3d/CMakeLists.txt +++ b/graf3d/gviz3d/CMakeLists.txt @@ -9,5 +9,5 @@ ROOT_USE_PACKAGE(geom/geom) ROOT_GENERATE_DICTIONARY(G__Gviz3d *.h LINKDEF LinkDef.h) ROOT_GENERATE_ROOTMAP(Gviz3d LINKDEF LinkDef.h DEPENDENCIES Gui Ged Gpad Graf3d Graf Geom RGL) -ROOT_LINKER_LIBRARY(Gviz3d *.cxx G__Gviz3d.cxx LIBRARIES DEPENDENCIES Gui Ged Geom RGL) +ROOT_LINKER_LIBRARY(Gviz3d *.cxx G__Gviz3d.cxx LIBRARIES GLEW FTGL DEPENDENCIES Gui Ged Geom RGL) ROOT_INSTALL_HEADERS() diff --git a/net/net/CMakeLists.txt b/net/net/CMakeLists.txt index 3e885ec7669..37a863f6555 100644 --- a/net/net/CMakeLists.txt +++ b/net/net/CMakeLists.txt @@ -18,7 +18,7 @@ else() add_definitions(-DR__SSL) endif() -if(NOT crypto) +if(NOT ssl AND NOT CRYPTLIBS) list(REMOVE_ITEM headers TAS3File.h) list(REMOVE_ITEM headers TGSFile.h) list(REMOVE_ITEM headers THTTPMessage.h) -- GitLab