Skip to content
Snippets Groups Projects
CMakeLists.txt 3.33 KiB
Newer Older
  • Learn to ignore specific revisions
  • cmake_minimum_required(VERSION 3.0)
    
    message ("Before enable language")
    
    enable_language(Fortran)
    
    Martin Mrovec's avatar
    Martin Mrovec committed
    if (WIN32)
    
    	message ("cmake for " ${CMAKE_Fortran_COMPILER})
    
    Martin Mrovec's avatar
    Martin Mrovec committed
    	set (CMAKE_FORTRAN_COMPILER ${CMAKE_Fortran_COMPILER})
    	project(4Neuro FORTRAN)
    else ()
    	project(4Neuro)
    
    Martin Mrovec's avatar
    Martin Mrovec committed
    endif ()
    
    
    #-------------------------------#
    # Default installation location #
    #-------------------------------#
    # Linux: /usr/local
    
    Martin Mrovec's avatar
    Martin Mrovec committed
    # Windows: c:/Program Files
    
    
    #------------#
    # Build type #
    #------------#
    # Default: Release
    # Others: None, Debug
    if (NOT CMAKE_BUILD_TYPE)
      set (CMAKE_BUILD_TYPE RELEASE CACHE STRING
          "Choose the type of build, options are: None Debug Release."
          FORCE)
    endif (NOT CMAKE_BUILD_TYPE)
    
    #--------------------------------#
    # Setting Fortran compiler flags #
    #--------------------------------#
    # TODO overit, jak rychle jede kod s funroll-loops
    # funroll-all-loops a bez prepinace
    
    set(standard "-std=f2008")
    
    
    #--------------------#
    # Automatic settings #
    #--------------------#
    
    Martin Mrovec's avatar
    Martin Mrovec committed
    get_filename_component (Fortran_COMPILER_NAME ${CMAKE_Fortran_COMPILER} NAME)
    
    
    # Processing user variables
    
    Martin Mrovec's avatar
    Martin Mrovec committed
    if (WITH_TIME_PROFILING)
        add_definitions(-DTIME_PROFILING)
    endif()
    
    
    # C & CXX compilers
    
    if (WIN32)
      set (CMAKE_C_COMPILER gcc)
      set (CMAKE_CXX_COMPILER g++)
    endif()
    
    
    # Write compiler variables to the file - to pass them to test script
    file(WRITE compilers.env "export FC=${CMAKE_Fortran_COMPILER}\n")
    file(APPEND compilers.env "export CXX=${CMAKE_CXX_COMPILER}\n")
    file(APPEND compilers.env "export CC=${CMAKE_C_COMPILER}\n")
    
    # Fortran compiler detection
    
    Martin Mrovec's avatar
    Martin Mrovec committed
    message ("Fortran compiler name: " ${Fortran_COMPILER_NAME})
    message ("CMAKE_Fortran_COMPILER full path: " ${CMAKE_Fortran_COMPILER})
    message ("Fortran compiler: " ${Fortran_COMPILER_NAME})
    message ("Build type:" ${CMAKE_BUILD_TYPE})
    
    
    if (Fortran_COMPILER_NAME MATCHES "gfortran.*")
      # gfortran
    
    Martin Mrovec's avatar
    Martin Mrovec committed
      set (CMAKE_Fortran_FLAGS_RELEASE "-funroll-loops -fno-f2c -O3 ${standard} -cpp")
      set (CMAKE_Fortran_FLAGS_DEBUG   "-fno-f2c -O0 -g ${standard} -cpp")
    
    elseif (Fortran_COMPILER_NAME MATCHES "ifort.*")
      # ifort (untested)
    
    Martin Mrovec's avatar
    Martin Mrovec committed
      set (CMAKE_Fortran_FLAGS_RELEASE "-f77rtl -O3 ${standard} -cpp")
      set (CMAKE_Fortran_FLAGS_DEBUG   "-f77rtl -O0 -g ${standard} -cpp")
    
    elseif (Fortran_COMPILER_NAME MATCHES "g77")
      # g77
    
    Martin Mrovec's avatar
    Martin Mrovec committed
      set (CMAKE_Fortran_FLAGS_RELEASE "-funroll-loops -fno-f2c -O3 -m32 ${standard} -cpp")
      set (CMAKE_Fortran_FLAGS_DEBUG   "-fno-f2c -O0 -g -m32 ${standard} -cpp")
    
    else (Fortran_COMPILER_NAME MATCHES "gfortran.*")
      message ("No optimized Fortran compiler flags are known, we just try -O2...")
    
    Martin Mrovec's avatar
    Martin Mrovec committed
      set (CMAKE_Fortran_FLAGS_RELEASE "-O2 ${standard} -cpp")
      set (CMAKE_Fortran_FLAGS_DEBUG   "-O0 -g ${standard} -cpp")
    
    endif (Fortran_COMPILER_NAME MATCHES "gfortran.*")
    
    #----------------#
    # User variables #
    #----------------#
    set(SRC_DIR src)
    set(BUILD_DIR build)
    set(LIB_DIR lib)
    
    #--------------------#
    # Building libraries #
    #--------------------#
    link_directories("${LIB_DIR}")
    include_directories("${BUILD_DIR}/${LIB_DIR}")
    add_subdirectory("${SRC_DIR}" "${LIB_DIR}")
    
    
    if (WIN32)
    	add_executable(connection_test ${SRC_DIR}/connection_test.f90)
    	target_link_libraries(connection_test connection_m neuron_dummy_m)
    	message ("Windows")
    else ()
    	add_executable(connection_test.out ${SRC_DIR}/connection_test.f90)
    	target_link_libraries(connection_test.out connection_m neuron_dummy_m)
    	message ("Not Windows")
    endif ()