146 lines
5.0 KiB
CMake
146 lines
5.0 KiB
CMake
if(PROJECT_SOURCE_DIR STREQUAL PROJECT_BINARY_DIR)
|
|
message(
|
|
FATAL_ERROR
|
|
"In-source builds not allowed. Please make a new directory (called a build directory) and run CMake from there."
|
|
)
|
|
endif()
|
|
|
|
cmake_minimum_required(VERSION 3.11)
|
|
|
|
# 版本第一位与年份对应 第二位代表功能变化 第三位代表bug修复
|
|
project(
|
|
xrobot
|
|
DESCRIPTION "XRobot Build"
|
|
VERSION 2024.1.1
|
|
LANGUAGES C CXX ASM)
|
|
|
|
# ---------------------------------------------------------------------------------------
|
|
# Default Options
|
|
set(CMAKE_C_STANDARD 11)
|
|
set(CMAKE_C_STANDARD_REQUIRED ON)
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/build)
|
|
|
|
# ---------------------------------------------------------------------------------------
|
|
# Tools
|
|
include(${CMAKE_CURRENT_SOURCE_DIR}/utils/CMake/tools.cmake)
|
|
|
|
# ---------------------------------------------------------------------------------------
|
|
# Config
|
|
include(${CMAKE_CURRENT_SOURCE_DIR}/config/config.cmake)
|
|
|
|
# ---------------------------------------------------------------------------------------
|
|
# Building Options
|
|
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
|
set(CMAKE_C_FLAGS_DEBUG "-Og -g")
|
|
set(CMAKE_ASM_FLAGS_DEBUG "-Og -g")
|
|
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "")
|
|
add_compile_definitions(MCU_DEBUG_BUILD)
|
|
add_compile_options(-Werror -gdwarf-4)
|
|
|
|
elseif(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
|
|
set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O3 -g")
|
|
set(CMAKE_ASM_FLAGS_RELWITHDEBINFO "-O3 -g")
|
|
set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "")
|
|
add_compile_definitions(MCU_DEBUG_BUILD)
|
|
add_compile_options(-Werror -gdwarf-4)
|
|
|
|
elseif(CMAKE_BUILD_TYPE STREQUAL "Release")
|
|
set(CMAKE_C_FLAGS_RELEASE "-O3")
|
|
set(CMAKE_ASM_FLAGS_RELEASE "-O3")
|
|
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "")
|
|
add_compile_definitions(EIGEN_NO_DEBUG=1)
|
|
|
|
elseif(CMAKE_BUILD_TYPE STREQUAL "MinSizeRel")
|
|
set(CMAKE_C_FLAGS_MINSIZEREL "-Os")
|
|
set(CMAKE_ASM_FLAGS_MINSIZEREL "-Os")
|
|
set(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "")
|
|
add_compile_definitions(EIGEN_NO_DEBUG=1)
|
|
else()
|
|
message(FATAL_ERROR "Unknown build type.")
|
|
endif()
|
|
|
|
# ---------------------------------------------------------------------------------------
|
|
# Library
|
|
set(LIB_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib)
|
|
|
|
# ---------------------------------------------------------------------------------------
|
|
# User
|
|
set(USER_DIR ${CMAKE_CURRENT_SOURCE_DIR}/user)
|
|
set(USER_LIB_DIR ${CMAKE_CURRENT_SOURCE_DIR}/user/lib)
|
|
|
|
# ---------------------------------------------------------------------------------------
|
|
# Hardware
|
|
set(HW_DIR ${CMAKE_CURRENT_SOURCE_DIR}/hw)
|
|
include(${HW_DIR}/hw.cmake)
|
|
|
|
# ---------------------------------------------------------------------------------------
|
|
# Source
|
|
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src)
|
|
|
|
# ---------------------------------------------------------------------------------------
|
|
# Test add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/test)
|
|
|
|
# ---------------------------------------------------------------------------------------
|
|
# Build information
|
|
message(
|
|
STATUS
|
|
"------------------------- Host Platform ------------------------------")
|
|
|
|
string(TIMESTAMP CONFIG_TIMESTAMP "" UTC)
|
|
message(STATUS "Timestamp: ${CONFIG_TIMESTAMP}")
|
|
message(
|
|
STATUS
|
|
"Host: ${CMAKE_HOST_SYSTEM_NAME} ${CMAKE_HOST_SYSTEM_VERSION} ${CMAKE_HOST_SYSTEM_PROCESSOR}"
|
|
)
|
|
|
|
if(CMAKE_CROSSCOMPILING) # set to true by CMake if the CMAKE_SYSTEM_NAME has
|
|
# been set manually
|
|
message(
|
|
STATUS
|
|
"Target: ${CMAKE_SYSTEM_NAME} ${CMAKE_SYSTEM_VERSION} ${CMAKE_SYSTEM_PROCESSOR}"
|
|
)
|
|
endif()
|
|
|
|
message(STATUS "CMake: ${CMAKE_VERSION}")
|
|
message(STATUS "CMake generator: ${CMAKE_GENERATOR}")
|
|
message(STATUS "CMake build tool: ${CMAKE_BUILD_TOOL}")
|
|
|
|
if(MSVC)
|
|
message(STATUS "MSVC: ${MSVC_VERSION}")
|
|
endif()
|
|
|
|
if(CMAKE_GENERATOR MATCHES Xcode)
|
|
message(STATUS "Xcode: ${XCODE_VERSION}")
|
|
endif()
|
|
|
|
if(NOT CMAKE_GENERATOR MATCHES "Xcode|Visual Studio")
|
|
message(STATUS "Configuration: ${CMAKE_BUILD_TYPE}")
|
|
endif()
|
|
|
|
# ---------------------------------------------------------------------------------------
|
|
message(
|
|
STATUS
|
|
"---------------------- Compiler Linker option ------------------------")
|
|
|
|
message(STATUS "C standard: ${CMAKE_C_STANDARD}")
|
|
message(STATUS "")
|
|
message(STATUS "C Compiler: ${CMAKE_C_COMPILER}")
|
|
message(STATUS "ASM Compiler: ${CMAKE_ASM_COMPILER}")
|
|
message(STATUS "Linker: ${CMAKE_LINKER}")
|
|
message(STATUS "")
|
|
message(STATUS "C flags (General): ${CMAKE_C_FLAGS}")
|
|
message(STATUS "C flags (Debug): ${CMAKE_C_FLAGS_DEBUG}")
|
|
message(STATUS "C flags (Release): ${CMAKE_C_FLAGS_RELEASE}")
|
|
message(STATUS "")
|
|
message(STATUS "ASM flags (General): ${CMAKE_ASM_FLAGS}")
|
|
message(STATUS "ASM flags (Debug): ${CMAKE_ASM_FLAGS_DEBUG}")
|
|
message(STATUS "ASM flags (Release): ${CMAKE_ASM_FLAGS_RELEASE}")
|
|
message(STATUS "")
|
|
message(STATUS "Linker flags (General): ${CMAKE_EXE_LINKER_FLAGS}")
|
|
message(STATUS "Linker flags (Debug): ${CMAKE_EXE_LINKER_FLAGS_DEBUG}")
|
|
message(STATUS "Linker flags (Release): ${CMAKE_EXE_LINKER_FLAGS_RELEASE}")
|
|
message(STATUS "")
|
|
message(STATUS "Linker script: ${LINKER_SCRIPT}")
|