panda-core/CMakeLists.txt
2023-07-13 09:03:37 +07:00

88 lines
3.0 KiB
CMake
Executable File

cmake_minimum_required(VERSION 3.24)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(PROJECT_NAME panda-core)
set(PROJECT_VERSION 1.0)
project(${PROJECT_NAME} VERSION ${PROJECT_VERSION})
##############################################################
set(RAYLIB_DIR "/home/tuanpanda/Panda/04-WORKSPACE/00-PROGRAMMING/_Git Clone/raylib-4.5.0")
set(IMGUI_DIR "/home/tuanpanda/Panda/04-WORKSPACE/00-PROGRAMMING/_Git Clone/imgui-1.89.7")
set(RLIMGUI_DIR "/home/tuanpanda/Panda/04-WORKSPACE/00-PROGRAMMING/_Git Clone/rlImGui")
set(INIFILE_DIR "/home/tuanpanda/Panda/04-WORKSPACE/00-PROGRAMMING/_Git Clone/inifile-cpp")
### Fallback link
set(RAYLIB_LINK "https://github.com/raysan5/raylib/archive/refs/tags/4.5.0.zip")
set(IMGUI_LINK "https://github.com/ocornut/imgui/archive/refs/tags/v1.89.7.zip")
set(RLIMGUI_LINK "https://github.com/raylib-extras/rlImGui/archive/refs/heads/main.zip")
set(INIFILE_LINK "https://github.com/Rookfighter/inifile-cpp/archive/refs/heads/master.zip")
##############################################################
if (EXISTS ${RAYLIB_DIR})
add_subdirectory(${RAYLIB_DIR} raylib)
else()
message(STATUS "Downloading raylib library")
include(FetchContent)
set(BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
FetchContent_Declare(raylib URL ${RAYLIB_LINK})
FetchContent_MakeAvailable(raylib)
endif()
if (EXISTS ${IMGUI_DIR})
set(imgui_SOURCE_DIR ${IMGUI_DIR})
else()
message(STATUS "Downloading imgui library")
include(FetchContent)
FetchContent_Declare(imgui URL ${IMGUI_LINK})
FetchContent_MakeAvailable(imgui)
endif()
if (EXISTS ${RLIMGUI_DIR})
set(rlimgui_SOURCE_DIR ${RLIMGUI_DIR})
else()
message(STATUS "Downloading rlImGui library")
include(FetchContent)
FetchContent_Declare(rlimgui URL ${RLIMGUI_LINK})
FetchContent_MakeAvailable(rlimgui)
endif()
if (EXISTS ${INIFILE_DIR})
set(inifile-cpp_SOURCE_DIR ${INIFILE_DIR})
else()
message(STATUS "Downloading inifile-cpp library")
include(FetchContent)
FetchContent_Declare(inifile-cpp URL ${INIFILE_LINK})
FetchContent_MakeAvailable(inifile-cpp)
endif()
##############################################################
# yes... im using glob... dont judge me....
file(GLOB PROJECT_SOURCES CONFIGURE_DEPENDS
"src/*.cpp"
"src/**/*.cpp"
"${imgui_SOURCE_DIR}/*.cpp"
"${rlimgui_SOURCE_DIR}/*.cpp")
set(PROJECT_INCLUDE
"src"
${imgui_SOURCE_DIR}
${imgui_SOURCE_DIR}/backends
${rlimgui_SOURCE_DIR}
${inifile-cpp_SOURCE_DIR}/include)
set(PROJECT_LIBRARY raylib)
set(PROJECT_DEFINITION "")
##############################################################
add_library(${PROJECT_NAME} STATIC ${PROJECT_SOURCES})
target_include_directories(${PROJECT_NAME} PUBLIC ${PROJECT_INCLUDE})
target_link_libraries(${PROJECT_NAME} PRIVATE ${PROJECT_LIBRARY})
target_compile_definitions(${PROJECT_NAME} PUBLIC ${PROJECT_DEFINITION})
target_compile_options(${PROJECT_NAME} PRIVATE -Wall -Wextra -Wpedantic)