187 lines
5.8 KiB
CMake
187 lines
5.8 KiB
CMake
set(TARGET_BASE_NAME "DotaFactory")
|
|
|
|
set(TARGET_APP_NAME "${TARGET_BASE_NAME}")
|
|
set(TARGET_LIB_NAME "${TARGET_BASE_NAME}_lib")
|
|
set(TARGET_UI_NAME "${TARGET_BASE_NAME}_ui")
|
|
set(TARGET_TEST_NAME "${TARGET_BASE_NAME}_test")
|
|
|
|
set(TARGET_LIB_INCLUDE_DIRS
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/lib"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/external"
|
|
)
|
|
set(TARGET_UI_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/ui")
|
|
set(TARGET_TEST_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/test")
|
|
|
|
set(SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
|
|
|
|
|
|
# ============================================================
|
|
# lib — simulation + config
|
|
# Depends on Qt Core, toml++, tinyexpr only (no QtWidgets).
|
|
# ============================================================
|
|
|
|
set(HDRS)
|
|
set(SRCS)
|
|
set(LIB_INCLUDE_PATH)
|
|
|
|
add_subdirectory(external)
|
|
add_subdirectory(lib)
|
|
|
|
set_source_files_properties(${EXTERNAL_FILES} PROPERTIES COMPILE_FLAGS "-w")
|
|
|
|
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
|
set(CMAKE_AUTOMOC ON)
|
|
|
|
set(RELATIVE_HDRS)
|
|
foreach (_file ${HDRS})
|
|
file(RELATIVE_PATH _relPath "${SRC_DIR}" "${_file}")
|
|
list(APPEND RELATIVE_HDRS "${_relPath}")
|
|
endforeach()
|
|
|
|
set(RELATIVE_SRCS)
|
|
foreach (_file ${SRCS})
|
|
file(RELATIVE_PATH _relPath "${SRC_DIR}" "${_file}")
|
|
list(APPEND RELATIVE_SRCS "${_relPath}")
|
|
endforeach()
|
|
|
|
add_files(LIB_FILES ${RELATIVE_HDRS} ${RELATIVE_SRCS})
|
|
|
|
add_library(${TARGET_LIB_NAME} ${LIB_FILES} ${EXTERNAL_FILES})
|
|
create_source_groups(${LIB_FILES})
|
|
create_source_groups(${EXTERNAL_FILES})
|
|
|
|
set_property(TARGET ${TARGET_LIB_NAME} PROPERTY CXX_STANDARD 17)
|
|
set_property(TARGET ${TARGET_LIB_NAME} PROPERTY INCLUDE_DIRECTORIES
|
|
"${TARGET_LIB_INCLUDE_DIRS}"
|
|
"${LIB_INCLUDE_PATH}"
|
|
)
|
|
target_link_libraries(${TARGET_LIB_NAME} Qt5::Core)
|
|
target_compile_definitions(${TARGET_LIB_NAME} PRIVATE TOML_FLOAT_CHARCONV=0)
|
|
|
|
set(CMAKE_AUTOMOC OFF)
|
|
|
|
unset(LIB_FILES)
|
|
unset(RELATIVE_HDRS)
|
|
unset(RELATIVE_SRCS)
|
|
unset(HDRS)
|
|
unset(SRCS)
|
|
# LIB_INCLUDE_PATH (populated by lib/ and external/ subdirectories) is kept
|
|
# in scope so the test target below can also reach those headers.
|
|
|
|
|
|
# ============================================================
|
|
# ui — QtWidgets + QOpenGLWidget
|
|
# Depends on lib. No sources yet; declared as INTERFACE library.
|
|
# When UI source files are added under src/ui/, change this to
|
|
# a regular static library and enable AUTOMOC on the target.
|
|
# ============================================================
|
|
|
|
add_subdirectory(ui)
|
|
|
|
add_library(${TARGET_UI_NAME} INTERFACE)
|
|
|
|
target_link_libraries(${TARGET_UI_NAME} INTERFACE
|
|
${TARGET_LIB_NAME}
|
|
Qt5::Widgets
|
|
${OPENGL_LIBRARIES}
|
|
Qt5::Network
|
|
Qt5::Multimedia
|
|
Qt5::Charts
|
|
)
|
|
|
|
target_include_directories(${TARGET_UI_NAME} INTERFACE
|
|
"${TARGET_UI_INCLUDE_DIRS}"
|
|
"${TARGET_LIB_INCLUDE_DIRS}"
|
|
"${LIB_INCLUDE_PATH}"
|
|
)
|
|
|
|
|
|
# ============================================================
|
|
# app — thin main(); depends on ui
|
|
# ============================================================
|
|
|
|
set(OUTPUT_ROOT_PATH "${CMAKE_BINARY_DIR}/${TARGET_BASE_NAME}")
|
|
|
|
if (WIN32)
|
|
COPY_QT_BINARIES("${OUTPUT_ROOT_PATH}/Debug/app/" True)
|
|
COPY_QT_BINARIES("${OUTPUT_ROOT_PATH}/Release/app/" False)
|
|
|
|
string(REGEX REPLACE "/" "\\\\" BACKSLASHED_CMAKE_SOURCE_DIR ${CMAKE_SOURCE_DIR})
|
|
string(REGEX REPLACE "/" "\\\\" BACKSLASHED_OUTPUT_ROOT_PATH ${OUTPUT_ROOT_PATH})
|
|
execute_process(
|
|
COMMAND "cmd.exe" "/k" "rmdir" "${BACKSLASHED_OUTPUT_ROOT_PATH}\\Debug\\app\\data" & "mklink" "/d" "/j" "${BACKSLASHED_OUTPUT_ROOT_PATH}\\Debug\\app\\data" "${BACKSLASHED_CMAKE_SOURCE_DIR}\\bin\\app\\data" & exit
|
|
COMMAND "cmd.exe" "/k" "rmdir" "${BACKSLASHED_OUTPUT_ROOT_PATH}\\Release\\app\\data" & "mklink" "/d" "/j" "${BACKSLASHED_OUTPUT_ROOT_PATH}\\Release\\app\\data" "${BACKSLASHED_CMAKE_SOURCE_DIR}\\bin\\app\\data" & exit
|
|
)
|
|
endif ()
|
|
|
|
foreach (OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES})
|
|
string(TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG)
|
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} "${OUTPUT_ROOT_PATH}/${OUTPUTCONFIG}/app/")
|
|
endforeach ()
|
|
|
|
set(HDRS)
|
|
set(SRCS)
|
|
|
|
add_subdirectory(app)
|
|
|
|
set(RELATIVE_HDRS)
|
|
foreach (_file ${HDRS})
|
|
file(RELATIVE_PATH _relPath "${SRC_DIR}" "${_file}")
|
|
list(APPEND RELATIVE_HDRS "${_relPath}")
|
|
endforeach()
|
|
|
|
set(RELATIVE_SRCS)
|
|
foreach (_file ${SRCS})
|
|
file(RELATIVE_PATH _relPath "${SRC_DIR}" "${_file}")
|
|
list(APPEND RELATIVE_SRCS "${_relPath}")
|
|
endforeach()
|
|
|
|
add_files(APP_FILES ${RELATIVE_HDRS} ${RELATIVE_SRCS})
|
|
|
|
add_executable(${TARGET_APP_NAME} ${APP_FILES})
|
|
create_source_groups(${APP_FILES})
|
|
|
|
set_property(TARGET ${TARGET_APP_NAME} PROPERTY CXX_STANDARD 17)
|
|
set_target_properties(${TARGET_APP_NAME} PROPERTIES
|
|
VS_DEBUGGER_WORKING_DIRECTORY "${OUTPUT_ROOT_PATH}/$(Configuration)/app/"
|
|
)
|
|
target_link_libraries(${TARGET_APP_NAME} ${TARGET_UI_NAME})
|
|
|
|
unset(APP_FILES)
|
|
unset(RELATIVE_HDRS)
|
|
unset(RELATIVE_SRCS)
|
|
unset(HDRS)
|
|
unset(SRCS)
|
|
|
|
|
|
# ============================================================
|
|
# tests — Catch2 tests; links against lib only (no QtWidgets)
|
|
# ============================================================
|
|
|
|
add_subdirectory(test)
|
|
|
|
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
|
|
|
add_executable(${TARGET_TEST_NAME} ${TEST_FILES})
|
|
create_source_groups(${TEST_FILES})
|
|
|
|
set_property(TARGET ${TARGET_TEST_NAME} PROPERTY CXX_STANDARD 17)
|
|
set_property(TARGET ${TARGET_TEST_NAME} PROPERTY INCLUDE_DIRECTORIES
|
|
"${TARGET_TEST_INCLUDE_DIRS}"
|
|
"${TARGET_LIB_INCLUDE_DIRS}"
|
|
"${LIB_INCLUDE_PATH}"
|
|
)
|
|
target_compile_definitions(${TARGET_TEST_NAME} PRIVATE
|
|
DOTA_FACTORY_CONFIG_DIR="${CMAKE_SOURCE_DIR}/bin/config"
|
|
)
|
|
target_link_libraries(${TARGET_TEST_NAME} ${TARGET_LIB_NAME})
|
|
|
|
|
|
# ============================================================
|
|
# Export
|
|
# ============================================================
|
|
|
|
set(TARGET_LIB_NAME "${TARGET_LIB_NAME}" PARENT_SCOPE)
|
|
set(TARGET_UI_NAME "${TARGET_UI_NAME}" PARENT_SCOPE)
|
|
set(TARGET_APP_NAME "${TARGET_APP_NAME}" PARENT_SCOPE)
|