Skip to content
Snippets Groups Projects
Select Git revision
  • 66202602843c1b48ba9eaa46d77c931321f0c60a
  • main default protected
  • release
3 results

hp4155a.py

Blame
  • CMakeLists.txt 5.44 KiB
    cmake_minimum_required(VERSION 3.15)
    
    # Projektname und Sprache
    project(ADVANCED_WARS
            VERSION 1.0.0
            DESCRIPTION "HSFD C++ Project"
            LANGUAGES CXX
    )
    
    include(FetchContent)
    
    # HighFive einbinden
    FetchContent_Declare(
        highfive
        GIT_REPOSITORY https://github.com/highfive-devs/highfive.git
        GIT_TAG v2.10.1
    )
    
    set(HIGHFIVE_EXAMPLES OFF)
    set(HIGHFIVE_UNIT_TESTS OFF)
    
    FetchContent_MakeAvailable(highfive)
    
    # Box2D einbinden
    FetchContent_Declare(
        box2d
        GIT_REPOSITORY https://github.com/erincatto/box2d.git
        GIT_TAG v2.4.2
    )
    
    set(BOX2D_BUILD_TESTBED OFF CACHE BOOL "" FORCE)
    set(BOX2D_BUILD_UNIT_TESTS OFF CACHE BOOL "" FORCE)
    set(BOX2D_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
    
    FetchContent_MakeAvailable(box2d)
    
    set(Boost_USE_STATIC_LIBS OFF)
    set(Boost_USE_MULTITHREADED ON)
    set(Boost_USE_STATIC_RUNTIME OFF)
    find_package(Boost 1.71.0 REQUIRED COMPONENTS graph)
    
    # Quellen sammeln
    file(GLOB_RECURSE ADVANCED_WARS_SOURCES
            "${PROJECT_SOURCE_DIR}/src/game/*.cpp"
            "${PROJECT_SOURCE_DIR}/src/game/*.hpp"
    )
    
    # C++ Standard festlegen
    set(CMAKE_CXX_STANDARD 17)
    set(CMAKE_CXX_STANDARD_REQUIRED ON)
    set(CMAKE_CXX_EXTENSIONS OFF)
    set(CMAKE_BUILD_TYPE Debug)
    
    set(CMAKE_CXX_FLAGS_DEBUG "-g -O0 -Wall -Wextra -Wpedantic")
    set(CMAKE_C_FLAGS_DEBUG "-g -O0 -Wall -Wextra -Wpedantic")
    
    set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
    
    add_definitions(-DDEBUG)
    
    # Compiler-Warnungen aktivieren
    if(MSVC)
        add_compile_options(/W4)
    else()
        add_compile_options(-Wall -Wextra -Wpedantic)
    endif()
    
    # Ressourcen kopieren
    set(RES_DIR ${CMAKE_CURRENT_SOURCE_DIR}/res)
    set(OUTPUT_RES_DIR ${CMAKE_CURRENT_BINARY_DIR}/res)
    file(MAKE_DIRECTORY ${OUTPUT_RES_DIR})
    file(GLOB FONT_FILES ${RES_DIR}/*.TTF)
    file(GLOB IMAGE_FILES ${RES_DIR}/*.png)
    file(GLOB HDF5_FILES ${RES_DIR}/*.h5)
    
    # Executable erstellen
    add_executable(advanced_wars ${ADVANCED_WARS_SOURCES})
    
    set(CMAKE_MODULE_PATH ${ADVANCED_WARS_SOURCE_DIR}/cmake/ ${CMAKE_MODULE_PATH})
    
    find_package(Qt6 REQUIRED COMPONENTS Widgets)
    
    # Plattform-spezifische Konfiguration
    if(APPLE)
        # SDL2 Frameworks für macOS
        set(SDL2_PATH "/Library/Frameworks")
        set(CMAKE_OSX_ARCHITECTURES "arm64")
    
        target_include_directories(
                advanced_wars PRIVATE
                ${SDL2_PATH}/SDL2.framework/Headers
                ${SDL2_PATH}/SDL2_image.framework/Headers
                ${SDL2_PATH}/SDL2_ttf.framework/Headers
        )
    
        target_link_libraries(
                advanced_wars PRIVATE
                ${SDL2_PATH}/SDL2.framework/SDL2
                ${SDL2_PATH}/SDL2_image.framework/SDL2_image
                ${SDL2_PATH}/SDL2_ttf.framework/SDL2_ttf
                Qt6::Core
                Boost::graph
                box2d
        )
    
        # HDF5 für macOS korrekt einbinden
        find_package(HDF5 REQUIRED COMPONENTS CXX HL)
        target_include_directories(advanced_wars PRIVATE ${HDF5_INCLUDE_DIRS} ${highfive_SOURCE_DIR}/include)
        target_link_libraries(advanced_wars PRIVATE ${HDF5_LIBRARIES})
    
        message(STATUS "Include Dir (SDL2): ${SDL2_PATH}/SDL2.framework/Headers")
        message(STATUS "Include Dir (SDL2_image): ${SDL2_PATH}/SDL2_image.framework/Headers")
        message(STATUS "Include Dir (SDL2_ttf): ${SDL2_PATH}/SDL2_ttf.framework/Headers")
        message(STATUS "HDF5 Include Dirs: ${HDF5_INCLUDE_DIRS}")
        message(STATUS "HDF5 Libraries: ${HDF5_LIBRARIES}")
        message(STATUS "Boost Include Dirs: ${Boost_INCLUDE_DIRS}")
    
    else()
        # Linux Konfiguration
        find_package(SDL2 REQUIRED)
        find_package(SDL2_IMAGE REQUIRED)
        find_package(SDL2_ttf REQUIRED)
        find_package(HDF5 REQUIRED COMPONENTS CXX HL)
    
        include_directories(/usr/include/SDL2)
        include_directories(${SDL2_INCLUDE_DIR})
        include_directories(${SDL2_IMG_INCLUDE_DIR})
        include_directories(${SDL2_TTF_INCLUDE_DIR})
        include_directories(${HDF5_INCLUDE_DIRS})
    
        target_link_libraries(advanced_wars
            ${HDF5_LIBRARIES}
            Qt6::Core
            -lSDL2
            -lSDL2_image
            -lSDL2_ttf
            Boost::graph
            box2d
            m
        )
    endif()
    
    # leveleditor
    # Find Qt
    
    file(GLOB_RECURSE LEVELEDITOR_SOURCES
            "${PROJECT_SOURCE_DIR}/src/editor/*.cpp"
            "${PROJECT_SOURCE_DIR}/src/editor/*.hpp"
    )
    
    # Add executable
    add_executable(editor ${LEVELEDITOR_SOURCES})
    
    # Link Qt libraries
    target_link_libraries(editor PRIVATE Qt6::Widgets ${HDF5_LIBRARIES})
    
    target_include_directories(editor
        PRIVATE
            ${highfive_SOURCE_DIR}/include
    )
    
    
    # writelevel
    add_executable(writelevel ${PROJECT_SOURCE_DIR}/src/util/writelevel.cpp)
    target_include_directories(writelevel
        PRIVATE
            ${highfive_SOURCE_DIR}/include
    )
    target_link_libraries(writelevel
            ${HDF5_LIBRARIES}
        )
    
    target_include_directories(advanced_wars PRIVATE ${highfive_SOURCE_DIR}/include)
    
    # Ressourcen kopieren (plattformübergreifend)
    foreach(FONT ${FONT_FILES})
        add_custom_command(
                TARGET advanced_wars PRE_BUILD
                COMMAND ${CMAKE_COMMAND} -E copy ${FONT} ${OUTPUT_RES_DIR}
                COMMENT "Kopiere Font: ${FONT} nach ${OUTPUT_RES_DIR}"
        )
    endforeach()
    
    foreach(IMAGE ${IMAGE_FILES})
        add_custom_command(
                TARGET advanced_wars PRE_BUILD
                COMMAND ${CMAKE_COMMAND} -E copy ${IMAGE} ${OUTPUT_RES_DIR}
                COMMENT "Kopiere Image: ${IMAGE} nach ${OUTPUT_RES_DIR}"
        )
    endforeach()
    
    foreach(H5_FILE ${HDF5_FILES})
        add_custom_command(
                TARGET advanced_wars PRE_BUILD
                COMMAND ${CMAKE_COMMAND} -E copy ${H5_FILE} ${OUTPUT_RES_DIR}
                COMMENT "Kopiere HDF5 File: ${H5_FILE} nach ${OUTPUT_RES_DIR}"
        )
    endforeach()