Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use new features of CMake-3.8.0 #329

Closed
KineticTheory opened this issue Oct 13, 2017 · 1 comment
Closed

Use new features of CMake-3.8.0 #329

KineticTheory opened this issue Oct 13, 2017 · 1 comment

Comments

@KineticTheory
Copy link
Collaborator

KineticTheory commented Oct 13, 2017

New features found in CMake-3.8

CUDA

  • CMake learned to support "CUDA" as a first-class language that can be enabled via the "project()" and "enable_language()" commands.
  • "CUDA" is currently supported by the Makefile Generators and the "Ninja" generator on Linux, macOS, and Windows. Support for the Visual Studio IDE is under development but not included in this release.
  • The NVIDIA CUDA Toolkit compiler ("nvcc") is supported.

C & C++

  • The "Compile Features" functionality now offers meta-features that request compiler modes for specific language standard levels (e.g. "cxx_std_11"). See "CMAKE_C_KNOWN_FEATURES" and "CMAKE_CXX_KNOWN_FEATURES".
  • The "Compile Features" functionality is now aware of the availability of C99 in gcc since version 3.4.

Commands

  • The "add_custom_command()" and "add_custom_target()" commands learned the option "COMMAND_EXPAND_LISTS" which causes lists in the
    "COMMAND" argument to be expanded, including lists created by generator expressions.
  • The "string(TIMESTAMP)" command learned to treat "%%" as a way to encode plain "%".
  • The "string(TIMESTAMP)" command will now honor the"SOURCE_DATE_EPOCH" environment variable and use its value instead of the current time.
  • The "try_compile()" command source file signature gained new options to specify the language standard to use in the generated test project.
  • The "try_compile()" command source file signature now honors language standard variables like "CMAKE_CXX_STANDARD". See policy "CMP0067".

Variables

  • A "CMAKE_VS_INCLUDE_PACKAGE_TO_DEFAULT_BUILD" variable was added to tell Visual Studio Generators for VS 2010 and above to include the "PACKAGE" target in the default build, similar to the existing "CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD" variable for the "INSTALL" target.

Properties

  • A "BUILD_RPATH" target property and corresponding "CMAKE_BUILD_RPATH" variable were added to support custom "RPATH" locations to be added to binaries in the build tree.
  • The "COMPILE_FLAGS" source file property learned to support "generator expressions".
  • Imported Interface Libraries learned new "IMPORTED_LIBNAME" and "IMPORTED_LIBNAME_" target properties to specify a link library name since interface libraries do not build their own library files.
  • A "MANUALLY_ADDED_DEPENDENCIES" target property has been added. It provides a read-only list of dependencies that have been added with the "add_dependencies()" command.
  • The "MAP_IMPORTED_CONFIG_" target property learned to interpret empty list elements as referring to the configuration-less imported location specified by "IMPORTED_LOCATION".
  • The "NO_SYSTEM_FROM_IMPORTED" target property is now supported on Imported Interface Libraries.
  • A "VS_COPY_TO_OUT_DIR" source file property was added to tell Visual Studio Generators for VS 2010 and above whether or not a file should be copied to the output directory.
  • A "VS_DEBUGGER_WORKING_DIRECTORY" target property was added to tell Visual Studio Generators for VS 2010 and above what debugger working directory should be set for the target.
  • A "VS_USER_PROPS" target property was added to tell Visual Studio Generators for VS 2010 and above to use a custom MSBuild user ".props" file.
  • A "XCODE_EMIT_EFFECTIVE_PLATFORM_NAME" global property was added to tell the "Xcode" generator whether to emit the "EFFECTIVE_PLATFORM_NAME" variable. This is useful when building with multiple SDKs like "macosx" and "iphoneos" in parallel.
  • New "XCODE_PRODUCT_TYPE" and "XCODE_EXPLICIT_FILE_TYPE" target properties were created to tell the "Xcode" generator to use custom values of the corresponding attributes for a target in the generated Xcode project.

Modules

  • FindMPI: Use physical cores for MPIEXEC_MAX_NUMPROCS
  • The "ExternalData" module learned to support multiple content links for one data file using different hashes, e.g. "img.png.sha256" and "img.png.sha1". This allows objects to be fetched from sources indexed by different hash algorithms.
  • The "ExternalProject" module gained the "GIT_PROGRESS" option to force Git to show progress when cloning repositories.
  • The "ExternalProject" module gained a "GIT_CONFIG" option to pass " --config" options to Git when cloning repositories.
  • The "FeatureSummary" module "feature_summary()" command now accepts a new "QUIET_ON_EMPTY" option that suppresses the output when the list of packages that belong to the selected category is empty.
  • The "FeatureSummary" module "add_feature_info()" command now accepts lists of dependencies for deciding whether a feature is enabled or not.
  • The package types accepted by the "FeatureSummary" module can now be tweaked by changing the "FeatureSummary_PKG_TYPES", "FeatureSummary_REQUIRED_PKG_TYPES" and "FeatureSummary_DEFAULT_PKG_TYPE" global properties.

CTest

  • The "ctest_memcheck()" command gained a "DEFECT_COUNT " option to capture the number of memory defects detected.
  • The "ctest_memcheck()" command learned to read the location of suppressions files for sanitizers from the "CTEST_MEMORYCHECK_SUPPRESSIONS_FILE" variable.
  • The "ctest_memcheck()" command learned to support "LeakSanitizer" independently from "AddressSanitizer".
  • The "ctest_update()" command "CDASH_UPLOAD" signature was taught to honor the "RETRY_COUNT", "RETRY_DELAY", and "QUIET" options.

Other

  • A new generator expression "$IF:cond,true-value,false-value" was added. It resolves to the true-value if the condition is "1" and resolves to the false-value if the condition is "0".

Deprecated and Removed Features

  • The "FeatureSummary" module commands "set_package_info()", "set_feature_info()", "print_enabled_features()", and "print_disabled_features()" are now deprecated.

Other Changes

  • If a command specified by the "_CLANG_TIDY" target property returns non-zero at build time this is now treated as an error instead of silently ignored.
  • The "ctest_memcheck()" command no longer automatically adds "leak_check=1" to the options used by "AddressSanitizer". The default behavior of "AddressSanitizer" is to run LeakSanitizer to check leaks unless "leak_check=0".
  • The "ctest_memcheck()" command was fixed to correctly append extra sanitizer options read from the "CTEST_MEMORYCHECK_SANITIZER_OPTIONS" variable to the environment variables used internally by the sanitizers.
  • The "FeatureSummary" module "set_package_properties()" command no longer forces the package type to "OPTIONAL" when the type is not explicitly set.
  • The "Compile Features" functionality is now aware of features supported by Intel C++ compilers versions 12.1 through 17.0 on UNIX and Windows platforms.
  • Calls to the "FindPkgConfig" module "pkg_check_modules()" command following a successful call learned to re-evaluate the cached values for a given prefix after changes to the parameters to the command for that prefix.
  • The "try_compile()" command source file signature now honors the "CMAKE_WARN_DEPRECATED" variable value in the generated test project.
@KineticTheory
Copy link
Collaborator Author

Replace with ticket #450 (the only remaining feature that needs to be evaluated).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant