From 5750f2e84eaa3ed61ced797ae6d39ecd2e3b5820 Mon Sep 17 00:00:00 2001 From: flagarde Date: Fri, 31 Jul 2020 18:06:57 +0800 Subject: [PATCH 1/4] Add options --- CMakeLists.txt | 103 ++++++++++++++++++----------------------- src/cpp/CMakeLists.txt | 81 ++++++++++++++++---------------- 2 files changed, 86 insertions(+), 98 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9ad4c5d40..2d2a2cf57 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,17 +5,39 @@ CMAKE_MINIMUM_REQUIRED( VERSION 2.8 FATAL_ERROR ) ######################################################## - - # project name PROJECT( LCIO ) - # project version SET( LCIO_VERSION_MAJOR 2 ) SET( LCIO_VERSION_MINOR 14 ) SET( LCIO_VERSION_PATCH 2 ) +# lcio.jar +OPTION( INSTALL_JAR "Set to OFF to skip build/install lcio.jar" OFF ) +OPTION( BUILD_APPS "Set to OFF to skip build/install of apps" ON ) +# allow C++ only builds +OPTION( LCIO_GENERATE_HEADERS "Set to OFF to use pre-generated headers (no java needed)" OFF) +OPTION( BUILD_ROOTDICT "Set to ON to build ROOT dictionary" OFF ) +OPTION( BUILD_FORTRAN "Set to OFF to skip build/install Fortran codes" ON ) +OPTION( BUILD_F77_TESTJOBS "Set to ON to build LCIO F77 testjobs" OFF ) +OPTION( INSTALL_DOC "Set to OFF to skip build/install Documentation" OFF ) +OPTION( BUILD_LCIO_EXAMPLES "Set to ON to build LCIO examples" ON ) +OPTION( INSTALL_PYTHON "Set to ON to install python codes" ON) + +include(CheckLanguage) + +if(BUILD_FORTRAN OR BUILD_F77_TESTJOBS) + check_language(Fortran) + if(CMAKE_Fortran_COMPILER) + enable_language(Fortran) + else() + message(STATUS "No Fortran support !!!") + set(BUILD_FORTRAN OFF) + set(BUILD_F77_TESTJOBS OFF) + endif() +endif() + ### set correct LCIO version in relevant files ############################ configure_file ( @@ -51,8 +73,6 @@ configure_file ( "${PROJECT_SOURCE_DIR}/pom.xml" ) - - ### DEPENDENCIES ############################################################ LIST( APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake ) @@ -66,25 +86,19 @@ IF( NOT CMAKE_CXX_STANDARD ) ENDIF() SET( CMAKE_CXX_STANDARD_REQUIRED ON ) -# lcio.jar -OPTION( INSTALL_JAR "Set to OFF to skip build/install lcio.jar" OFF ) - -# allow C++ only builds -OPTION( LCIO_GENERATE_HEADERS "Set to OFF to use pre-generated headers (no java needed)" OFF) - IF( INSTALL_JAR ) - INSTALL( CODE "EXECUTE_PROCESS( COMMAND ${CMAKE_BUILD_TOOL} jar)" ) - INSTALL( FILES "${PROJECT_SOURCE_DIR}/lib/lcio.jar" DESTINATION lib )# OPTIONAL ) + INSTALL( CODE "EXECUTE_PROCESS( COMMAND ${CMAKE_BUILD_TOOL} jar)" ) + INSTALL( FILES "${PROJECT_SOURCE_DIR}/lib/lcio.jar" DESTINATION lib )# OPTIONAL ) ENDIF() - # install python stuff (for out-of-source-build) -INSTALL( DIRECTORY "${PROJECT_SOURCE_DIR}/src/python/" DESTINATION python ) -INSTALL( DIRECTORY "${PROJECT_SOURCE_DIR}/examples/python/" DESTINATION python/examples ) - +IF( INSTALL_PYTHON ) + INSTALL( DIRECTORY "${PROJECT_SOURCE_DIR}/src/python/" DESTINATION python ) + INSTALL( DIRECTORY "${PROJECT_SOURCE_DIR}/examples/python/" DESTINATION python/examples ) +ENDIF() # JAVA (needed to generate c++ headers) -if( INSTALL_JAR OR LCIO_GENERATE_HEADERS) +if( INSTALL_JAR OR LCIO_GENERATE_HEADERS ) INCLUDE( FindJAVA4LCIO ) IF( NOT JAVA_FOUND ) MESSAGE( FATAL_ERROR "Failed to find Java! Please set JAVA_DIR=/path/to/java \n" @@ -92,14 +106,11 @@ if( INSTALL_JAR OR LCIO_GENERATE_HEADERS) ENDIF() endif() - # ROOT -OPTION( BUILD_ROOTDICT "Set to ON to build ROOT dictionary" OFF ) IF( BUILD_ROOTDICT ) - FIND_PACKAGE( ROOT 6.04 REQUIRED ) # look for ROOT versions >= 5.27.06 + FIND_PACKAGE( ROOT 6.04 REQUIRED ) # look for ROOT versions >= 6.04 ENDIF() - # DCAP #OPTION( LCIO_DCAP "Set to ON to build LCIO with dcap (dCache) support" OFF ) #MESSAGE( STATUS "LCIO_DCAP = ${LCIO_DCAP}" ) @@ -121,7 +132,6 @@ ENDIF() # ENDIF() #ENDIF() - # UNIX SHELL (needed for calling LCIO_ENV_INIT script) FIND_PROGRAM( SH sh ${CYGWIN_INSTALL_PATH}/bin /bin /usr/bin /usr/local/bin /sbin ) MARK_AS_ADVANCED( SH ) @@ -129,16 +139,12 @@ IF( NOT SH ) MESSAGE( FATAL_ERROR "unix shell not found" ) ENDIF() - - - ### GENERATE ENVIRONMENT SCRIPT FOR CALLING ANT ############################# SET( LCIO_ENV_INIT "${PROJECT_BINARY_DIR}/lcio_env_init.sh" ) IF( NOT EXISTS ${LCIO_ENV_INIT} ) MESSAGE( STATUS "Generating lcio_env_init.sh ..." ) - FILE( WRITE "${LCIO_ENV_INIT}" " #!/usr/bin/env bash @@ -152,7 +158,6 @@ export PATH=${PROJECT_SOURCE_DIR}/tools:${JAVA_BIN_PATH}:$PATH eval $* " ) - ENDIF() # Deal with SIO @@ -211,7 +216,6 @@ SET( LCIO_AID_HEADERS_DIR "${LCIO_SOURCE_DIR}/src/aid" ) ### BUILD JAR LIBRARY (USING ANT OR MAVEN) ################################## if( INSTALL_JAR ) - SET( LCIO_JAVA_BUILD_CMD "ant aid" ) OPTION( LCIO_JAVA_USE_MAVEN "Set to ON to build/install lcio.jar using maven" OFF ) IF( LCIO_JAVA_USE_MAVEN ) @@ -225,8 +229,6 @@ if( INSTALL_JAR ) COMMENT "Building lcio jar library..." ) - - # custom command to generate jar library ADD_CUSTOM_COMMAND( OUTPUT "${PROJECT_SOURCE_DIR}/lib/lcio.jar" @@ -237,8 +239,6 @@ if( INSTALL_JAR ) # create target to create jar library ADD_CUSTOM_TARGET( jar DEPENDS ${PROJECT_SOURCE_DIR}/lib/lcio.jar ) - - ### REMOVE RESTS GENERATED BY ANT IN THE SOURCE-TREE ######################## @@ -259,56 +259,45 @@ if( INSTALL_JAR ) COMMAND ${SH} "${LCIO_ENV_INIT}" ant clean WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" ) - - + ADD_DEPENDENCIES( uninstall uninstall_headers ) endif() ### SUBDIRECTORIES ########################################################## -# replaced by standard cmake variable BUILD_TESTING -#OPTION( BUILD_LCIO_TESTS "Set to ON to build LCIO tests under src/cpp/src/TESTS" OFF ) - -OPTION( BUILD_LCIO_EXAMPLES "Set to ON to build LCIO examples" ON ) - # lcio library ADD_SUBDIRECTORY( ./src/cpp lcio ) - - # fortran examples -OPTION( BUILD_F77_TESTJOBS "Set to ON to build LCIO F77 testjobs" OFF ) IF( BUILD_F77_TESTJOBS ) ADD_SUBDIRECTORY( ./src/f77 f77 ) ENDIF() - # directory containing lcio tests -ADD_SUBDIRECTORY( ./tests ) - +IF( BUILD_TESTING ) + ADD_SUBDIRECTORY( ./tests ) +ENDIF() ### DOCUMENTATION ########################################################### - -OPTION( INSTALL_DOC "Set to OFF to skip build/install Documentation" OFF ) IF( INSTALL_DOC ) ADD_SUBDIRECTORY( ./doc ) INSTALL( CODE "EXECUTE_PROCESS( COMMAND ${CMAKE_BUILD_TOOL} doc)" ) ENDIF() - - # display some variables and write them to cache DISPLAY_STD_VARIABLES() -MESSAGE( STATUS "BUILD_LCIO_EXAMPLES = ${BUILD_LCIO_EXAMPLES}" ) -MESSAGE( STATUS "BUILD_F77_TESTJOBS = ${BUILD_F77_TESTJOBS}" ) -MESSAGE( STATUS "BUILD_ROOTDICT = ${BUILD_ROOTDICT}" ) MESSAGE( STATUS "INSTALL_JAR = ${INSTALL_JAR}" ) -MESSAGE( STATUS "LCIO_JAVA_USE_MAVEN = ${LCIO_JAVA_USE_MAVEN}" ) -MESSAGE( STATUS "SIO_PRINT_DEBUG = ${SIO_PRINT_DEBUG}" ) -MESSAGE( STATUS "" ) - +MESSAGE( STATUS "BUILD_APPS = ${BUILD_APPS}" ) +MESSAGE( STATUS "LCIO_GENERATE_HEADERS = ${LCIO_GENERATE_HEADERS}" ) +MESSAGE( STATUS "BUILD_ROOTDICT = ${BUILD_ROOTDICT}" ) +MESSAGE( STATUS "BUILD_FORTRAN = ${BUILD_FORTRAN}" ) +MESSAGE( STATUS "BUILD_F77_TESTJOBS = ${BUILD_F77_TESTJOBS}" ) +MESSAGE( STATUS "INSTALL_DOC = ${INSTALL_DOC}" ) +MESSAGE( STATUS "BUILD_LCIO_EXAMPLES = ${BUILD_LCIO_EXAMPLES}" ) +MESSAGE( STATUS "INSTALL_PYTHON = ${INSTALL_PYTHON}" ) +MESSAGE( STATUS "BUILD_TESTING = ${BUILD_TESTING}" ) # generate and install following configuration files GENERATE_PACKAGE_CONFIGURATION_FILES( LCIOConfig.cmake LCIOConfigVersion.cmake ) diff --git a/src/cpp/CMakeLists.txt b/src/cpp/CMakeLists.txt index 1b38d103b..20b043d21 100644 --- a/src/cpp/CMakeLists.txt +++ b/src/cpp/CMakeLists.txt @@ -3,8 +3,8 @@ # @author Frank Gaede, DESY # @author Jan Engels, DESY ################################# - -SET( LCIO_CPPFORT_SRCS +IF( BUILD_FORTRAN ) + SET( LCIO_CPPFORT_SRCS ./src/CPPFORT/HEPEVT.cc ./src/CPPFORT/lccah.cc ./src/CPPFORT/lcclu.cc @@ -29,7 +29,21 @@ SET( LCIO_CPPFORT_SRCS ./src/CPPFORT/lcvec.cc ./src/CPPFORT/lcvtx.cc ./src/CPPFORT/lcwrt.cc -) + ) + #---- special flags for cfortran code : -------- + SET_SOURCE_FILES_PROPERTIES( + ${LCIO_CPPFORT_SRCS} PROPERTIES + COMPILE_FLAGS "-Df2cFortran -Wno-unused" + ) + # ---------------------------------------------------------------------------- + # ------- libraries lcio + lcioF77 ------------------------------------------- + ADD_LIBRARY( lcioF77 STATIC ${LCIO_CPPFORT_SRCS} ) + INSTALL( TARGETS lcioF77 DESTINATION lib ) + TARGET_LINK_LIBRARIES( lcioF77 lcio ) +ENDIF() + + + SET( LCIO_IMPL_SRCS ./src/IMPL/AccessChecked.cc @@ -226,7 +240,9 @@ if( LCIO_GENERATE_HEADERS ) SET( IO_AID_HEADERS_DEP_LIST ${AID_HEADERS_LIST};${CXX_HEADERS_LIST} ) # make source files depend on generated header files + aid files - SET_SOURCE_FILES_PROPERTIES( ${LCIO_CPPFORT_SRCS} PROPERTIES OBJECT_DEPENDS "${EVENT_AID_HEADERS_DEP_LIST};${IO_AID_HEADERS_DEP_LIST}" ) + IF( BUILD_FORTRAN ) + SET_SOURCE_FILES_PROPERTIES( ${LCIO_CPPFORT_SRCS} PROPERTIES OBJECT_DEPENDS "${EVENT_AID_HEADERS_DEP_LIST};${IO_AID_HEADERS_DEP_LIST}" ) + ENDIF() SET_SOURCE_FILES_PROPERTIES( ${LCIO_IMPL_SRCS} PROPERTIES OBJECT_DEPENDS "${EVENT_AID_HEADERS_DEP_LIST}" ) SET_SOURCE_FILES_PROPERTIES( ${LCIO_IOIMPL_SRCS} PROPERTIES OBJECT_DEPENDS "${IO_AID_HEADERS_DEP_LIST}" ) # ---------------------------------------------------------------------------- @@ -249,16 +265,6 @@ endif() #ADD_DEFINITIONS( "-Wall -ansi -pedantic" ) #ADD_DEFINITIONS( "-Wno-long-long -fno-strict-aliasing" ) -#---- special flags for cfortran code : -------- -SET_SOURCE_FILES_PROPERTIES( - ${LCIO_CPPFORT_SRCS} PROPERTIES - COMPILE_FLAGS "-Df2cFortran -Wno-unused" -) -# ---------------------------------------------------------------------------- - - - - # -------- include directories ----------------------------------------------- INCLUDE_DIRECTORIES( BEFORE "${LCIO_AID_HEADERS_OUTPUT_DIR}" ) INCLUDE_DIRECTORIES( BEFORE "${LCIO_CXX_HEADERS_DIR}" ) @@ -279,12 +285,6 @@ INSTALL_DIRECTORY( ${LCIO_CXX_HEADERS_DIR}/ DESTINATION include INSTALL_DIRECTORY( ${LCIO_AID_HEADERS_OUTPUT_DIR}/ DESTINATION include ) # ---------------------------------------------------------------------------- - - -# ------- libraries lcio + lcioF77 ------------------------------------------- -ADD_LIBRARY( lcioF77 STATIC ${LCIO_CPPFORT_SRCS} ) -INSTALL( TARGETS lcioF77 DESTINATION lib ) - ADD_SHARED_LIBRARY( lcio ${LCIO_IMPL_SRCS} ${LCIO_IOIMPL_SRCS} @@ -296,14 +296,11 @@ INSTALL_SHARED_LIBRARY( lcio DESTINATION lib ) TARGET_LINK_LIBRARIES( lcio ${CMAKE_THREAD_LIBS_INIT} ) TARGET_LINK_LIBRARIES( lcio ${SIO_LIBRARIES} ) -TARGET_LINK_LIBRARIES( lcioF77 lcio ) + ADD_CUSTOM_TARGET( lib DEPENDS lcio lcioF77 ) # ---------------------------------------------------------------------------- - - - # -------- rootdict library -------------------------------------------------- IF( BUILD_ROOTDICT ) @@ -458,24 +455,26 @@ MACRO( ADD_LCIO_EXAMPLE file ) INSTALL( TARGETS bin_${file} DESTINATION bin ) ENDMACRO() -ADD_LCIO_EXAMPLE( simjob ) -ADD_LCIO_EXAMPLE( anajob ) -ADD_LCIO_EXAMPLE( recjob ) -ADD_LCIO_EXAMPLE( dumpevent ) -ADD_LCIO_EXAMPLE( copyfix ) -ADD_LCIO_EXAMPLE( stdhepjob ) -ADD_LCIO_EXAMPLE( stdhepjob_new ) -ADD_LCIO_EXAMPLE( addRandomAccess ) -ADD_LCIO_EXAMPLE( lcio_event_counter ) -ADD_LCIO_EXAMPLE( lcio_check_col_elements ) -ADD_LCIO_EXAMPLE( lcio_split_file ) -ADD_LCIO_EXAMPLE( lcio_merge_files ) -ADD_LCIO_EXAMPLE( readmcparticles ) -ADD_LCIO_EXAMPLE( lcio_performance ) -ADD_LCIO_EXAMPLE( lcio_parallel_read ) -ADD_LCIO_EXAMPLE( lcio_parallel_processing ) +IF( BUILD_APPS ) + ADD_LCIO_EXAMPLE( simjob ) + ADD_LCIO_EXAMPLE( anajob ) + ADD_LCIO_EXAMPLE( recjob ) + ADD_LCIO_EXAMPLE( dumpevent ) + ADD_LCIO_EXAMPLE( copyfix ) + ADD_LCIO_EXAMPLE( stdhepjob ) + ADD_LCIO_EXAMPLE( stdhepjob_new ) + ADD_LCIO_EXAMPLE( addRandomAccess ) + ADD_LCIO_EXAMPLE( lcio_event_counter ) + ADD_LCIO_EXAMPLE( lcio_check_col_elements ) + ADD_LCIO_EXAMPLE( lcio_split_file ) + ADD_LCIO_EXAMPLE( lcio_merge_files ) + ADD_LCIO_EXAMPLE( readmcparticles ) + ADD_LCIO_EXAMPLE( lcio_performance ) + ADD_LCIO_EXAMPLE( lcio_parallel_read ) + ADD_LCIO_EXAMPLE( lcio_parallel_processing ) +ENDIF() -IF( BUILD_ROOTDICT ) +IF( BUILD_ROOTDICT AND BUILD_LCIO_EXAMPLES ) ADD_LCIO_EXAMPLE( lcio_io_benchmark ) TARGET_LINK_LIBRARIES( bin_lcio_io_benchmark ${ROOT_LIBRARIES} ) ENDIF() From 92bd5bd567011371de00b9cb8ab9d5150785719d Mon Sep 17 00:00:00 2001 From: flagarde Date: Fri, 31 Jul 2020 18:08:08 +0800 Subject: [PATCH 2/4] Supress some noise --- src/cpp/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cpp/CMakeLists.txt b/src/cpp/CMakeLists.txt index 20b043d21..07dceaa64 100644 --- a/src/cpp/CMakeLists.txt +++ b/src/cpp/CMakeLists.txt @@ -344,7 +344,7 @@ IF( BUILD_ROOTDICT ) LIST( REMOVE_ITEM UTIL_CXX_HEADERS_LIST ${exclude_headers} ) - MESSAGE( STATUS "********************* UTIL_CXX_HEADERS_LIST: ${UTIL_CXX_HEADERS_LIST}" ) + #MESSAGE( STATUS "********************* UTIL_CXX_HEADERS_LIST: ${UTIL_CXX_HEADERS_LIST}" ) # generate dictionary source files! GEN_ROOT_DICT_LINKDEF_HEADER( UTIL ${UTIL_CXX_HEADERS_LIST} ) @@ -355,7 +355,7 @@ IF( BUILD_ROOTDICT ) # MESSAGE( STATUS "********************* IO_CXX_HEADERS_LIST: ${IO_CXX_HEADERS_LIST}" ) # MESSAGE( STATUS "********************* EVENT_CXX_HEADERS_LIST: ${EVENT_CXX_HEADERS_LIST}" ) - MESSAGE( STATUS "********************* UTIL_CXX_HEADERS_LIST: ${UTIL_CXX_HEADERS_LIST}" ) + # MESSAGE( STATUS "********************* UTIL_CXX_HEADERS_LIST: ${UTIL_CXX_HEADERS_LIST}" ) # ------ generate dictionary for IO classes -------------------- From 6144ce84f0ba593e2d5c921e8c213044dbaf8413 Mon Sep 17 00:00:00 2001 From: flagarde Date: Fri, 31 Jul 2020 18:14:18 +0800 Subject: [PATCH 3/4] CMAKE_CXX_STANDARD need at least CMake 3.1 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2d2a2cf57..deb98a7f8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ # cmake file for building LCIO # @author Frank Gaede, DESY # @author Jan Engels, DESY -CMAKE_MINIMUM_REQUIRED( VERSION 2.8 FATAL_ERROR ) +CMAKE_MINIMUM_REQUIRED( VERSION 3.1 FATAL_ERROR ) ######################################################## # project name From 980c58c7c111bc73dd65565fbb09caad0ef32ec5 Mon Sep 17 00:00:00 2001 From: flagarde Date: Fri, 31 Jul 2020 18:14:51 +0800 Subject: [PATCH 4/4] this is an app not an example --- src/cpp/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/CMakeLists.txt b/src/cpp/CMakeLists.txt index 07dceaa64..c0b5fe324 100644 --- a/src/cpp/CMakeLists.txt +++ b/src/cpp/CMakeLists.txt @@ -474,7 +474,7 @@ IF( BUILD_APPS ) ADD_LCIO_EXAMPLE( lcio_parallel_processing ) ENDIF() -IF( BUILD_ROOTDICT AND BUILD_LCIO_EXAMPLES ) +IF( BUILD_ROOTDICT AND BUILD_APPS ) ADD_LCIO_EXAMPLE( lcio_io_benchmark ) TARGET_LINK_LIBRARIES( bin_lcio_io_benchmark ${ROOT_LIBRARIES} ) ENDIF()