diff options
| author | Richard Qin <richard.qin.x@gmail.com> | 2026-10-20 01:30:20 +0800 |
|---|---|---|
| committer | Richard Qin <richard.qin.x@gmail.com> | 2026-10-20 01:30:20 +0800 |
| commit | 3e8d7d1270ace353cce0080a80021dcc7532f2be (patch) | |
| tree | a8bf9d52c4ce609c5d4d1e9c7249d148e4cb6271 /cfront/CMakeLists.txt | |
| parent | a59ba0e3eda5381623a4929486b2f673a883d8d8 (diff) | |
| download | rcc-project-3e8d7d1270ace353cce0080a80021dcc7532f2be.tar.gz rcc-project-3e8d7d1270ace353cce0080a80021dcc7532f2be.tar.xz | |
[CMake] Establish RCC and CFront builds and package exports
Diffstat (limited to 'cfront/CMakeLists.txt')
| -rw-r--r-- | cfront/CMakeLists.txt | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/cfront/CMakeLists.txt b/cfront/CMakeLists.txt new file mode 100644 index 0000000..f0c4d0a --- /dev/null +++ b/cfront/CMakeLists.txt @@ -0,0 +1,53 @@ +# SPDX-License-Identifier: GPL-3.0-or-later + +cmake_minimum_required(VERSION 3.25) +include("${CMAKE_CURRENT_LIST_DIR}/../cmake/Modules/CMakePolicy.cmake" NO_POLICY_SCOPE) +include("${CMAKE_CURRENT_LIST_DIR}/../cmake/Modules/RCCVersion.cmake") + +project(CFront VERSION "${RCC_VERSION}" LANGUAGES C CXX) + +if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR) + message(FATAL_ERROR "CFront requires an out-of-source build.") +endif() + +if(NOT TARGET RCCHeaders) + set(CFRONT_STANDALONE_BUILD ON) + find_package(RCC ${RCC_VERSION} EXACT CONFIG REQUIRED HINTS "${RCC_CMAKE_DIR}") +else() + set(CFRONT_STANDALONE_BUILD OFF) +endif() +list(PREPEND CMAKE_MODULE_PATH + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules" "${RCC_CMAKE_DIR}") +include(GNUInstallDirs) +include(HandleRCCOptions) +include(AddCFront) +if(CFRONT_STANDALONE_BUILD) + add_compile_definitions(${RCC_DEFINITIONS}) + foreach(cfrontDefinition IN LISTS RCC_DEFINITIONS) + list(APPEND CMAKE_REQUIRED_DEFINITIONS "-D${cfrontDefinition}") + endforeach() + rcc_configure_options() + rcc_configure_output_directories() +endif() +set(CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE BOOL "Export the compilation database") + +set(CFRONT_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}") +set(CFRONT_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}") +file(MAKE_DIRECTORY "${CFRONT_BINARY_DIR}/include/cfront") +add_library(CFrontHeaders INTERFACE) +target_compile_features(CFrontHeaders INTERFACE cxx_std_23) +target_include_directories(CFrontHeaders INTERFACE + "$<BUILD_INTERFACE:${CFRONT_SOURCE_DIR}/include>" + "$<BUILD_INTERFACE:${CFRONT_BINARY_DIR}/include>" + "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>") +target_link_libraries(CFrontHeaders INTERFACE RCCHeaders) +install(TARGETS CFrontHeaders EXPORT CFrontTargets) +install(DIRECTORY include/cfront DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" + FILES_MATCHING PATTERN "*.h" PATTERN "*.inc" PATTERN "*.def") +install(DIRECTORY "${CFRONT_BINARY_DIR}/include/cfront" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" + FILES_MATCHING PATTERN "*.h" PATTERN "*.inc" PATTERN "*.def" + PATTERN "CMakeFiles" EXCLUDE PATTERN "config.h" EXCLUDE) + +add_subdirectory(lib) +add_subdirectory(tools) +add_subdirectory(cmake/modules) |
