
#########################################################
# Building of the libsumo-FMI2 library
set (libsumofmi2_SRCS
  fmi2Functions.c
  sumo2fmi_bridge.c
  libsumocpp2c.cpp
)

add_library(libsumofmi2 SHARED ${libsumofmi2_SRCS})
set_target_properties(libsumofmi2 PROPERTIES PREFIX "")
set_target_properties(libsumofmi2 PROPERTIES OUTPUT_NAME libsumofmi2${BINARY_SUFFIX})
set_target_properties(libsumofmi2 PROPERTIES OUTPUT_NAME_DEBUG libsumofmi2${BINARY_SUFFIX}D)
target_link_libraries(libsumofmi2 libsumocpp)

#########################################################
# Building of the ZIP Archive with the model description
# and the static library for the FMU

# The Library needs to go to a specific folder
# (binaries/win32 or binaries/win64 or ...)
# We need to determine the name for this folder

if (CMAKE_SIZEOF_VOID_P EQUAL 8)
    set(BITS "64")
else()
    set(BITS "32")
endif()

if (WIN32)
    if (CMAKE_GENERATOR_PLATFORM STREQUAL "Win32")
        set(BITS "32")
    endif()
    if (CMAKE_GENERATOR_PLATFORM STREQUAL "x64")
        set(BITS "64")
    endif()
    set(PLATFORM_FOLDER_NAME "win${BITS}")
endif()

if (UNIX AND NOT APPLE)
    set(PLATFORM_FOLDER_NAME "linux${BITS}")
endif()

if (APPLE)
    set(PLATFORM_FOLDER_NAME "darwin${BITS}")
endif()

# Set the temporary folder name to collect the contents for the ZIP archive
set(ZIP_BUILD_FOLDER_NAME "sumo-fmi2")

# The command and parameters for rm / remove_directory change in cmake
if (${CMAKE_VERSION} VERSION_GREATER 3.17.0)
    set(remove_command "rm" "-rf")
else()
    set(remove_command "remove_directory")
endif()

###########################################################
# Define the custom target FMI to have all of these files
# built (also as part of ALL - but of course this happens
# only when FMI is enabled)
add_custom_target(prepfmi
  # Remove the old directory (if exists) and create a new directory
  COMMAND ${CMAKE_COMMAND} -E ${remove_command} "${ZIP_BUILD_FOLDER_NAME}"
  COMMAND ${CMAKE_COMMAND} -E make_directory "${ZIP_BUILD_FOLDER_NAME}"
  # Copy the XML file with the model description
  COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/modelDescription.xml" "${ZIP_BUILD_FOLDER_NAME}"
  # Create the folder for the binaries and copy the library
  COMMAND ${CMAKE_COMMAND} -E make_directory "${ZIP_BUILD_FOLDER_NAME}/binaries/${PLATFORM_FOLDER_NAME}/"
  COMMAND ${CMAKE_COMMAND} -E copy ${SUMO_LIBRARIES_RELEASE_DLL} $<TARGET_FILE:libsumofmi2> $<TARGET_FILE:libsumocpp> "${ZIP_BUILD_FOLDER_NAME}/binaries/${PLATFORM_FOLDER_NAME}/"
)
add_dependencies(prepfmi libsumofmi2)

# native zip seems to work better
FIND_PROGRAM(ZIP_EXECUTABLE zip)
if (NOT VERBOSE_SUB)
    set(ZIP_OPTS "-q")
endif ()
if (ZIP_EXECUTABLE)
    add_custom_target(fmi ALL WORKING_DIRECTORY "${ZIP_BUILD_FOLDER_NAME}" COMMAND "${ZIP_EXECUTABLE}" ${ZIP_OPTS} -r "$<TARGET_FILE_DIR:libsumofmi2>/${ZIP_BUILD_FOLDER_NAME}$<$<CONFIG:Debug>:D>-${PLATFORM_FOLDER_NAME}.fmu" .)
else()
    add_custom_target(fmi ALL COMMAND ${CMAKE_COMMAND} -E chdir "${ZIP_BUILD_FOLDER_NAME}" ${CMAKE_COMMAND} -E tar "cf" "$<TARGET_FILE_DIR:libsumofmi2>/${ZIP_BUILD_FOLDER_NAME}$<$<CONFIG:Debug>:D>-${PLATFORM_FOLDER_NAME}.fmu" --format=zip ".")
endif()
add_dependencies(fmi prepfmi)
