|
| 1 | +cmake_minimum_required(VERSION 3.5) |
| 2 | + |
| 3 | +project(Application LANGUAGES CXX) |
| 4 | +set(CMAKE_CXX_STANDARD 23) |
| 5 | +set(CMAKE_CXX_STANDARD_REQUIRED ON) |
| 6 | +set(CMAKE_BUILD_TYPE "Debug") |
| 7 | + |
| 8 | +get_filename_component(PARENT_DIR ../ ABSOLUTE) |
| 9 | + |
| 10 | +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/") |
| 11 | + |
| 12 | +include(ExternalProject) |
| 13 | +include(FetchContent) |
| 14 | + |
| 15 | + |
| 16 | +# ------ PACKAGES CONFIG ------ |
| 17 | +include(project-setting) |
| 18 | +if(project-setting) |
| 19 | + return() |
| 20 | +endif() |
| 21 | +set(project-setting ON) |
| 22 | + |
| 23 | +# ------ CROSS-COMPILE CONFIG ------ |
| 24 | +include(cross-compile) |
| 25 | +if(cross-compile) |
| 26 | + return() |
| 27 | +endif() |
| 28 | +set(cross-compile ON) |
| 29 | + |
| 30 | +# ------ PROJECT CONFIG ------ |
| 31 | +include(color-message) |
| 32 | +if(color-message) |
| 33 | + return() |
| 34 | +endif() |
| 35 | +set(color-message ON) |
| 36 | + |
| 37 | +# ------ COMPILER CONFIG ------ |
| 38 | +include(compiler-options) |
| 39 | +if(compiler-options) |
| 40 | + return() |
| 41 | +endif() |
| 42 | +set(compiler-options ON) |
| 43 | + |
| 44 | +# ------ PACKAGES CONFIG ------ |
| 45 | +include(packages) |
| 46 | +if(packages) |
| 47 | + return() |
| 48 | +endif() |
| 49 | +set(packages ON) |
| 50 | + |
| 51 | +set(PREFIX_HPPHEADER *.hpp) |
| 52 | +set(PREFIX_SOURCE *.cpp) |
| 53 | + |
| 54 | +set_property(GLOBAL PROPERTY USE_FOLDERS ON) |
| 55 | + |
| 56 | +file(GLOB SOURCESFILE |
| 57 | + ${PREFIX_HPPHEADER} |
| 58 | + ${PREFIX_SOURCE} |
| 59 | +) |
| 60 | + |
| 61 | +file(GLOB UTILS |
| 62 | + utilities/${SUFFIX_HPPHEADER} |
| 63 | + utilities/${SUFFIX_SOURCE} |
| 64 | +) |
| 65 | + |
| 66 | +# ------ PROJECT DIRECTORIES ------ |
| 67 | +set(dir ${CMAKE_CURRENT_SOURCE_DIR}/build/) |
| 68 | +set(EXECUTABLE_OUTPUT_PATH ${dir}/final CACHE PATH "Build directory" FORCE) |
| 69 | +message(STATUS "Executable output path: ${EXECUTABLE_OUTPUT_PATH}") |
| 70 | + |
| 71 | +# Include directories |
| 72 | +include_directories(${PROJECT_SOURCE_DIR}/../) |
| 73 | +include_directories(${PROJECT_SOURCE_DIR}/../source) |
| 74 | +include_directories(${PROJECT_SOURCE_DIR}/../include) |
| 75 | + |
| 76 | +add_executable(${PROJECT_NAME} ${SOURCESFILE} ${UTILS}) |
| 77 | + |
| 78 | + |
| 79 | +target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/source PRIVATE source ${LIB_TARGET_INCLUDE_DIRECTORIES}) |
| 80 | +target_link_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/source ${LIB_TARGET_LINK_DIRECTORIES}) |
| 81 | +target_link_directories(${PROJECT_NAME} PRIVATE ${PROJECT_SOURCE_DIR}/../../../build/final ${LIB_TARGET_LINK_DIRECTORIES}) #CoreInterface |
| 82 | + |
| 83 | + |
| 84 | +target_link_directories(${PROJECT_NAME} PRIVATE ${PROJECT_SOURCE_DIR}/../build/final) |
| 85 | +target_link_libraries(${PROJECT_NAME} PRIVATE CoreInterface ${LIB_MODULES}) |
| 86 | +target_compile_definitions(${PROJECT_NAME} PUBLIC ${LIB_TARGET_COMPILER_DEFINATION}) |
| 87 | +target_include_directories(${PROJECT_NAME} |
| 88 | + PUBLIC |
| 89 | + ${CMAKE_CURRENT_SOURCE_DIR}/source PRIVATE source |
| 90 | + ${LIB_TARGET_INCLUDE_DIRECTORIES} |
| 91 | +) |
| 92 | + |
| 93 | + |
| 94 | +# Ignore unused files for packaging |
| 95 | +list(APPEND CPACK_SOURCE_IGNORE_FILES /.git/ /build/ .gitignore .DS_Store) |
| 96 | + |
| 97 | +# Copy files after build |
| 98 | +if(EXISTS "${PROJECT_SOURCE_DIR}/../build/final") |
| 99 | + add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD |
| 100 | + COMMAND ${CMAKE_COMMAND} -E copy_directory |
| 101 | + "${PROJECT_SOURCE_DIR}/../build/final" |
| 102 | + "${CMAKE_CURRENT_BINARY_DIR}/final" |
| 103 | + ) |
| 104 | +else() |
| 105 | + message(WARNING "Directory ${PROJECT_SOURCE_DIR}/../build/final does not exist") |
| 106 | +endif() |
| 107 | + |
| 108 | +# Define PLATFORM_FOLDER if not already defined |
| 109 | +if(NOT DEFINED PLATFORM_FOLDER) |
| 110 | + set(PLATFORM_FOLDER "platform") # Default value, adjust as needed |
| 111 | +endif() |
| 112 | + |
| 113 | +get_filename_component(PARENT_DIR ../ ABSOLUTE) |
| 114 | + |
| 115 | +#Copy from Core Interface. |
| 116 | +add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD |
| 117 | + COMMAND ${CMAKE_COMMAND} -E copy_directory |
| 118 | + "${PROJECT_SOURCE_DIR}/../build/final" |
| 119 | + "${CMAKE_CURRENT_BINARY_DIR}/final" |
| 120 | + ) |
| 121 | + |
| 122 | + |
| 123 | + if(EXISTS "${PROJECT_SOURCE_DIR}/build/${PLATFORM_FOLDER}/${PROJECT_NAME}") |
| 124 | + add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD |
| 125 | + COMMAND ${CMAKE_COMMAND} -E copy |
| 126 | + "${PROJECT_SOURCE_DIR}/build/${PLATFORM_FOLDER}/${PROJECT_NAME}" |
| 127 | + "${PARENT_DIR}/application/build/final" |
| 128 | + ) |
| 129 | + else() |
| 130 | + message(WARNING "File ${PROJECT_SOURCE_DIR}/build/${PLATFORM_FOLDER}/${PROJECT_NAME} does not exist") |
| 131 | + endif() |
| 132 | + |
| 133 | + # Install target |
| 134 | + install(TARGETS ${PROJECT_NAME} DESTINATION build/final) |
0 commit comments