option(PSEMEK_PACKAGE_MODE "Enable packaging mode" OFF) set(PSEMEK_PACKAGE_ROOT "" CACHE PATH "Packaging environment root") if(PSEMEK_PACKAGE_MODE) if(WIN32) set(PSEMEK_PACKAGE_SUFFIX_RAW win) elseif(UNIX AND (NOT APPLE)) set(PSEMEK_PACKAGE_SUFFIX_RAW linux) elseif(UNIX AND APPLE) set(PSEMEK_PACKAGE_SUFFIX_RAW mac) else() message(FATAL "Uknown system for packaging") endif() set(PSEMEK_PACKAGE_SUFFIX ${PSEMEK_PACKAGE_SUFFIX_RAW} CACHE INTERNAL "Packaging suffix" FORCE) set(PSEMEK_PACKAGE_LINK_FLAGS_RAW) if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") OR (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")) list(APPEND PSEMEK_PACKAGE_LINK_FLAGS_RAW "-static-libgcc" "-static-libstdc++") endif() set(PSEMEK_PACKAGE_LINK_FLAGS ${PSEMEK_PACKAGE_LINK_FLAGS_RAW} CACHE INTERNAL "Packaging CXX flags" FORCE) set(PSEMEK_COPY_FILES_RAW) # SDL2 find_package(SDL2 REQUIRED) list(LENGTH SDL2_LIBRARIES SDL2_LIBRARIES_COUNT) if(NOT (SDL2_LIBRARIES_COUNT EQUAL 1)) message(FATAL "SDL2_LIBRARIES contains more than 1 entry: ${SDL2_LIBRARIES}") message(FATAL "Aborting packaging") endif() list(APPEND PSEMEK_COPY_FILES_RAW ${SDL2_LIBRARIES}) set(PSEMEK_COPY_FILES_DIR "${CMAKE_CURRENT_BINARY_DIR}/copy_files") set(PSEMEK_COPY_FILES_ABSOLUTE) foreach(FILE ${PSEMEK_COPY_FILES_RAW}) get_filename_component(REALPATH "${FILE}" REALPATH) get_filename_component(NAME "${REALPATH}" NAME) configure_file("${REALPATH}" "${PSEMEK_COPY_FILES_DIR}/${NAME}" COPYONLY) list(APPEND PSEMEK_COPY_FILES_ABSOLUTE "${PSEMEK_COPY_FILES_DIR}/${NAME}") endforeach() set(PSEMEK_COPY_FILES ${PSEMEK_COPY_FILES_ABSOLUTE} CACHE INTERNAL "List of external files to copy into the package" FORCE) endif() function(psemek_package_target target) if(PSEMEK_PACKAGE_MODE) target_link_options(${target} PUBLIC ${PSEMEK_PACKAGE_LINK_FLAGS}) set_target_properties(${target} PROPERTIES BUILD_RPATH "." ) add_custom_command(TARGET ${target} POST_BUILD COMMAND ${CMAKE_STRIP} $ COMMAND chrpath -r . $ COMMAND zip ${CMAKE_CURRENT_SOURCE_DIR}/${target}-${PSEMEK_PACKAGE_SUFFIX}.zip -j $ ${PSEMEK_COPY_FILES} ) endif() endfunction()