mirror of
https://github.com/Kitware/CMake.git
synced 2025-10-22 07:25:02 +08:00

Divert LCC compiler as a new one, instead of treating it as GNU. Since old times, Elbrus C/C++/Fortran Compiler (LCC) by MCST has been passing checks for GNU compilers, so it has been identified as GNU. Now, with intent of seriously upstreaming its support, it has been added as a separate LCC compiler, and its version displays not a supported GCC version, but LCC version itself (e.g. LCC 1.25.19 instead of GNU 7.3.0). This commit adds its support for detection, and also converts basically every check like 'is this compiler GNU?' to 'is this compiler GNU or LCC?'. The only places where this check is untouched, is where it regards other platforms where LCC is unavailable (primarily non-Linux), and where it REALLY differs from GNU compiler. Note: this transition may break software that are already ported to Elbrus, but hardly relies that LCC will be detected as GNU; still such software is not known.
122 lines
3.9 KiB
CMake
122 lines
3.9 KiB
CMake
cmake_minimum_required(VERSION 3.15)
|
|
|
|
# set the project name and version
|
|
project(Tutorial VERSION 1.0)
|
|
|
|
add_library(tutorial_compiler_flags INTERFACE)
|
|
target_compile_features(tutorial_compiler_flags INTERFACE cxx_std_11)
|
|
|
|
# add compiler warning flags just when building this project via
|
|
# the BUILD_INTERFACE genex
|
|
set(gcc_like_cxx "$<COMPILE_LANG_AND_ID:CXX,ARMClang,AppleClang,Clang,GNU,LCC>")
|
|
set(msvc_cxx "$<COMPILE_LANG_AND_ID:CXX,MSVC>")
|
|
target_compile_options(tutorial_compiler_flags INTERFACE
|
|
"$<${gcc_like_cxx}:$<BUILD_INTERFACE:-Wall;-Wextra;-Wshadow;-Wformat=2;-Wunused>>"
|
|
"$<${msvc_cxx}:$<BUILD_INTERFACE:-W3>>"
|
|
)
|
|
|
|
# control where the static and shared libraries are built so that on windows
|
|
# we don't need to tinker with the path to run the executable
|
|
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}")
|
|
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}")
|
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}")
|
|
|
|
option(BUILD_SHARED_LIBS "Build using shared libraries" ON)
|
|
|
|
if(APPLE)
|
|
set(CMAKE_INSTALL_RPATH "@executable_path/../lib")
|
|
elseif(UNIX)
|
|
set(CMAKE_INSTALL_RPATH "$ORIGIN/../lib")
|
|
endif()
|
|
|
|
# configure a header file to pass the version number only
|
|
configure_file(TutorialConfig.h.in TutorialConfig.h)
|
|
|
|
# add the MathFunctions library
|
|
add_subdirectory(MathFunctions)
|
|
|
|
# add the executable
|
|
add_executable(Tutorial tutorial.cxx)
|
|
target_link_libraries(Tutorial PUBLIC MathFunctions)
|
|
|
|
# add the binary tree to the search path for include files
|
|
# so that we will find TutorialConfig.h
|
|
target_include_directories(Tutorial PUBLIC
|
|
"${PROJECT_BINARY_DIR}"
|
|
)
|
|
|
|
# add the install targets
|
|
install(TARGETS Tutorial DESTINATION bin)
|
|
install(FILES "${PROJECT_BINARY_DIR}/TutorialConfig.h"
|
|
DESTINATION include
|
|
)
|
|
|
|
# enable testing
|
|
enable_testing()
|
|
|
|
# does the application run
|
|
add_test(NAME Runs COMMAND Tutorial 25)
|
|
|
|
# does the usage message work?
|
|
add_test(NAME Usage COMMAND Tutorial)
|
|
set_tests_properties(Usage
|
|
PROPERTIES PASS_REGULAR_EXPRESSION "Usage:.*number"
|
|
)
|
|
|
|
# define a function to simplify adding tests
|
|
function(do_test target arg result)
|
|
add_test(NAME Comp${arg} COMMAND ${target} ${arg})
|
|
set_tests_properties(Comp${arg}
|
|
PROPERTIES PASS_REGULAR_EXPRESSION ${result}
|
|
)
|
|
endfunction()
|
|
|
|
# do a bunch of result based tests
|
|
do_test(Tutorial 4 "4 is 2")
|
|
do_test(Tutorial 9 "9 is 3")
|
|
do_test(Tutorial 5 "5 is 2.236")
|
|
do_test(Tutorial 7 "7 is 2.645")
|
|
do_test(Tutorial 25 "25 is 5")
|
|
do_test(Tutorial -25 "-25 is (-nan|nan|0)")
|
|
do_test(Tutorial 0.0001 "0.0001 is 0.01")
|
|
|
|
include(InstallRequiredSystemLibraries)
|
|
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/License.txt")
|
|
set(CPACK_PACKAGE_VERSION_MAJOR "${Tutorial_VERSION_MAJOR}")
|
|
set(CPACK_PACKAGE_VERSION_MINOR "${Tutorial_VERSION_MINOR}")
|
|
include(CPack)
|
|
|
|
# install the configuration targets
|
|
install(EXPORT MathFunctionsTargets
|
|
FILE MathFunctionsTargets.cmake
|
|
DESTINATION lib/cmake/MathFunctions
|
|
)
|
|
|
|
include(CMakePackageConfigHelpers)
|
|
# generate the config file that is includes the exports
|
|
configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in
|
|
"${CMAKE_CURRENT_BINARY_DIR}/MathFunctionsConfig.cmake"
|
|
INSTALL_DESTINATION "lib/cmake/example"
|
|
NO_SET_AND_CHECK_MACRO
|
|
NO_CHECK_REQUIRED_COMPONENTS_MACRO
|
|
)
|
|
# generate the version file for the config file
|
|
write_basic_package_version_file(
|
|
"${CMAKE_CURRENT_BINARY_DIR}/MathFunctionsConfigVersion.cmake"
|
|
VERSION "${Tutorial_VERSION_MAJOR}.${Tutorial_VERSION_MINOR}"
|
|
COMPATIBILITY AnyNewerVersion
|
|
)
|
|
|
|
# install the generated configuration files
|
|
install(FILES
|
|
${CMAKE_CURRENT_BINARY_DIR}/MathFunctionsConfig.cmake
|
|
${CMAKE_CURRENT_BINARY_DIR}/MathFunctionsConfigVersion.cmake
|
|
DESTINATION lib/cmake/MathFunctions
|
|
)
|
|
|
|
# generate the export targets for the build tree
|
|
# needs to be after the install(TARGETS ) command
|
|
export(EXPORT MathFunctionsTargets
|
|
FILE "${CMAKE_CURRENT_BINARY_DIR}/MathFunctionsTargets.cmake"
|
|
)
|