File: MakeLib.cmake

package info (click to toggle)
simgrid 4.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 39,192 kB
  • sloc: cpp: 124,913; ansic: 66,744; python: 8,560; java: 6,773; fortran: 6,079; f90: 5,123; xml: 4,587; sh: 2,194; perl: 1,436; makefile: 111; lisp: 49; javascript: 7; sed: 6
file content (192 lines) | stat: -rw-r--r-- 6,667 bytes parent folder | download
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()