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)
|
||||
endif()
|
||||
|
||||
add_subdirectory(package)
|
||||
add_subdirectory(tools)
|
||||
add_subdirectory(libs)
|
||||
|
||||
|
|
|
|||
|
|
@ -59,16 +59,16 @@ static int TestPointer(const PROC pTest)
|
|||
return 1;
|
||||
}
|
||||
|
||||
static PROC WinGetProcAddress(const char *name)
|
||||
static void *WinGetProcAddress(const char *name)
|
||||
{
|
||||
HMODULE glMod = NULL;
|
||||
PROC pFunc = wglGetProcAddress((LPCSTR)name);
|
||||
if(TestPointer(pFunc))
|
||||
{
|
||||
return pFunc;
|
||||
return (void*)pFunc;
|
||||
}
|
||||
glMod = GetModuleHandleA("OpenGL32.dll");
|
||||
return (PROC)GetProcAddress(glMod, (LPCSTR)name);
|
||||
return (void*)GetProcAddress(glMod, (LPCSTR)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}"`
|
||||
|
||||
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
|
||||
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)
|
||||
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_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}"
|
||||
COMMAND resource-compiler "${FILE}" ${NAME} "${OUT_HEADER}" "${OUT_SOURCE}"
|
||||
DEPENDS resource-compiler "${FILE}"
|
||||
COMMAND psemek-resource-compiler "${FILE}" ${NAME} "${OUT_HEADER}" "${OUT_SOURCE}"
|
||||
DEPENDS psemek-resource-compiler "${FILE}"
|
||||
WORKING_DIRECTORY "${INPUT_DIR}")
|
||||
|
||||
target_sources(${TARGET} PRIVATE "${OUT_HEADER}" "${OUT_SOURCE}")
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue