Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Build simgrid.jar.
[simgrid.git] / buildtools / Cmake / MakeLib.cmake
index bce4151..5a477cc 100644 (file)
@@ -23,6 +23,37 @@ if(enable_smpi)
   endif()
 endif()
 
+if(enable_java)
+  add_library(SG_java SHARED ${JMSG_C_SRC})
+  set_target_properties(SG_java PROPERTIES VERSION ${libSG_java_version})
+  get_target_property(COMMON_INCLUDES SG_java INCLUDE_DIRECTORIES)
+  set_target_properties(SG_java PROPERTIES
+    INCLUDE_DIRECTORIES "${COMMON_INCLUDES};${JNI_INCLUDE_DIRS}")
+  add_dependencies(SG_java simgrid)
+
+  if(WIN32)
+    get_target_property(SIMGRID_LIB_NAME_NAME SG_java LIBRARY_OUTPUT_NAME)
+    set_target_properties(SG_java PROPERTIES
+      LINK_FLAGS "-Wl,--subsystem,windows,--kill-at ${SIMGRID_LIB_NAME}"
+      PREFIX "")
+    find_path(PEXPORTS_PATH NAMES pexports.exe PATHS NO_DEFAULT_PATHS)
+    message(STATUS "pexports: ${PEXPORTS_PATH}")
+    if(PEXPORTS_PATH)
+      add_custom_command(TARGET SG_java POST_BUILD
+        COMMAND ${PEXPORTS_PATH}/pexports.exe ${CMAKE_BINARY_DIR}/SG_java.dll > ${CMAKE_BINARY_DIR}/SG_java.def)
+    endif(PEXPORTS_PATH)
+  else()
+    target_link_libraries(SG_java simgrid)
+  endif()
+
+  set(CMAKE_JAVA_TARGET_OUTPUT_NAME simgrid)
+  set(MANIFEST_FILE ${CMAKE_HOME_DIRECTORY}/src/bindings/java/MANIFEST.MF)
+  add_jar(SG_java_jar ${JMSG_JAVA_SRC})
+  add_custom_command(TARGET SG_java_jar POST_BUILD
+    DEPENDS ${MANIFEST_FILE}
+    COMMAND ${JAVA_ARCHIVE} -uvmf ${MANIFEST_FILE} ${CMAKE_BINARY_DIR}/${CMAKE_JAVA_TARGET_OUTPUT_NAME}.jar)
+endif()
+
 add_dependencies(simgrid maintainer_files)
 
 # if supernovaeing, we need some depends to make sure that the source gets generated