diff --git a/CMakeLists.txt b/CMakeLists.txt index e160fbb5..e7873a24 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -203,7 +203,7 @@ set(HAVE_CONFIG_H 1 CACHE INTERNAL "config.h is available") configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h) #--- propagate to the sub-directories ----------------------------------------- -## as35 add_subdirectory(src) +add_subdirectory(src) #--- write summary of the installation message("") diff --git a/cmake/FindDKS.cmake b/cmake/FindDKS.cmake index 2822ceee..9280dc89 100644 --- a/cmake/FindDKS.cmake +++ b/cmake/FindDKS.cmake @@ -10,6 +10,7 @@ find_path(DKS_INCLUDE_DIR DKSBaseMuSR.h HINTS "/usr/include" "/opt/local/include" "$ENV{HOME}/Apps/DKS/exec/include" + "$ENV{HOME}/Applications/DKS/exec/include" ) # find position of DKSBaseMuSR.h from the end @@ -21,6 +22,7 @@ unset(substr) find_library(DKS_LIBRARY dksshared HINTS "/usr/lib" "/usr/lib64" "/opt/local/lib" "$ENV{HOME}/Apps/DKS/exec/lib" + "$ENV{HOME}/Applications/DKS/exec/lib" ) # as35 set here the DKS version explicitly. This is VERY ugly and should be fixed diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 00000000..9b740691 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,179 @@ +#--- add further sub-directories ---------------------------------------------- +add_subdirectory(classes) +#[==[ +add_subdirectory(external) +if (Qt5Core_FOUND) + add_subdirectory(musredit_qt5) +elseif (Qt4_FOUND) + add_subdirectory(musredit) +elseif (QT_FOUND) + add_subdirectory(musrgui) +endif (Qt5Core_FOUND) +#]==] + +#--- define the musrfit libs -------------------------------------------------- +set(MUSRFIT_LIBS ${MUSRFIT_LIBS} mud) +set(MUSRFIT_LIBS ${MUSRFIT_LIBS} TMusrRunHeader) +set(MUSRFIT_LIBS ${MUSRFIT_LIBS} TLemRunHeader) +set(MUSRFIT_LIBS ${MUSRFIT_LIBS} Class_MuSR_PSI) +if (nexus) + set(MUSRFIT_LIBS ${MUSRFIT_LIBS} ${NEXUS_LIBRARY}) + set(MUSRFIT_LIBS ${MUSRFIT_LIBS} PNeXus) +endif (nexus) +set(MUSRFIT_LIBS ${MUSRFIT_LIBS} PMusr) + +#--- start create git-revision.h ---------------------------------------------- +configure_file( + ${CMAKE_SOURCE_DIR}/cmake/configure_musrfit_version_file.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/configure_musrfit_version_file.cmake + @ONLY +) + +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/git-revision.h + COMMAND ${CMAKE_COMMAND} -P + ${CMAKE_CURRENT_BINARY_DIR}/configure_musrfit_version_file.cmake + DEPENDS + ${CMAKE_CURRENT_BINARY_DIR}/configure_musrfit_version_file.cmake + ${CMAKE_SOURCE_DIR}/cmake/git-revision.h.in + COMMENT "Configuring git-revision.h" + VERBATIM +) + +add_custom_target( + configure_musrfit_version ALL + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/git-revision.h +) +#--- end create git-revision.h ------------------------------------------------ + +#--- add all executables ------------------------------------------------------ +add_executable(any2many git-revision.h any2many.cpp) +target_compile_options(any2many BEFORE PRIVATE "-DHAVE_CONFIG_H") +target_include_directories(any2many + BEFORE PRIVATE + $ + $ + $ + $ +) +target_link_libraries(any2many ${ROOT_LIBRARIES} ${MUSRFIT_LIBS}) + +add_executable(dump_header git-revision.h dump_header.cpp) +target_compile_options(dump_header BEFORE PRIVATE "-DHAVE_CONFIG_H") +target_include_directories(dump_header + BEFORE PRIVATE + $ + $ + $ + $ + $ + $ + $ + $ + $ + $ +) +target_link_libraries(dump_header ${ROOT_LIBRARIES} ${MUSRFIT_LIBS}) + +add_executable(msr2data git-revision.h msr2data.cpp) +target_compile_options(msr2data BEFORE PRIVATE "-DHAVE_CONFIG_H") +target_include_directories(msr2data + BEFORE PRIVATE + $ + $ + $ + $ +) +target_link_libraries(msr2data ${ROOT_LIBRARIES} ${MUSRFIT_LIBS}) + +add_executable(msr2msr msr2msr.cpp) +target_link_libraries(msr2msr ${ROOT_LIBRARIES}) + +add_executable(musrfit git-revision.h musrfit.cpp) +target_compile_options(musrfit BEFORE PRIVATE "-DHAVE_CONFIG_H") +target_include_directories(musrfit + BEFORE PRIVATE + $ + $ + $ + $ + $ +) +target_link_libraries(musrfit ${ROOT_LIBRARIES} ${MUSRFIT_LIBS}) + +add_executable(musrFT git-revision.h musrFT.cpp) +target_compile_options(musrFT BEFORE PRIVATE "-DHAVE_CONFIG_H") +target_include_directories(musrFT + BEFORE PRIVATE + $ + $ + $ + $ +) +target_link_libraries(musrFT ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} ${MUSRFIT_LIBS}) + +add_executable(musrRootValidation git-revision.h musrRootValidation.cpp) +target_compile_options(musrRootValidation BEFORE PRIVATE "-DHAVE_CONFIG_H") +target_include_directories(musrRootValidation + BEFORE PRIVATE + $ + $ + $ + $ + $ +) +target_link_libraries(musrRootValidation ${ROOT_LIBRARIES} ${MUSRFIT_LIBS} ${LIBXML2_LIBRARIES}) + +add_executable(musrt0 git-revision.h musrt0.cpp) +target_compile_options(musrt0 BEFORE PRIVATE "-DHAVE_CONFIG_H") +target_include_directories(musrt0 + BEFORE PRIVATE + $ + $ + $ + $ +) +target_link_libraries(musrt0 ${ROOT_LIBRARIES} ${MUSRFIT_LIBS}) + +add_executable(musrview git-revision.h musrview.cpp) +target_compile_options(musrview BEFORE PRIVATE "-DHAVE_CONFIG_H") +target_include_directories(musrview + BEFORE PRIVATE + $ + $ + $ + $ +) +target_link_libraries(musrview ${FFTW3_LIBRARY} ${ROOT_LIBRARIES} ${MUSRFIT_LIBS}) + +add_executable(write_musrRoot_runHeader git-revision.h write_musrRoot_runHeader.cpp) +target_compile_options(write_musrRoot_runHeader BEFORE PRIVATE "-DHAVE_CONFIG_H") +target_include_directories(write_musrRoot_runHeader + BEFORE PRIVATE + $ + $ + $ + $ + $ + $ +) +target_link_libraries(write_musrRoot_runHeader ${ROOT_LIBRARIES} ${MUSRFIT_LIBS} ${LIBXML2_LIBRARIES}) + +#--- installation info -------------------------------------------------------- +install( + TARGETS + any2many + dump_header + msr2data + msr2msr + musrfit + musrFT + musrRootValidation + musrt0 + musrview + write_musrRoot_runHeader + RUNTIME DESTINATION + bin +) + + diff --git a/src/classes/CMakeLists.txt b/src/classes/CMakeLists.txt new file mode 100644 index 00000000..88cf4061 --- /dev/null +++ b/src/classes/CMakeLists.txt @@ -0,0 +1,176 @@ +#--- build the PMusr and PUserFcnBase libs ------------------------------------ + +#--- generate necessary dictionaries ------------------------------------------ +set(MUSRFIT_INC ${CMAKE_SOURCE_DIR}/src/include) + +root_generate_dictionary( + PFourierCanvasDict + -I${FFTW3_INCLUDE_DIR} ${MUSRFIT_INC}/PFourierCanvas.h + LINKDEF ${MUSRFIT_INC}/PFourierCanvasLinkDef.h +) +root_generate_dictionary( + PMusrCanvasDict + -I${FFTW3_INCLUDE_DIR} ${MUSRFIT_INC}/PMusrCanvas.h + LINKDEF ${MUSRFIT_INC}/PMusrCanvasLinkDef.h +) +root_generate_dictionary( + PMusrT0Dict + -I${FFTW3_INCLUDE_DIR} ${MUSRFIT_INC}/PMusrT0.h + LINKDEF ${MUSRFIT_INC}/PMusrT0LinkDef.h +) +root_generate_dictionary( + PStartupHandlerDict + -I${FFTW3_INCLUDE_DIR} ${MUSRFIT_INC}/PStartupHandler.h + LINKDEF ${MUSRFIT_INC}/PStartupHandlerLinkDef.h +) +root_generate_dictionary( + PUserFcnBaseDict + -I${FFTW3_INCLUDE_DIR} ${MUSRFIT_INC}/PUserFcnBase.h + LINKDEF ${MUSRFIT_INC}/PUserFcnBaseLinkDef.h +) + +#--- create pkg-config info --------------------------------------------------- +set(prefix "${CMAKE_INSTALL_PREFIX}") +set(exec_prefix "\$\{prefix\}") +set(libdir "\$\{exec_prefix\}/lib") +set(includedir "\$\{prefix\}/include") +set(MUSR_VERSION "1.2.0") +set(MUSR_LIBRARY_NAME "PMusr") +configure_file("PMusr.pc.in" "PMusr.pc" @ONLY) +set(USERFCN_LIBRARY_NAME "PUserFcnBase") +configure_file("PUserFcnBase.pc.in" "PUserFcnBase.pc" @ONLY) + +#--- lib creation ------------------------------------------------------------- +add_library(PMusr SHARED + PFitter.cpp + PFitterFcn.cpp + PFitterFcnDKS.cpp + PFourier.cpp + PFourierCanvas.cpp + PFourierCanvasDict.cxx + PMusrCanvas.cpp + PMusrCanvasDict.cxx + PFunction.cpp + PFunctionHandler.cpp + PMsr2Data.cpp + PMsrHandler.cpp + PMusrCanvas.cpp + PMusrCanvasDict.cxx + PMusr.cpp + PMusrT0.cpp + PMusrT0Dict.cxx + PPrepFourier.cpp + PRunAsymmetry.cpp + PRunAsymmetryRRF.cpp + PRunBase.cpp + PRunDataHandler.cpp + PRunListCollection.cpp + PRunMuMinus.cpp + PRunNonMusr.cpp + PRunSingleHisto.cpp + PRunSingleHistoRRF.cpp + PStartupHandler.cpp + PStartupHandlerDict.cxx + PTheory.cpp +) +#--- make sure that the include directory is found ---------------------------- +target_include_directories( + PMusr BEFORE PRIVATE + $ + $ + $ + $ + $ + $ + $ + $ + $ +) + +add_library(PUserFcnBase SHARED + PUserFcnBase.cpp + PUserFcnBaseDict.cxx +) +#--- make sure that the include directory is found ---------------------------- +target_include_directories( + PUserFcnBase BEFORE PRIVATE $ +) +#--- add OpenMP compile options if needed ------------------------------------- +if (OpenMP_FOUND) + target_compile_options(PMusr PUBLIC ${OpenMP_CXX_FLAGS}) +endif (OpenMP_FOUND) + +#--- add library dependencies ------------------------------------------------- +set(DependOnLibs ${ROOT_LIBARIES}) +set(DependOnLibs ${DependOnLibs} ${FFTW3_LIBRARY}) +set(DependOnLibs ${DependOnLibs} PUserFcnBase) +set(DependOnLibs ${DependOnLibs} mud) +set(DependOnLibs ${DependOnLibs} TMusrRunHeader) +set(DependOnLibs ${DependOnLibs} TLemRunHeader) +set(DependOnLibs ${DependOnLibs} Class_MuSR_PSI) +if (nexus) + set(DependOnLibs ${DependOnLibs} ${LIBNEXUS_LIBRARY}) + set(DependOnLibs ${DependOnLibs} PNeXus) +endif (nexus) +if (OpenMP_FOUND) + if (OpenMP_CXX_LIBRARIES) + set(DependOnLibs ${DependOnLibs} ${OpenMP_CXX_LIBRARIES}) + else (OpenMP_CXX_LIBRARIES) + set(DependOnLibs ${DependOnLibs} ${OpenMP_CXX_FLAGS}) # for older cmake OpenMP_CXX_LIBRARIES is not defined + endif (OpenMP_CXX_LIBRARIES) +endif (OpenMP_FOUND) +if (DKS_FOUND) + if (CUDA_FOUND) + set(DependOnLibs ${DependOnLibs} ${CUDA_LIBRARIES} ${CUDA_CUBLAS_LIBRARIES}) + endif (CUDA_FOUND) + if (NOT CUDA_FOUND AND OpenCL_FOUND) + set(DependOnLibs ${DependOnLibs} ${OpenCL_LIBRARIES}) + endif (NOT CUDA_FOUND AND OpenCL_FOUND) + set(DependOnLibs ${DependOnLibs} ${DKS_LIBRARY}) +endif (DKS_FOUND) + +target_link_libraries(PUserFcnBase ${ROOT_LIBRARIES}) +target_link_libraries(PMusr ${DependOnLibs}) + +#--- install PUserFcnBase solib ----------------------------------------------- +install(TARGETS PUserFcnBase DESTINATION lib) + +#--- install PMusr solib ------------------------------------------------------ +install(TARGETS PMusr DESTINATION lib) + +#--- install root pcm's and rootmaps ------------------------------------------ +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/libPFourierCanvasDict_rdict.pcm + ${CMAKE_CURRENT_BINARY_DIR}/libPFourierCanvasDict.rootmap + ${CMAKE_CURRENT_BINARY_DIR}/libPMusrCanvasDict_rdict.pcm + ${CMAKE_CURRENT_BINARY_DIR}/libPMusrCanvasDict.rootmap + ${CMAKE_CURRENT_BINARY_DIR}/libPMusrT0Dict_rdict.pcm + ${CMAKE_CURRENT_BINARY_DIR}/libPMusrT0Dict.rootmap + ${CMAKE_CURRENT_BINARY_DIR}/libPStartupHandlerDict_rdict.pcm + ${CMAKE_CURRENT_BINARY_DIR}/libPStartupHandlerDict.rootmap + ${CMAKE_CURRENT_BINARY_DIR}/libPUserFcnBaseDict_rdict.pcm + ${CMAKE_CURRENT_BINARY_DIR}/libPUserFcnBaseDict.rootmap + DESTINATION lib +) + +#--- install headers ---------------------------------------------------------- +#--- only install headers needed for classes with dictionary +install( + FILES ${MUSRFIT_INC}/PFourierCanvas.h + ${MUSRFIT_INC}/PFourier.h + ${MUSRFIT_INC}/PMusrCanvas.h + ${MUSRFIT_INC}/PMusr.h + ${MUSRFIT_INC}/PMusrT0.h + ${MUSRFIT_INC}/PRunListCollection.h + ${MUSRFIT_INC}/PStartupHandler.h + ${MUSRFIT_INC}/PUserFcnBase.h + DESTINATION include +) + +#--- install pkg-config info -------------------------------------------------- +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/PUserFcnBase.pc + ${CMAKE_CURRENT_BINARY_DIR}/PMusr.pc + DESTINATION lib/pkgconfig +) +