1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192
|
### Make Libs
# On macOS, specify that rpath is useful to look for the dependencies
# See https://gitlab.kitware.com/cmake/community/wikis/doc/cmake/RPATH-handling and Java.cmake
set(CMAKE_MACOSX_RPATH TRUE)
if(APPLE OR ("${CMAKE_SYSTEM_NAME}" STREQUAL "FreeBSD"))
SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) # When installed, use system path
set(CMAKE_SKIP_BUILD_RPATH FALSE) # When executing from build tree, take the lib from the build path if exists
set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) # When executing from build tree, take the lib from the system path if exists
# add the current location of libsimgrid-java.dynlib as a location for libsimgrid.dynlib
# (useful when unpacking the native libraries from the jarfile)
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_FULL_LIBDIR}")
endif()
###############################
# Declare the library content #
###############################
if (${SIMGRID_HAVE_JAVA} AND ${merge_java_in_libsimgrid})
message(STATUS "Java: merge all code within the libsimgrid library.")
set(simgrid_sources ${simgrid_sources} ${CMAKE_CURRENT_BINARY_DIR}/include/org_simgrid_s4u_simgridJNI.h ${SIMGRID_JAVA_C_SOURCES})
endif()
# Declare the simgrid library
add_library(simgrid SHARED ${simgrid_sources})
set_target_properties(simgrid PROPERTIES VERSION ${libsimgrid_version})
# The library can obviously use the internal headers
set_property(TARGET simgrid
APPEND PROPERTY INCLUDE_DIRECTORIES "${INTERNAL_INCLUDES}")
add_dependencies(simgrid maintainer_files)
if(${enable_sthread})
add_library(sthread SHARED ${STHREAD_SRC})
set_target_properties(sthread PROPERTIES VERSION ${libsimgrid_version})
set_property(TARGET sthread
APPEND PROPERTY INCLUDE_DIRECTORIES "${INTERNAL_INCLUDES}")
target_link_libraries(sthread simgrid)
set(STHREAD_PATH "${CMAKE_INSTALL_FULL_LIBDIR}/libsthread.so")
else()
set(EXTRA_DIST ${EXTRA_DIST} ${STHREAD_SRC})
endif()
if(SIMGRID_HAVE_MC)
add_executable(simgrid-mc ${MC_SIMGRID_MC_SRC})
target_link_libraries(simgrid-mc simgrid)
set_target_properties(simgrid-mc
PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
set_property(TARGET simgrid-mc
APPEND PROPERTY INCLUDE_DIRECTORIES "${INTERNAL_INCLUDES}")
install(TARGETS simgrid-mc # install that binary without breaking the rpath on Mac
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}/)
add_dependencies(tests-mc simgrid-mc)
if(${enable_sthread})
add_dependencies(tests-mc sthread)
endif()
endif()
# Compute the dependencies of SimGrid
#####################################
# search for dlopen
if("${CMAKE_SYSTEM_NAME}" MATCHES "kFreeBSD|Linux|SunOS")
find_library(DL_LIBRARY dl)
endif()
mark_as_advanced(DL_LIBRARY)
if (HAVE_BOOST_CONTEXTS)
target_link_libraries(simgrid ${Boost_CONTEXT_LIBRARY})
endif()
if (HAVE_BOOST_STACKTRACE_BACKTRACE)
target_link_libraries(simgrid ${Boost_STACKTRACE_BACKTRACE_LIBRARY})
endif()
if (HAVE_STD_STACKTRACE)
# Listing specifically stdc++ is needed at least on MUSL when compiling C code against libsimgrid, as GCC does not provide stdc++ by default
target_link_libraries(simgrid stdc++exp stdc++)
endif()
if (HAVE_BOOST_ADDR2LINE_BACKTRACE)
target_link_libraries(simgrid ${Boost_STACKTRACE_ADDR2LINE_LIBRARY})
endif()
if(CMAKE_USE_PTHREADS_INIT)
target_link_libraries(simgrid ${CMAKE_THREAD_LIBS_INIT})
endif()
if(HAVE_PAPI)
SET(SIMGRID_DEP "${SIMGRID_DEP} -lpapi")
endif()
if(HAVE_GRAPHVIZ)
if(HAVE_CGRAPH_LIB)
SET(SIMGRID_DEP "${SIMGRID_DEP} -lcgraph")
else()
if(HAVE_AGRAPH_LIB)
SET(SIMGRID_DEP "${SIMGRID_DEP} -lagraph -lcdt")
endif()
endif()
endif()
if(SIMGRID_HAVE_JSON)
target_link_libraries(simgrid nlohmann_json::nlohmann_json)
endif()
if(NOT ${DL_LIBRARY} STREQUAL "")
SET(SIMGRID_DEP "${SIMGRID_DEP} ${DL_LIBRARY}")
endif()
if(HAVE_POSIX_GETTIME)
SET(SIMGRID_DEP "${SIMGRID_DEP} -lrt")
endif()
if("${CMAKE_SYSTEM_NAME}" STREQUAL "FreeBSD")
set(SIMGRID_DEP "${SIMGRID_DEP} -lprocstat")
endif()
# Compute the dependencies of SMPI
##################################
if(enable_smpi)
add_executable(smpimain src/smpi/smpi_main.c)
target_link_libraries(smpimain simgrid)
set_target_properties(smpimain
PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib/simgrid)
install(TARGETS smpimain # install that binary without breaking the rpath on Mac
RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR}/simgrid)
add_dependencies(tests smpimain)
add_executable(smpireplaymain src/smpi/smpi_replay_main.cpp)
target_compile_options(smpireplaymain PRIVATE -fpic)
target_link_libraries(smpireplaymain simgrid -fpic -shared)
set_target_properties(smpireplaymain
PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib/simgrid)
install(TARGETS smpireplaymain # install that binary without breaking the rpath on Mac
RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR}/simgrid)
add_dependencies(tests smpireplaymain)
if(SMPI_FORTRAN)
if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU")
SET(SIMGRID_DEP "${SIMGRID_DEP} -lgfortran")
elseif(CMAKE_Fortran_COMPILER_ID MATCHES "Intel")
SET(SIMGRID_DEP "${SIMGRID_DEP} -lifcore")
elseif(CMAKE_Fortran_COMPILER_ID MATCHES "PGI|Flang")
SET(SIMGRID_DEP "${SIMGRID_DEP} -lflang")
if("${CMAKE_SYSTEM}" MATCHES "FreeBSD")
set(SIMGRID_DEP "${SIMGRID_DEP} -lexecinfo")
if ("${CMAKE_SYSTEM_VERSION}" STRGREATER_EQUAL "12")
set(SIMGRID_DEP "${SIMGRID_DEP} -lpgmath")
endif()
if ("${CMAKE_SYSTEM_VERSION}" MATCHES "12\\.1")
set(SIMGRID_DEP "${SIMGRID_DEP} -lomp")
endif()
endif()
endif()
endif()
endif()
if(enable_smpi AND APPLE)
set(SIMGRID_DEP "${SIMGRID_DEP} -Wl,-U -Wl,_smpi_simulated_main")
endif()
# See https://github.com/HewlettPackard/foedus_code/blob/master/foedus-core/cmake/FindGccAtomic.cmake
FIND_LIBRARY(GCCLIBATOMIC_LIBRARY NAMES atomic atomic.so.1 libatomic.so.1
HINTS
$ENV{HOME}/local/lib64
$ENV{HOME}/local/lib
/usr/local/lib64
/usr/local/lib
/opt/local/lib64
/opt/local/lib
/usr/lib64
/usr/lib
/lib64
/lib
)
# Fix a FTBFS on armel, mips, mipsel and friends (Debian's #872881)
if(CMAKE_COMPILER_IS_GNUCC AND GCCLIBATOMIC_LIBRARY)
set(SIMGRID_DEP "${SIMGRID_DEP} -Wl,--as-needed -latomic -Wl,--no-as-needed")
endif()
mark_as_advanced(GCCLIBATOMIC_LIBRARY)
target_link_libraries(simgrid ${SIMGRID_DEP})
# Dependencies from maintainer mode
###################################
if(enable_maintainer_mode)
add_dependencies(simgrid smpi_generated_headers_call_location_tracing)
endif()
|