diff options
| author | nicole mazzuca <mazzucan@outlook.com> | 2020-08-10 12:32:34 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-08-10 12:32:34 -0700 |
| commit | 895678db8f8bfc3c1988a118b3bb5a13ea4d5248 (patch) | |
| tree | f341f05574a16589e7e0ee15446a907e142e679c /toolsrc/cmake | |
| parent | 481738beaeb77bca19ff7fa01b4c02be7fc9deb2 (diff) | |
| download | vcpkg-895678db8f8bfc3c1988a118b3bb5a13ea4d5248.tar.gz vcpkg-895678db8f8bfc3c1988a118b3bb5a13ea4d5248.zip | |
[vcpkg] Rewrite CMake build system to be more target-based (#12698)
* Change to using more target-focused cmake
* Add vcpkg_target_add_warning_options
* targetify the rest
* move the globs together
* Force-include pch.h on non-windows
* Rename VCPKGLIB_NON_PCH_* to VCPKGLIB_* in globs
* Remove `include "pch.h"`s
* missed a few lines
* fix build
* fix CMAKE_CURRENT_SOURCE_DIR
* try to fix VCPKG_REQUIRE_LINK_CXXFS
* change msvc-stl logic
* fix build
* CR
* clang-format
* Apply suggestions from code review
Thanks @ras0219!
Co-authored-by: JackBoosY <yuzaiyang@beyondsoft.com>
Co-authored-by: ras0219 <533828+ras0219@users.noreply.github.com>
Diffstat (limited to 'toolsrc/cmake')
| -rw-r--r-- | toolsrc/cmake/utilities.cmake | 70 |
1 files changed, 61 insertions, 9 deletions
diff --git a/toolsrc/cmake/utilities.cmake b/toolsrc/cmake/utilities.cmake index b99063a65..f04c1ddbb 100644 --- a/toolsrc/cmake/utilities.cmake +++ b/toolsrc/cmake/utilities.cmake @@ -77,7 +77,7 @@ int main() {} _VCPKG_STANDARD_LIBRARY_LIBCXX) check_cxx_source_compiles([[ #include <ciso646> -#if !defined(_MSVC_STL_VERSION) +#if !defined(_MSVC_STL_VERSION) && !(defined(_MSC_VER) && _MSC_VER <= 1900) #error "not MSVC stl" #endif int main() {} @@ -101,7 +101,7 @@ int main() {} endif() endfunction() -# Outputs to Cache: VCPKG_USE_STD_FILESYSTEM, VCPKG_REQUIRE_LINK_CXXFS +# Outputs to Cache: VCPKG_USE_STD_FILESYSTEM, VCPKG_CXXFS_LIBRARY function(vcpkg_detect_std_filesystem) vcpkg_detect_standard_library() @@ -129,10 +129,14 @@ int main() {} int main() {} ]] _VCPKG_USE_STD_FILESYSTEM) + + if(_VCPKG_REQUIRE_LINK_CXXFS) + set(_VCPKG_CXXFS_LIBRARY "stdc++fs") + endif() elseif(VCPKG_STANDARD_LIBRARY STREQUAL "libc++") if(CMAKE_CXX_COMPILER_ID MATCHES "AppleClang") # AppleClang never requires (or allows) -lc++fs, even with libc++ version 8.0.0 - set(_VCPKG_REQUIRE_LINK_CXXFS OFF) + set(_VCPKG_CXXFS_LIBRARY OFF) else() check_cxx_source_compiles([[ #include <ciso646> @@ -142,6 +146,10 @@ int main() {} int main() {} ]] _VCPKG_REQUIRE_LINK_CXXFS) + + if(_VCPKG_REQUIRE_LINK_CXXFS) + set(_VCPKG_CXXFS_LIBRARY "c++fs") + endif() endif() # We don't support versions of libc++ < 7.0.0, and libc++ 7.0.0 has <filesystem> @@ -155,16 +163,16 @@ int main() {} int main() {}" _VCPKG_USE_STD_FILESYSTEM) - set(_VCPKG_REQUIRE_LINK_CXXFS OFF) + set(_VCPKG_CXXFS_LIBRARY OFF) endif() set(VCPKG_USE_STD_FILESYSTEM ${_VCPKG_USE_STD_FILESYSTEM} CACHE BOOL "Whether to use <filesystem>, as opposed to <experimental/filesystem>" FORCE) - set(VCPKG_REQUIRE_LINK_CXXFS ${_VCPKG_REQUIRE_LINK_CXXFS} - CACHE BOOL - "Whether it's required to pass -l[std]c++fs in order to use <filesystem>" + set(VCPKG_CXXFS_LIBRARY ${_VCPKG_CXXFS_LIBRARY} + CACHE STRING + "Library to link (if any) in order to use <filesystem>" FORCE) if(VCPKG_USE_STD_FILESYSTEM) @@ -172,10 +180,54 @@ int main() {} else() set(msg "<experimental/filesystem>") endif() - if(VCPKG_REQUIRE_LINK_CXXFS) - set(msg "${msg} with -l[std]c++fs") + if(VCPKG_CXXFS_LIBRARY) + set(msg "${msg} with -l${VCPKG_CXXFS_LIBRARY}") endif() message(STATUS "Detecting how to use the C++ filesystem library - ${msg}") endif() endfunction() + +function(vcpkg_target_add_warning_options TARGET) + if(MSVC) + # either MSVC, or clang-cl + target_compile_options(${TARGET} PRIVATE -FC) + + if (MSVC_VERSION GREATER 1900) + # Visual Studio 2017 or later + target_compile_options(${TARGET} PRIVATE -permissive- -utf-8) + endif() + + if(VCPKG_DEVELOPMENT_WARNINGS) + target_compile_options(${TARGET} PRIVATE -W4) + if(VCPKG_COMPILER STREQUAL "clang") + target_compile_options(${TARGET} PRIVATE -Wmissing-prototypes -Wno-missing-field-initializers) + else() + target_compile_options(${TARGET} PRIVATE -analyze) + endif() + else() + target_compile_options(${TARGET} PRIVATE -W3) + endif() + + if(VCPKG_WARNINGS_AS_ERRORS) + target_compile_options(${TARGET} PRIVATE -WX) + endif() + else() + if(VCPKG_DEVELOPMENT_WARNINGS) + target_compile_options(${TARGET} PRIVATE + -Wall -Wextra -Wpedantic + -Wno-unknown-pragmas -Wno-missing-field-initializers -Wno-redundant-move) + + # GCC and clang have different names for the same warning + if(VCPKG_COMPILER STREQUAL "gcc") + target_compile_options(${TARGET} PRIVATE -Wmissing-declarations) + elseif(VCPKG_COMPILER STREQUAL "clang") + target_compile_options(${TARGET} PRIVATE -Wmissing-prototypes) + endif() + endif() + + if(VCPKG_WARNINGS_AS_ERRORS) + target_compile_options(${TARGET} PRIVATE -Werror) + endif() + endif() +endfunction() |
