Implement packaging for windows
This commit is contained in:
parent
d3fb1a5b12
commit
ae282d796c
7 changed files with 125 additions and 69 deletions
|
|
@ -16,6 +16,7 @@ if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") OR (CMAKE_CXX_COMPILER_ID STREQUAL "Cl
|
||||||
list(APPEND PSEMEK_CXX_FLAGS -Wall -Werror -Wextra -pedantic)
|
list(APPEND PSEMEK_CXX_FLAGS -Wall -Werror -Wextra -pedantic)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
add_subdirectory(package)
|
||||||
add_subdirectory(tools)
|
add_subdirectory(tools)
|
||||||
add_subdirectory(libs)
|
add_subdirectory(libs)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -59,16 +59,16 @@ static int TestPointer(const PROC pTest)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static PROC WinGetProcAddress(const char *name)
|
static void *WinGetProcAddress(const char *name)
|
||||||
{
|
{
|
||||||
HMODULE glMod = NULL;
|
HMODULE glMod = NULL;
|
||||||
PROC pFunc = wglGetProcAddress((LPCSTR)name);
|
PROC pFunc = wglGetProcAddress((LPCSTR)name);
|
||||||
if(TestPointer(pFunc))
|
if(TestPointer(pFunc))
|
||||||
{
|
{
|
||||||
return pFunc;
|
return (void*)pFunc;
|
||||||
}
|
}
|
||||||
glMod = GetModuleHandleA("OpenGL32.dll");
|
glMod = GetModuleHandleA("OpenGL32.dll");
|
||||||
return (PROC)GetProcAddress(glMod, (LPCSTR)name);
|
return (void*)GetProcAddress(glMod, (LPCSTR)name);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define IntGetProcAddress(name) WinGetProcAddress(name)
|
#define IntGetProcAddress(name) WinGetProcAddress(name)
|
||||||
|
|
|
||||||
100
package/CMakeLists.txt
Normal file
100
package/CMakeLists.txt
Normal file
|
|
@ -0,0 +1,100 @@
|
||||||
|
option(PSEMEK_PACKAGE_MODE "Enable packaging mode" OFF)
|
||||||
|
|
||||||
|
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)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
function(psemek_add_executable_impl target build link_psemek package)
|
||||||
|
if(${build})
|
||||||
|
add_executable(${target} ${ARGN})
|
||||||
|
|
||||||
|
if(${link_psemek})
|
||||||
|
target_link_libraries(${target} PUBLIC psemek)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(${package})
|
||||||
|
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} $<TARGET_FILE:${target}>
|
||||||
|
COMMAND chrpath -r . $<TARGET_FILE:${target}>
|
||||||
|
COMMAND zip ${CMAKE_CURRENT_SOURCE_DIR}/${target}-${PSEMEK_PACKAGE_SUFFIX}.zip -j $<TARGET_FILE:${target}> ${PSEMEK_PACKAGE_COPY_FILES}
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(psemek_add_executable target)
|
||||||
|
if((NOT PSEMEK_PACKAGE_MODE) OR PSEMEK_PACKAGE_TARGET)
|
||||||
|
add_executable(${target} ${ARGN})
|
||||||
|
|
||||||
|
target_link_libraries(${target} PUBLIC psemek)
|
||||||
|
|
||||||
|
if(PSEMEK_PACKAGE_MODE)
|
||||||
|
target_link_options(${target} PUBLIC ${PSEMEK_PACKAGE_LINK_FLAGS})
|
||||||
|
|
||||||
|
if(UNIX AND (NOT APPLE))
|
||||||
|
set_target_properties(${target} PROPERTIES
|
||||||
|
BUILD_RPATH "."
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_custom_command(TARGET ${target} POST_BUILD
|
||||||
|
COMMAND ${CMAKE_STRIP} $<TARGET_FILE:${target}>
|
||||||
|
)
|
||||||
|
|
||||||
|
if(UNIX AND (NOT APPLE))
|
||||||
|
add_custom_command(TARGET ${target} POST_BUILD
|
||||||
|
COMMAND chrpath -r . $<TARGET_FILE:${target}>
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_custom_command(TARGET ${target} POST_BUILD
|
||||||
|
COMMAND zip ${CMAKE_CURRENT_SOURCE_DIR}/${target}-${PSEMEK_PACKAGE_SUFFIX}.zip -j $<TARGET_FILE:${target}> ${PSEMEK_PACKAGE_COPY_FILES}
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(psemek_add_build_tool target link_psemek)
|
||||||
|
if((NOT PSEMEK_PACKAGE_MODE) OR PSEMEK_PACKAGE_HOST)
|
||||||
|
add_executable(${target} ${ARGN})
|
||||||
|
|
||||||
|
if(${link_psemek})
|
||||||
|
target_link_libraries(${target} PUBLIC psemek)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(PSEMEK_PACKAGE_MODE)
|
||||||
|
install(TARGETS ${target} RUNTIME DESTINATION bin)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
find_file(_LOCATION ${target} PATHS "${PSEMEK_PACKAGE_TOOLS_PATH}/bin")
|
||||||
|
message(STATUS "Found ${target}: ${_LOCATION}")
|
||||||
|
if(NOT _LOCATION)
|
||||||
|
message(FATAL "Could not locate ${target} build tool in ${PSEMEK_PACKAGE_TOOLS_PATH}")
|
||||||
|
endif()
|
||||||
|
add_executable(${target} IMPORTED GLOBAL)
|
||||||
|
set_target_properties(${target} PROPERTIES IMPORTED_LOCATION ${_LOCATION})
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
@ -7,6 +7,6 @@ fi
|
||||||
|
|
||||||
PROJECT_DIR=`realpath "${1}"`
|
PROJECT_DIR=`realpath "${1}"`
|
||||||
|
|
||||||
docker run -u 1000 -v "${PROJECT_DIR}":/home/work-source psemek:package-linux /home/package.sh
|
docker run -u 1000 -v "${PROJECT_DIR}":/home/work-source lisyarus/psemek:package-linux /home/package.sh
|
||||||
|
|
||||||
echo Packaging finished
|
echo Packaging finished
|
||||||
12
package/bin/psemek-package-win
Executable file
12
package/bin/psemek-package-win
Executable file
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
if [ "$#" -ne 1 ]; then
|
||||||
|
echo "Usage: psemek-package-win <project-dir>"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
PROJECT_DIR=`realpath "${1}"`
|
||||||
|
|
||||||
|
docker run -u 1000 -v "${PROJECT_DIR}":/home/work-source lisyarus/psemek:package-win /home/package.sh
|
||||||
|
|
||||||
|
echo Packaging finished
|
||||||
|
|
@ -1,62 +0,0 @@
|
||||||
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} $<TARGET_FILE:${target}>
|
|
||||||
COMMAND chrpath -r . $<TARGET_FILE:${target}>
|
|
||||||
COMMAND zip ${CMAKE_CURRENT_SOURCE_DIR}/${target}-${PSEMEK_PACKAGE_SUFFIX}.zip -j $<TARGET_FILE:${target}> ${PSEMEK_COPY_FILES}
|
|
||||||
)
|
|
||||||
|
|
||||||
endif()
|
|
||||||
endfunction()
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
add_executable(resource-compiler compiler.cpp)
|
psemek_add_build_tool(psemek-resource-compiler FALSE compiler.cpp)
|
||||||
|
|
||||||
function(psemek_add_resources TARGET)
|
function(psemek_add_resources TARGET)
|
||||||
get_target_property(OUT_DIR ${TARGET} BINARY_DIR)
|
get_target_property(OUT_DIR ${TARGET} BINARY_DIR)
|
||||||
|
|
@ -19,9 +19,14 @@ function(psemek_add_resources TARGET)
|
||||||
set(OUT_HEADER "${OUT_DIR}/resource/include/${NAME}.hpp")
|
set(OUT_HEADER "${OUT_DIR}/resource/include/${NAME}.hpp")
|
||||||
set(OUT_SOURCE "${OUT_DIR}/resource/source/${NAME}.cpp")
|
set(OUT_SOURCE "${OUT_DIR}/resource/source/${NAME}.cpp")
|
||||||
|
|
||||||
|
set(_DEPEND_TARGET psemek-resource-compiler)
|
||||||
|
if(PSEMEK_PACKAGE_MODE AND (NOT PSEMEK_PACKAGE_HOST))
|
||||||
|
set(_DEPEND_TARGET)
|
||||||
|
endif()
|
||||||
|
|
||||||
add_custom_command(OUTPUT "${OUT_HEADER}" "${OUT_SOURCE}"
|
add_custom_command(OUTPUT "${OUT_HEADER}" "${OUT_SOURCE}"
|
||||||
COMMAND resource-compiler "${FILE}" ${NAME} "${OUT_HEADER}" "${OUT_SOURCE}"
|
COMMAND psemek-resource-compiler "${FILE}" ${NAME} "${OUT_HEADER}" "${OUT_SOURCE}"
|
||||||
DEPENDS resource-compiler "${FILE}"
|
DEPENDS psemek-resource-compiler "${FILE}"
|
||||||
WORKING_DIRECTORY "${INPUT_DIR}")
|
WORKING_DIRECTORY "${INPUT_DIR}")
|
||||||
|
|
||||||
target_sources(${TARGET} PRIVATE "${OUT_HEADER}" "${OUT_SOURCE}")
|
target_sources(${TARGET} PRIVATE "${OUT_HEADER}" "${OUT_SOURCE}")
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue