Update CMakeLists.txt
All checks were successful
ci/woodpecker/push/woodpecker.json Pipeline was successful

This commit is contained in:
Rebekah 2024-07-14 08:07:22 -04:00
parent e47ecd51cc
commit f966885cf2

View File

@ -1,6 +1,5 @@
# Libpdw: Primitives Done well! # Copyright (C) 2024 Rebekah Rowe
# Copyright (C) 2022 Rebekah Rowe
# #
# This program is free software: you can redistribute it and/or modify # This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by
@ -24,45 +23,78 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS true) set(CMAKE_EXPORT_COMPILE_COMMANDS true)
find_package(Doxygen) find_package(Doxygen)
find_package(ImageMagick REQUIRED COMPONENTS convert identify )
#if (NOT ImageMagick_idenity_FOUND)
#message(FATAL "Please install imagemagick identify")
add_library(libpdw STATIC "")
file(GLOB_RECURSE sources "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp")
target_sources(libpdw PUBLIC ${sources})
target_include_directories(libpdw PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/example-src/lib/" "${CMAKE_CURRENT_SOURCE_DIR}/src/" "${CMAKE_CURRENT_SOURCE_DIR}/include/libpdw")
if (DOXYGEN_FOUND)
doxygen_add_docs(libpdw-docs)
endif()
# Example using xoverlay
set(OpenGL_GL_PREFERENCE "GLVND")
find_package(PNG) # We need to link all this again since we prebuilt them staticly
find_package(GLEW)
find_package(OpenGL)
find_package(X11)
find_package(Freetype)
if(PNG_FOUND AND GLEW_FOUND AND OPENGL_FOUND AND X11_FOUND AND FREETYPE_FOUND)
project (example)
file(GLOB_RECURSE sources "${CMAKE_CURRENT_SOURCE_DIR}/example-src/*.c*")
add_executable(example ${sources})
target_include_directories(example PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/example-src/lib/" "${CMAKE_CURRENT_SOURCE_DIR}/include/")
target_link_libraries(example libpdw
hydride
glez
${PNG_LIBRARIES} GL GLU GLEW ${FREETYPE_LIBRARIES} ${X11_X11_LIB} ${X11_Xext_LIB} ${X11_Xfixes_LIB})
endif()
# EMBED CMAKE
find_package(ImageMagick REQUIRED COMPONENTS convert identify)
function(CommandConvertImageToRgba file_in) function(CommandConvertImageToRgba file_in)
cmake_path(GET file_in FILENAME filename) cmake_path(GET file_in FILENAME filename)
cmake_path(GET file_in PARENT_PATH filepath) cmake_path(GET file_in PARENT_PATH filepath)
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${filename}.rgba add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${filename}.rgba
WORKING_DIRECTORY ${filepath} WORKING_DIRECTORY ${filepath}
COMMAND ${ImageMagick_convert_EXECUTABLE} COMMAND ${ImageMagick_convert_EXECUTABLE}
ARGS ${filename} -depth 8 -format rgba ${CMAKE_CURRENT_BINARY_DIR}/${filename}.rgba ARGS ${filename} -depth 8 -format rgba ${CMAKE_CURRENT_BINARY_DIR}/${filename}.rgba
DEPENDS ${file_in} DEPENDS ${file_in}
POST_BUILD) POST_BUILD)
set(FUNC_RET ${CMAKE_CURRENT_BINARY_DIR}/${filename}.rgba PARENT_SCOPE) set(FUNC_RET ${CMAKE_CURRENT_BINARY_DIR}/${filename}.rgba PARENT_SCOPE)
endfunction() endfunction()
function(CommandConvertToObjcopy file_in) function(CommandConvertToObjcopy file_in)
cmake_path(GET file_in FILENAME filename) cmake_path(GET file_in FILENAME filename)
cmake_path(GET file_in PARENT_PATH filepath) cmake_path(GET file_in PARENT_PATH filepath)
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${filename}.o add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${filename}.o
WORKING_DIRECTORY ${filepath} WORKING_DIRECTORY ${filepath}
COMMAND ${CMAKE_OBJCOPY} COMMAND ${CMAKE_OBJCOPY}
ARGS --input binary --output elf64-x86-64 --binary-architecture i386 ${filename} ${CMAKE_CURRENT_BINARY_DIR}/${filename}.o ARGS --input binary --output elf64-x86-64 --binary-architecture i386 ${filename} ${CMAKE_CURRENT_BINARY_DIR}/${filename}.o
DEPENDS ${file_in} DEPENDS ${file_in}
POST_BUILD) POST_BUILD)
set(FUNC_RET ${CMAKE_CURRENT_BINARY_DIR}/${filename}.o PARENT_SCOPE) set(FUNC_RET ${CMAKE_CURRENT_BINARY_DIR}/${filename}.o PARENT_SCOPE)
endfunction() endfunction()
function(CommandConvertImageToObject file_in) function(CommandConvertImageToObject file_in)
CommandConvertImageToRgba("${file_in}") CommandConvertImageToRgba("${file_in}")
CommandConvertToObjcopy(${FUNC_RET}) CommandConvertToObjcopy(${FUNC_RET})
set(FUNC_RET ${FUNC_RET} PARENT_SCOPE) set(FUNC_RET ${FUNC_RET} PARENT_SCOPE)
endfunction() endfunction()
function(EmbedResources) function(EmbedResources)
set(EMBED_HEADER_DIR "${CMAKE_CURRENT_BINARY_DIR}/") set(EMBED_HEADER_DIR "${CMAKE_CURRENT_BINARY_DIR}/")
set(EMBED_HEADER_DIR "${EMBED_HEADER_DIR}" PARENT_SCOPE) set(EMBED_HEADER_DIR "${EMBED_HEADER_DIR}" PARENT_SCOPE)
file(WRITE "${EMBED_HEADER_DIR}/embed_resources.hpp" " file(WRITE "${EMBED_HEADER_DIR}/embed_resources.hpp" "
/* AUTOGENERATED CMAKE EMBEDED FILE HEADER!!! DO NOT EDIT THIS FILE!!! /* AUTOGENERATED CMAKE EMBEDED FILE HEADER!!! DO NOT EDIT THIS FILE!!!
ALL CHANGES WILL BE WIPED!!! */ ALL CHANGES WILL BE WIPED!!! */
#include <cstddef> #include <cstddef>
@ -89,21 +121,21 @@ public:
}; };
") ")
set(EMBED_OBJ_RET "") set(EMBED_OBJ_RET "")
foreach(file_path ${ARGV}) foreach(file_path ${ARGV})
cmake_path(GET file_path EXTENSION LAST_ONLY file_ext) cmake_path(GET file_path EXTENSION LAST_ONLY file_ext)
set(type "embed") set(type "embed")
if (file_ext STREQUAL ".jpg") if (file_ext STREQUAL ".jpg")
set(type "image") set(type "image")
endif() endif()
if (file_ext STREQUAL ".png") if (file_ext STREQUAL ".png")
set(type "image") set(type "image")
endif() endif()
if (type STREQUAL "image") if (type STREQUAL "image")
CommandConvertImageToObject(${file_path}) CommandConvertImageToObject(${file_path})
elseif (type STREQUAL "embed") elseif (type STREQUAL "embed")
CommandConvertToObjcopy(${file_path}) CommandConvertToObjcopy(${file_path})
endif() endif()
list(APPEND EMBED_OBJ_RET "${FUNC_RET}") list(APPEND EMBED_OBJ_RET "${FUNC_RET}")
@ -112,15 +144,15 @@ public:
file(APPEND "${EMBED_HEADER_DIR}/embed_resources.hpp" "extern const std::byte _binary_${obj_cleaned_name}_start; extern const std::byte _binary_${obj_cleaned_name}_end; \n") file(APPEND "${EMBED_HEADER_DIR}/embed_resources.hpp" "extern const std::byte _binary_${obj_cleaned_name}_start; extern const std::byte _binary_${obj_cleaned_name}_end; \n")
if (type STREQUAL "image") if (type STREQUAL "image")
cmake_path(GET file_path PARENT_PATH file_parent) cmake_path(GET file_path PARENT_PATH file_parent)
cmake_path(GET file_path FILENAME file_name) cmake_path(GET file_path FILENAME file_name)
exec_program("${ImageMagick_identify_EXECUTABLE}" "${file_parent}" exec_program("${ImageMagick_identify_EXECUTABLE}" "${file_parent}"
ARGS -format "%[fx:w]" "${file_name}" ARGS -format "%[fx:w]" "${file_name}"
OUTPUT_VARIABLE image_width) OUTPUT_VARIABLE image_width)
exec_program("${ImageMagick_identify_EXECUTABLE}" "${file_parent}" exec_program("${ImageMagick_identify_EXECUTABLE}" "${file_parent}"
ARGS -format "%[fx:h]" "${file_name}" ARGS -format "%[fx:h]" "${file_name}"
OUTPUT_VARIABLE image_height) OUTPUT_VARIABLE image_height)
file(APPEND "${EMBED_HEADER_DIR}/embed_resources.hpp" "inline EmbededImage embeded_${obj_cleaned_name}(${image_width}, ${image_height}, EmbededResource(&_binary_${obj_cleaned_name}_start, &_binary_${obj_cleaned_name}_end)); \n") file(APPEND "${EMBED_HEADER_DIR}/embed_resources.hpp" "inline EmbededImage embeded_${obj_cleaned_name}(${image_width}, ${image_height}, EmbededResource(&_binary_${obj_cleaned_name}_start, &_binary_${obj_cleaned_name}_end)); \n")
elseif (type STREQUAL "embed") elseif (type STREQUAL "embed")
file(APPEND "${EMBED_HEADER_DIR}/embed_resources.hpp" "inline EmbededResource embeded_${obj_cleaned_name}(&_binary_${obj_cleaned_name}_start, &_binary_${obj_cleaned_name}_end); \n") file(APPEND "${EMBED_HEADER_DIR}/embed_resources.hpp" "inline EmbededResource embeded_${obj_cleaned_name}(&_binary_${obj_cleaned_name}_start, &_binary_${obj_cleaned_name}_end); \n")
@ -132,30 +164,5 @@ endfunction()
EmbedResources("${CMAKE_CURRENT_SOURCE_DIR}/res/opensans.ttf" "${CMAKE_CURRENT_SOURCE_DIR}/res/logo.png" "${CMAKE_CURRENT_SOURCE_DIR}/res/flame.png" "${CMAKE_CURRENT_SOURCE_DIR}/res/heart.png" "${CMAKE_CURRENT_SOURCE_DIR}/res/raindrop.png" "${CMAKE_CURRENT_SOURCE_DIR}/res/raindrop2.png" "${CMAKE_CURRENT_SOURCE_DIR}/res/snowflake.png") EmbedResources("${CMAKE_CURRENT_SOURCE_DIR}/res/opensans.ttf" "${CMAKE_CURRENT_SOURCE_DIR}/res/logo.png" "${CMAKE_CURRENT_SOURCE_DIR}/res/flame.png" "${CMAKE_CURRENT_SOURCE_DIR}/res/heart.png" "${CMAKE_CURRENT_SOURCE_DIR}/res/raindrop.png" "${CMAKE_CURRENT_SOURCE_DIR}/res/raindrop2.png" "${CMAKE_CURRENT_SOURCE_DIR}/res/snowflake.png")
file(GLOB_RECURSE sources "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp") target_sources(libpdw STATIC ${EMBED_OBJ_RET})
add_library(libpdw STATIC ${EMBED_OBJ_RET} ${sources}) target_include_directories(libpdw PRIVATE "${EMBED_HEADER_DIR}")
target_include_directories(libpdw PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/example-src/lib/" "${CMAKE_CURRENT_SOURCE_DIR}/src/" "${CMAKE_CURRENT_SOURCE_DIR}/include/libpdw" "${EMBED_HEADER_DIR}")
if (DOXYGEN_FOUND)
doxygen_add_docs(libpdw-docs)
endif()
# Example using xoverlay
set(OpenGL_GL_PREFERENCE "GLVND")
find_package(PNG) # We need to link all this again since we prebuilt them staticly
find_package(GLEW)
find_package(OpenGL)
find_package(X11)
find_package(Freetype)
if(PNG_FOUND AND GLEW_FOUND AND OPENGL_FOUND AND X11_FOUND AND FREETYPE_FOUND)
project (example)
file(GLOB_RECURSE sources "${CMAKE_CURRENT_SOURCE_DIR}/example-src/*.c*")
add_executable(example ${sources})
target_include_directories(example PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/example-src/lib/" "${CMAKE_CURRENT_SOURCE_DIR}/include/")
target_link_libraries(example libpdw
hydride
glez
${PNG_LIBRARIES} GL GLU GLEW ${FREETYPE_LIBRARIES} ${X11_X11_LIB} ${X11_Xext_LIB} ${X11_Xfixes_LIB})
endif()