diff --git a/tools/package/CMakeLists.txt b/tools/package/CMakeLists.txt new file mode 100644 index 00000000..6f13db58 --- /dev/null +++ b/tools/package/CMakeLists.txt @@ -0,0 +1,55 @@ +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) + + if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") OR (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")) + list(APPEND PSEMEK_CXX_FLAGS "-Wl,-rpath,." "-static-libgcc" "-static-libstdc++") + endif() + + 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 "${FILE}" 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) + + add_custom_command(TARGET ${target} POST_BUILD + COMMAND ${CMAKE_STRIP} $) + + add_custom_command(TARGET ${target} POST_BUILD + COMMAND zip ${CMAKE_CURRENT_SOURCE_DIR}/${target}-${PSEMEK_PACKAGE_SUFFIX}.zip -j $ ${PSEMEK_COPY_FILES} + ) + + endif() +endfunction() diff --git a/tools/package/bin/psemek-package-linux b/tools/package/bin/psemek-package-linux new file mode 100755 index 00000000..f34003cb --- /dev/null +++ b/tools/package/bin/psemek-package-linux @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +PROJECT_DIR=`realpath "${1}"` + +docker run -u 1000 -v "${PROJECT_DIR}":/home/work-source psemek:package-linux /home/package.sh + +echo Packaging finished