STL/stl/CMakeLists.txt

560 строки
29 KiB
CMake

# Copyright (c) Microsoft Corporation.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
set(HEADERS
${CMAKE_CURRENT_LIST_DIR}/inc/__msvc_all_public_headers.hpp
${CMAKE_CURRENT_LIST_DIR}/inc/__msvc_system_error_abi.hpp
${CMAKE_CURRENT_LIST_DIR}/inc/__msvc_tzdb.hpp
${CMAKE_CURRENT_LIST_DIR}/inc/__msvc_xlocinfo_types.hpp
${CMAKE_CURRENT_LIST_DIR}/inc/algorithm
${CMAKE_CURRENT_LIST_DIR}/inc/any
${CMAKE_CURRENT_LIST_DIR}/inc/array
${CMAKE_CURRENT_LIST_DIR}/inc/atomic
${CMAKE_CURRENT_LIST_DIR}/inc/barrier
${CMAKE_CURRENT_LIST_DIR}/inc/bit
${CMAKE_CURRENT_LIST_DIR}/inc/bitset
${CMAKE_CURRENT_LIST_DIR}/inc/cassert
${CMAKE_CURRENT_LIST_DIR}/inc/ccomplex
${CMAKE_CURRENT_LIST_DIR}/inc/cctype
${CMAKE_CURRENT_LIST_DIR}/inc/cerrno
${CMAKE_CURRENT_LIST_DIR}/inc/cfenv
${CMAKE_CURRENT_LIST_DIR}/inc/cfloat
${CMAKE_CURRENT_LIST_DIR}/inc/charconv
${CMAKE_CURRENT_LIST_DIR}/inc/chrono
${CMAKE_CURRENT_LIST_DIR}/inc/cinttypes
${CMAKE_CURRENT_LIST_DIR}/inc/ciso646
${CMAKE_CURRENT_LIST_DIR}/inc/climits
${CMAKE_CURRENT_LIST_DIR}/inc/clocale
${CMAKE_CURRENT_LIST_DIR}/inc/cmath
${CMAKE_CURRENT_LIST_DIR}/inc/codecvt
${CMAKE_CURRENT_LIST_DIR}/inc/compare
${CMAKE_CURRENT_LIST_DIR}/inc/complex
${CMAKE_CURRENT_LIST_DIR}/inc/concepts
${CMAKE_CURRENT_LIST_DIR}/inc/condition_variable
${CMAKE_CURRENT_LIST_DIR}/inc/coroutine
${CMAKE_CURRENT_LIST_DIR}/inc/csetjmp
${CMAKE_CURRENT_LIST_DIR}/inc/csignal
${CMAKE_CURRENT_LIST_DIR}/inc/cstdalign
${CMAKE_CURRENT_LIST_DIR}/inc/cstdarg
${CMAKE_CURRENT_LIST_DIR}/inc/cstdbool
${CMAKE_CURRENT_LIST_DIR}/inc/cstddef
${CMAKE_CURRENT_LIST_DIR}/inc/cstdint
${CMAKE_CURRENT_LIST_DIR}/inc/cstdio
${CMAKE_CURRENT_LIST_DIR}/inc/cstdlib
${CMAKE_CURRENT_LIST_DIR}/inc/cstring
${CMAKE_CURRENT_LIST_DIR}/inc/ctgmath
${CMAKE_CURRENT_LIST_DIR}/inc/ctime
${CMAKE_CURRENT_LIST_DIR}/inc/cuchar
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/8859_1
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/8859_10
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/8859_13
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/8859_14
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/8859_15
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/8859_16
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/8859_2
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/8859_3
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/8859_4
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/8859_5
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/8859_6
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/8859_7
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/8859_8
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/8859_9
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/baltic
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/big5
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/cp037
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/cp1006
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/cp1026
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/cp1250
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/cp1251
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/cp1252
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/cp1253
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/cp1254
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/cp1255
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/cp1256
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/cp1257
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/cp1258
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/cp424
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/cp437
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/cp500
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/cp737
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/cp775
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/cp850
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/cp852
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/cp855
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/cp856
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/cp857
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/cp860
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/cp861
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/cp862
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/cp863
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/cp864
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/cp865
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/cp866
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/cp869
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/cp874
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/cp875
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/cp932
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/cp936
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/cp949
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/cp950
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/cyrillic
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/ebcdic
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/euc
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/euc_0208
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/gb12345
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/gb2312
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/greek
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/iceland
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/jis
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/jis0201
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/jis_0208
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/ksc5601
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/latin2
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/one_one
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/roman
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/sjis
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/sjis_0208
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/turkish
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/utf16
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/utf8
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/utf8_utf16
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/wbuffer
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/wstring
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/xjis
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/xone_byte
${CMAKE_CURRENT_LIST_DIR}/inc/cvt/xtwo_byte
${CMAKE_CURRENT_LIST_DIR}/inc/cwchar
${CMAKE_CURRENT_LIST_DIR}/inc/cwctype
${CMAKE_CURRENT_LIST_DIR}/inc/deque
${CMAKE_CURRENT_LIST_DIR}/inc/exception
${CMAKE_CURRENT_LIST_DIR}/inc/execution
${CMAKE_CURRENT_LIST_DIR}/inc/experimental/coroutine
${CMAKE_CURRENT_LIST_DIR}/inc/experimental/deque
${CMAKE_CURRENT_LIST_DIR}/inc/experimental/filesystem
${CMAKE_CURRENT_LIST_DIR}/inc/experimental/forward_list
${CMAKE_CURRENT_LIST_DIR}/inc/experimental/generator
${CMAKE_CURRENT_LIST_DIR}/inc/experimental/list
${CMAKE_CURRENT_LIST_DIR}/inc/experimental/map
${CMAKE_CURRENT_LIST_DIR}/inc/experimental/resumable
${CMAKE_CURRENT_LIST_DIR}/inc/experimental/set
${CMAKE_CURRENT_LIST_DIR}/inc/experimental/string
${CMAKE_CURRENT_LIST_DIR}/inc/experimental/unordered_map
${CMAKE_CURRENT_LIST_DIR}/inc/experimental/unordered_set
${CMAKE_CURRENT_LIST_DIR}/inc/experimental/vector
${CMAKE_CURRENT_LIST_DIR}/inc/filesystem
${CMAKE_CURRENT_LIST_DIR}/inc/format
${CMAKE_CURRENT_LIST_DIR}/inc/forward_list
${CMAKE_CURRENT_LIST_DIR}/inc/fstream
${CMAKE_CURRENT_LIST_DIR}/inc/functional
${CMAKE_CURRENT_LIST_DIR}/inc/future
${CMAKE_CURRENT_LIST_DIR}/inc/hash_map
${CMAKE_CURRENT_LIST_DIR}/inc/hash_set
${CMAKE_CURRENT_LIST_DIR}/inc/header-units.json
${CMAKE_CURRENT_LIST_DIR}/inc/initializer_list
${CMAKE_CURRENT_LIST_DIR}/inc/iomanip
${CMAKE_CURRENT_LIST_DIR}/inc/ios
${CMAKE_CURRENT_LIST_DIR}/inc/iosfwd
${CMAKE_CURRENT_LIST_DIR}/inc/iostream
${CMAKE_CURRENT_LIST_DIR}/inc/iso646.h
${CMAKE_CURRENT_LIST_DIR}/inc/istream
${CMAKE_CURRENT_LIST_DIR}/inc/iterator
${CMAKE_CURRENT_LIST_DIR}/inc/latch
${CMAKE_CURRENT_LIST_DIR}/inc/limits
${CMAKE_CURRENT_LIST_DIR}/inc/list
${CMAKE_CURRENT_LIST_DIR}/inc/locale
${CMAKE_CURRENT_LIST_DIR}/inc/map
${CMAKE_CURRENT_LIST_DIR}/inc/memory
${CMAKE_CURRENT_LIST_DIR}/inc/memory_resource
${CMAKE_CURRENT_LIST_DIR}/inc/mutex
${CMAKE_CURRENT_LIST_DIR}/inc/new
${CMAKE_CURRENT_LIST_DIR}/inc/numbers
${CMAKE_CURRENT_LIST_DIR}/inc/numeric
${CMAKE_CURRENT_LIST_DIR}/inc/optional
${CMAKE_CURRENT_LIST_DIR}/inc/ostream
${CMAKE_CURRENT_LIST_DIR}/inc/queue
${CMAKE_CURRENT_LIST_DIR}/inc/random
${CMAKE_CURRENT_LIST_DIR}/inc/ranges
${CMAKE_CURRENT_LIST_DIR}/inc/ratio
${CMAKE_CURRENT_LIST_DIR}/inc/regex
${CMAKE_CURRENT_LIST_DIR}/inc/scoped_allocator
${CMAKE_CURRENT_LIST_DIR}/inc/semaphore
${CMAKE_CURRENT_LIST_DIR}/inc/set
${CMAKE_CURRENT_LIST_DIR}/inc/shared_mutex
${CMAKE_CURRENT_LIST_DIR}/inc/source_location
${CMAKE_CURRENT_LIST_DIR}/inc/span
${CMAKE_CURRENT_LIST_DIR}/inc/spanstream
${CMAKE_CURRENT_LIST_DIR}/inc/sstream
${CMAKE_CURRENT_LIST_DIR}/inc/stack
${CMAKE_CURRENT_LIST_DIR}/inc/stdatomic.h
${CMAKE_CURRENT_LIST_DIR}/inc/stdexcept
${CMAKE_CURRENT_LIST_DIR}/inc/stop_token
${CMAKE_CURRENT_LIST_DIR}/inc/streambuf
${CMAKE_CURRENT_LIST_DIR}/inc/string
${CMAKE_CURRENT_LIST_DIR}/inc/string_view
${CMAKE_CURRENT_LIST_DIR}/inc/strstream
${CMAKE_CURRENT_LIST_DIR}/inc/syncstream
${CMAKE_CURRENT_LIST_DIR}/inc/system_error
${CMAKE_CURRENT_LIST_DIR}/inc/thread
${CMAKE_CURRENT_LIST_DIR}/inc/tuple
${CMAKE_CURRENT_LIST_DIR}/inc/type_traits
${CMAKE_CURRENT_LIST_DIR}/inc/typeindex
${CMAKE_CURRENT_LIST_DIR}/inc/typeinfo
${CMAKE_CURRENT_LIST_DIR}/inc/unordered_map
${CMAKE_CURRENT_LIST_DIR}/inc/unordered_set
${CMAKE_CURRENT_LIST_DIR}/inc/use_ansi.h
${CMAKE_CURRENT_LIST_DIR}/inc/utility
${CMAKE_CURRENT_LIST_DIR}/inc/valarray
${CMAKE_CURRENT_LIST_DIR}/inc/variant
${CMAKE_CURRENT_LIST_DIR}/inc/vector
${CMAKE_CURRENT_LIST_DIR}/inc/version
${CMAKE_CURRENT_LIST_DIR}/inc/xatomic.h
${CMAKE_CURRENT_LIST_DIR}/inc/xatomic_wait.h
${CMAKE_CURRENT_LIST_DIR}/inc/xbit_ops.h
${CMAKE_CURRENT_LIST_DIR}/inc/xcall_once.h
${CMAKE_CURRENT_LIST_DIR}/inc/xcharconv.h
${CMAKE_CURRENT_LIST_DIR}/inc/xcharconv_ryu.h
${CMAKE_CURRENT_LIST_DIR}/inc/xcharconv_ryu_tables.h
${CMAKE_CURRENT_LIST_DIR}/inc/xerrc.h
${CMAKE_CURRENT_LIST_DIR}/inc/xfacet
${CMAKE_CURRENT_LIST_DIR}/inc/xfilesystem_abi.h
${CMAKE_CURRENT_LIST_DIR}/inc/xhash
${CMAKE_CURRENT_LIST_DIR}/inc/xiosbase
${CMAKE_CURRENT_LIST_DIR}/inc/xkeycheck.h
${CMAKE_CURRENT_LIST_DIR}/inc/xlocale
${CMAKE_CURRENT_LIST_DIR}/inc/xlocbuf
${CMAKE_CURRENT_LIST_DIR}/inc/xlocinfo
${CMAKE_CURRENT_LIST_DIR}/inc/xlocmes
${CMAKE_CURRENT_LIST_DIR}/inc/xlocmon
${CMAKE_CURRENT_LIST_DIR}/inc/xlocnum
${CMAKE_CURRENT_LIST_DIR}/inc/xloctime
${CMAKE_CURRENT_LIST_DIR}/inc/xmemory
${CMAKE_CURRENT_LIST_DIR}/inc/xnode_handle.h
${CMAKE_CURRENT_LIST_DIR}/inc/xpolymorphic_allocator.h
${CMAKE_CURRENT_LIST_DIR}/inc/xsmf_control.h
${CMAKE_CURRENT_LIST_DIR}/inc/xstddef
${CMAKE_CURRENT_LIST_DIR}/inc/xstring
${CMAKE_CURRENT_LIST_DIR}/inc/xthreads.h
${CMAKE_CURRENT_LIST_DIR}/inc/xtimec.h
${CMAKE_CURRENT_LIST_DIR}/inc/xtr1common
${CMAKE_CURRENT_LIST_DIR}/inc/xtree
${CMAKE_CURRENT_LIST_DIR}/inc/xutility
${CMAKE_CURRENT_LIST_DIR}/inc/ymath.h
${CMAKE_CURRENT_LIST_DIR}/inc/yvals.h
${CMAKE_CURRENT_LIST_DIR}/inc/yvals_core.h
)
foreach(header ${HEADERS})
file(RELATIVE_PATH _header_path "${CMAKE_CURRENT_LIST_DIR}/inc" "${header}")
configure_file("${header}" "${PROJECT_BINARY_DIR}/out/inc/${_header_path}" COPYONLY)
endforeach()
# Objs that exist in both libcpmt[d][01].lib and msvcprt[d].lib.
set(IMPLIB_SOURCES
${CMAKE_CURRENT_LIST_DIR}/src/filesystem.cpp
${CMAKE_CURRENT_LIST_DIR}/src/format.cpp
${CMAKE_CURRENT_LIST_DIR}/src/locale0_implib.cpp
${CMAKE_CURRENT_LIST_DIR}/src/nothrow.cpp
${CMAKE_CURRENT_LIST_DIR}/src/sharedmutex.cpp
${CMAKE_CURRENT_LIST_DIR}/src/syserror_import_lib.cpp
${CMAKE_CURRENT_LIST_DIR}/src/vector_algorithms.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xonce2.cpp
)
# The following files are linked in msvcp140[d][_clr].dll.
set(DLL_SOURCES
${CMAKE_CURRENT_LIST_DIR}/src/dllmain.cpp
${CMAKE_CURRENT_LIST_DIR}/src/instances.cpp
)
# Sources that must not be compiled with /GL, since they contain CRT initializers.
set(INITIALIZER_SOURCES
${CMAKE_CURRENT_LIST_DIR}/src/winapisupp.cpp
)
set(SOURCES
${CMAKE_CURRENT_LIST_DIR}/src/StlCompareStringA.cpp
${CMAKE_CURRENT_LIST_DIR}/src/StlCompareStringW.cpp
${CMAKE_CURRENT_LIST_DIR}/src/StlLCMapStringA.cpp
${CMAKE_CURRENT_LIST_DIR}/src/StlLCMapStringW.cpp
${CMAKE_CURRENT_LIST_DIR}/src/_tolower.cpp
${CMAKE_CURRENT_LIST_DIR}/src/_toupper.cpp
${CMAKE_CURRENT_LIST_DIR}/src/atomic.cpp
${CMAKE_CURRENT_LIST_DIR}/src/cerr.cpp
${CMAKE_CURRENT_LIST_DIR}/src/cin.cpp
${CMAKE_CURRENT_LIST_DIR}/src/clog.cpp
${CMAKE_CURRENT_LIST_DIR}/src/cond.cpp
${CMAKE_CURRENT_LIST_DIR}/src/cout.cpp
${CMAKE_CURRENT_LIST_DIR}/src/cthread.cpp
${CMAKE_CURRENT_LIST_DIR}/src/filesys.cpp
${CMAKE_CURRENT_LIST_DIR}/src/fiopen.cpp
${CMAKE_CURRENT_LIST_DIR}/src/future.cpp
${CMAKE_CURRENT_LIST_DIR}/src/iomanip.cpp
${CMAKE_CURRENT_LIST_DIR}/src/ios.cpp
${CMAKE_CURRENT_LIST_DIR}/src/iosptrs.cpp
${CMAKE_CURRENT_LIST_DIR}/src/iostream.cpp
${CMAKE_CURRENT_LIST_DIR}/src/locale.cpp
${CMAKE_CURRENT_LIST_DIR}/src/locale0.cpp
${CMAKE_CURRENT_LIST_DIR}/src/multprec.cpp
${CMAKE_CURRENT_LIST_DIR}/src/mutex.cpp
${CMAKE_CURRENT_LIST_DIR}/src/pplerror.cpp
${CMAKE_CURRENT_LIST_DIR}/src/ppltasks.cpp
${CMAKE_CURRENT_LIST_DIR}/src/raisehan.cpp
${CMAKE_CURRENT_LIST_DIR}/src/stdhndlr.cpp
${CMAKE_CURRENT_LIST_DIR}/src/stdthrow.cpp
${CMAKE_CURRENT_LIST_DIR}/src/syserror.cpp
${CMAKE_CURRENT_LIST_DIR}/src/taskscheduler.cpp
${CMAKE_CURRENT_LIST_DIR}/src/thread0.cpp
${CMAKE_CURRENT_LIST_DIR}/src/uncaught_exception.cpp
${CMAKE_CURRENT_LIST_DIR}/src/uncaught_exceptions.cpp
${CMAKE_CURRENT_LIST_DIR}/src/ushcerr.cpp
${CMAKE_CURRENT_LIST_DIR}/src/ushcin.cpp
${CMAKE_CURRENT_LIST_DIR}/src/ushclog.cpp
${CMAKE_CURRENT_LIST_DIR}/src/ushcout.cpp
${CMAKE_CURRENT_LIST_DIR}/src/ushiostr.cpp
${CMAKE_CURRENT_LIST_DIR}/src/wcerr.cpp
${CMAKE_CURRENT_LIST_DIR}/src/wcin.cpp
${CMAKE_CURRENT_LIST_DIR}/src/wclog.cpp
${CMAKE_CURRENT_LIST_DIR}/src/wcout.cpp
${CMAKE_CURRENT_LIST_DIR}/src/winapinls.cpp
${CMAKE_CURRENT_LIST_DIR}/src/wiostrea.cpp
${CMAKE_CURRENT_LIST_DIR}/src/wlocale.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xalloc.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xcosh.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xdateord.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xdint.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xdnorm.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xdscale.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xdtento.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xdtest.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xdunscal.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xexp.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xfcosh.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xfdint.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xfdnorm.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xfdscale.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xfdtento.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xfdtest.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xfdunsca.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xferaise.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xfexp.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xfprec.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xfsinh.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xfvalues.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xgetwctype.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xlcosh.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xldint.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xldscale.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xldtento.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xldtest.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xldunsca.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xlexp.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xlgamma.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xlocale.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xlock.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xlpoly.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xlprec.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xlsinh.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xlvalues.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xmbtowc.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xmtx.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xnotify.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xonce.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xpoly.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xprec.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xrngabort.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xrngdev.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xsinh.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xstod.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xstof.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xstoflt.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xstol.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xstold.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xstoll.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xstopfx.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xstoul.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xstoull.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xstoxflt.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xstrcoll.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xstrxfrm.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xthrow.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xtime.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xtowlower.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xtowupper.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xvalues.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xwcscoll.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xwcsxfrm.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xwctomb.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xwstod.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xwstof.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xwstoflt.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xwstold.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xwstopfx.cpp
${CMAKE_CURRENT_LIST_DIR}/src/xwstoxfl.cpp
)
set(EHA_SOURCES
${CMAKE_CURRENT_LIST_DIR}/src/excptptr.cpp
)
set(SOURCES_SATELLITE_1
${CMAKE_CURRENT_LIST_DIR}/src/memory_resource.cpp
)
set(SOURCES_SATELLITE_2
${CMAKE_CURRENT_LIST_DIR}/src/special_math.cpp
)
set(SOURCES_SATELLITE_ATOMIC_WAIT
${CMAKE_CURRENT_LIST_DIR}/src/atomic_wait.cpp
${CMAKE_CURRENT_LIST_DIR}/src/parallel_algorithms.cpp
${CMAKE_CURRENT_LIST_DIR}/src/syncstream.cpp
${CMAKE_CURRENT_LIST_DIR}/src/tzdb.cpp
)
set(SOURCES_SATELLITE_CODECVT_IDS
${CMAKE_CURRENT_LIST_DIR}/src/ulocale.cpp
)
# Objs that exist only in libcpmt[d][01].lib.
set(STATIC_SOURCES
${SOURCES_SATELLITE_1}
${SOURCES_SATELLITE_2}
${SOURCES_SATELLITE_ATOMIC_WAIT}
${SOURCES_SATELLITE_CODECVT_IDS}
)
# Objs that exist in all satellite DLLs
set(SATELLITE_DLL_SOURCES
${CMAKE_CURRENT_LIST_DIR}/src/dllmain_satellite.cpp
)
add_library(std_init_once_begin_initialize OBJECT IMPORTED)
add_library(std_init_once_complete OBJECT IMPORTED)
set_target_properties(std_init_once_begin_initialize PROPERTIES IMPORTED_OBJECTS "${CMAKE_CURRENT_LIST_DIR}/aliases/${VCLIBS_I386_OR_AMD64}/std_init_once_begin_initialize.obj")
set_target_properties(std_init_once_complete PROPERTIES IMPORTED_OBJECTS "${CMAKE_CURRENT_LIST_DIR}/aliases/${VCLIBS_I386_OR_AMD64}/std_init_once_complete.obj")
add_compile_definitions(_CRTBLD _VCRT_ALLOW_INTERNALS _HAS_OLD_IOSTREAMS_MEMBERS=1 _STL_CONCRT_SUPPORT)
include_directories(BEFORE
"${CMAKE_CURRENT_LIST_DIR}/inc"
"${TOOLSET_ROOT_DIR}/crt/src/concrt"
"${TOOLSET_ROOT_DIR}/crt/src/vcruntime"
)
function(add_stl_dlls D_SUFFIX THIS_CONFIG_DEFINITIONS THIS_CONFIG_COMPILE_OPTIONS GL_FLAG THIS_CONFIG_LINK_OPTIONS)
# msvcp140.dll
add_library(msvcp${D_SUFFIX}_objects OBJECT ${DLL_SOURCES} ${SOURCES})
target_compile_definitions(msvcp${D_SUFFIX}_objects PRIVATE "CRTDLL2;_DLL;${THIS_CONFIG_DEFINITIONS}")
target_compile_options(msvcp${D_SUFFIX}_objects PRIVATE "${THIS_CONFIG_COMPILE_OPTIONS};${GL_FLAG};/EHsc")
add_library(msvcp${D_SUFFIX}_init_objects OBJECT ${INITIALIZER_SOURCES})
target_compile_definitions(msvcp${D_SUFFIX}_init_objects PRIVATE "CRTDLL2;_DLL;${THIS_CONFIG_DEFINITIONS}")
target_compile_options(msvcp${D_SUFFIX}_init_objects PRIVATE "${THIS_CONFIG_COMPILE_OPTIONS};/EHsc")
add_library(msvcp${D_SUFFIX}_eha_objects OBJECT ${EHA_SOURCES})
target_compile_definitions(msvcp${D_SUFFIX}_eha_objects PRIVATE "CRTDLL2;_DLL;${THIS_CONFIG_DEFINITIONS}")
target_compile_options(msvcp${D_SUFFIX}_eha_objects PRIVATE "${THIS_CONFIG_COMPILE_OPTIONS};${GL_FLAG};/EHa")
add_library(msvcp${D_SUFFIX} SHARED)
target_link_libraries(msvcp${D_SUFFIX} PRIVATE msvcp${D_SUFFIX}_eha_objects msvcp${D_SUFFIX}_objects msvcp${D_SUFFIX}_init_objects "${TOOLSET_LIB}/vcruntime${D_SUFFIX}.lib" "${TOOLSET_LIB}/msvcrt${D_SUFFIX}.lib" "ucrt${D_SUFFIX}.lib")
set_target_properties(msvcp${D_SUFFIX} PROPERTIES ARCHIVE_OUTPUT_NAME "msvcp140_base${D_SUFFIX}${VCLIBS_SUFFIX}")
set_target_properties(msvcp${D_SUFFIX} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
set_target_properties(msvcp${D_SUFFIX} PROPERTIES OUTPUT_NAME "msvcp140${D_SUFFIX}${VCLIBS_SUFFIX}")
target_link_options(msvcp${D_SUFFIX} PRIVATE "${THIS_CONFIG_LINK_OPTIONS}")
# import library 'statics'
add_library(msvcp${D_SUFFIX}_implib_objects OBJECT ${IMPLIB_SOURCES})
target_compile_definitions(msvcp${D_SUFFIX}_implib_objects PRIVATE "_DLL;${THIS_CONFIG_DEFINITIONS}")
target_compile_options(msvcp${D_SUFFIX}_implib_objects PRIVATE "${THIS_CONFIG_COMPILE_OPTIONS};/EHsc") # No /GL!
add_library(msvcp${D_SUFFIX}_satellite_objects OBJECT ${SATELLITE_DLL_SOURCES})
target_compile_options(msvcp${D_SUFFIX}_satellite_objects PRIVATE "${THIS_CONFIG_COMPILE_OPTIONS};${GL_FLAG};/EHsc")
target_compile_definitions(msvcp${D_SUFFIX}_satellite_objects PRIVATE "_DLL;${THIS_CONFIG_DEFINITIONS}")
# msvcp140_1.dll (the memory_resource satellite)
add_library(msvcp_1${D_SUFFIX}_objects OBJECT ${SOURCES_SATELLITE_1})
target_compile_definitions(msvcp_1${D_SUFFIX}_objects PRIVATE "_BUILDING_SATELLITE_1;_DLL;${THIS_CONFIG_DEFINITIONS}")
target_compile_options(msvcp_1${D_SUFFIX}_objects PRIVATE "${THIS_CONFIG_COMPILE_OPTIONS};${GL_FLAG};/EHsc")
add_library(msvcp_1${D_SUFFIX} SHARED)
target_link_libraries(msvcp_1${D_SUFFIX} PRIVATE msvcp_1${D_SUFFIX}_objects msvcp${D_SUFFIX}_satellite_objects "msvcp${D_SUFFIX}" "${TOOLSET_LIB}/vcruntime${D_SUFFIX}.lib" "${TOOLSET_LIB}/msvcrt${D_SUFFIX}.lib" "ucrt${D_SUFFIX}.lib")
set_target_properties(msvcp_1${D_SUFFIX} PROPERTIES ARCHIVE_OUTPUT_NAME "msvcp140_1${D_SUFFIX}${VCLIBS_SUFFIX}")
set_target_properties(msvcp_1${D_SUFFIX} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
set_target_properties(msvcp_1${D_SUFFIX} PROPERTIES OUTPUT_NAME "msvcp140_1${D_SUFFIX}${VCLIBS_SUFFIX}")
target_link_options(msvcp_1${D_SUFFIX} PRIVATE "${THIS_CONFIG_LINK_OPTIONS}")
# msvcp140_2.dll (the special math satellite)
add_library(msvcp_2${D_SUFFIX}_objects OBJECT ${SOURCES_SATELLITE_2})
target_compile_definitions(msvcp_2${D_SUFFIX}_objects PRIVATE "_BUILDING_SATELLITE_2;_DLL;${THIS_CONFIG_DEFINITIONS}")
target_compile_options(msvcp_2${D_SUFFIX}_objects PRIVATE "${THIS_CONFIG_COMPILE_OPTIONS};${GL_FLAG};/EHsc")
target_link_libraries(msvcp_2${D_SUFFIX}_objects PRIVATE Boost::math)
add_library(msvcp_2${D_SUFFIX} SHARED)
target_link_libraries(msvcp_2${D_SUFFIX} PRIVATE msvcp_2${D_SUFFIX}_objects msvcp${D_SUFFIX}_satellite_objects msvcp${D_SUFFIX}_implib_objects std_init_once_begin_initialize std_init_once_complete "msvcp${D_SUFFIX}" "${TOOLSET_LIB}/vcruntime${D_SUFFIX}.lib" "${TOOLSET_LIB}/msvcrt${D_SUFFIX}.lib" "ucrt${D_SUFFIX}.lib")
set_target_properties(msvcp_2${D_SUFFIX} PROPERTIES ARCHIVE_OUTPUT_NAME "msvcp140_2${D_SUFFIX}${VCLIBS_SUFFIX}")
set_target_properties(msvcp_2${D_SUFFIX} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
set_target_properties(msvcp_2${D_SUFFIX} PROPERTIES OUTPUT_NAME "msvcp140_2${D_SUFFIX}${VCLIBS_SUFFIX}")
target_link_options(msvcp_2${D_SUFFIX} PRIVATE "${THIS_CONFIG_LINK_OPTIONS}")
# msvcp140_atomic_wait.dll (the atomic wait satellite)
add_library(msvcp${D_SUFFIX}_atomic_wait_objects OBJECT ${SOURCES_SATELLITE_ATOMIC_WAIT})
target_compile_definitions(msvcp${D_SUFFIX}_atomic_wait_objects PRIVATE "_BUILDING_SATELLITE_ATOMIC_WAIT;_DLL;${THIS_CONFIG_DEFINITIONS}")
target_compile_options(msvcp${D_SUFFIX}_atomic_wait_objects PRIVATE "${THIS_CONFIG_COMPILE_OPTIONS};${GL_FLAG};/EHsc")
# generate the .def for msvcp140_atomic_wait.dll
set(_ATOMIC_WAIT_OUTPUT_NAME "msvcp140${D_SUFFIX}_atomic_wait${VCLIBS_SUFFIX}")
string(TOUPPER "${_ATOMIC_WAIT_OUTPUT_NAME}" _ATOMIC_WAIT_OUTPUT_NAME_UPPER)
set(_ATOMIC_WAIT_DEF_NAME "${CMAKE_BINARY_DIR}/msvcp_atomic_wait${D_SUFFIX}.def")
set(_ATOMIC_WAIT_DEF_FILE_SRC "${CMAKE_CURRENT_LIST_DIR}/src/msvcp_atomic_wait.src")
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS "${_ATOMIC_WAIT_DEF_FILE_SRC}")
file(READ "${_ATOMIC_WAIT_DEF_FILE_SRC}" _ATOMIC_WAIT_SRC_CONTENTS)
string(REPLACE "LIBRARYNAME" "${_ATOMIC_WAIT_OUTPUT_NAME_UPPER}" _ATOMIC_WAIT_DEF_CONTENTS "${_ATOMIC_WAIT_SRC_CONTENTS}")
file(WRITE "${_ATOMIC_WAIT_DEF_NAME}" "${_ATOMIC_WAIT_DEF_CONTENTS}")
add_library(msvcp${D_SUFFIX}_atomic_wait SHARED "${_ATOMIC_WAIT_DEF_NAME}")
target_link_libraries(msvcp${D_SUFFIX}_atomic_wait PRIVATE msvcp${D_SUFFIX}_atomic_wait_objects msvcp${D_SUFFIX}_satellite_objects msvcp${D_SUFFIX}_implib_objects "msvcp${D_SUFFIX}" "${TOOLSET_LIB}/vcruntime${D_SUFFIX}.lib" "${TOOLSET_LIB}/msvcrt${D_SUFFIX}.lib" "ucrt${D_SUFFIX}.lib" "advapi32.lib")
set_target_properties(msvcp${D_SUFFIX}_atomic_wait PROPERTIES ARCHIVE_OUTPUT_NAME "msvcp140_atomic_wait${D_SUFFIX}${VCLIBS_SUFFIX}")
set_target_properties(msvcp${D_SUFFIX}_atomic_wait PROPERTIES ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
set_target_properties(msvcp${D_SUFFIX}_atomic_wait PROPERTIES OUTPUT_NAME "${_ATOMIC_WAIT_OUTPUT_NAME}")
target_link_options(msvcp${D_SUFFIX}_atomic_wait PRIVATE "${THIS_CONFIG_LINK_OPTIONS}")
# msvcp140_codecvt_ids.dll
add_library(msvcp${D_SUFFIX}_codecvt_ids_objects OBJECT ${SOURCES_SATELLITE_CODECVT_IDS})
target_compile_definitions(msvcp${D_SUFFIX}_codecvt_ids_objects PRIVATE "_BUILDING_SATELLITE_CODECVT_IDS;_DLL;${THIS_CONFIG_DEFINITIONS}")
target_compile_options(msvcp${D_SUFFIX}_codecvt_ids_objects PRIVATE "${THIS_CONFIG_COMPILE_OPTIONS};${GL_FLAG};/EHsc")
add_library(msvcp${D_SUFFIX}_codecvt_ids SHARED)
target_link_libraries(msvcp${D_SUFFIX}_codecvt_ids PRIVATE msvcp${D_SUFFIX}_codecvt_ids_objects msvcp${D_SUFFIX}_satellite_objects "msvcp${D_SUFFIX}" "${TOOLSET_LIB}/vcruntime${D_SUFFIX}.lib" "${TOOLSET_LIB}/msvcrt${D_SUFFIX}.lib" "ucrt${D_SUFFIX}.lib")
set_target_properties(msvcp${D_SUFFIX}_codecvt_ids PROPERTIES ARCHIVE_OUTPUT_NAME "msvcp140_codecvt_ids${D_SUFFIX}${VCLIBS_SUFFIX}")
set_target_properties(msvcp${D_SUFFIX}_codecvt_ids PROPERTIES ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
set_target_properties(msvcp${D_SUFFIX}_codecvt_ids PROPERTIES OUTPUT_NAME "msvcp140${D_SUFFIX}_codecvt_ids${VCLIBS_SUFFIX}")
target_link_options(msvcp${D_SUFFIX}_codecvt_ids PRIVATE "${THIS_CONFIG_LINK_OPTIONS}")
# import library
add_library(msvcp${D_SUFFIX}_implib STATIC ${HEADERS})
target_link_libraries(msvcp${D_SUFFIX}_implib msvcp${D_SUFFIX}_implib_objects std_init_once_begin_initialize std_init_once_complete)
add_dependencies(msvcp${D_SUFFIX}_implib msvcp${D_SUFFIX} msvcp_1${D_SUFFIX} msvcp_2${D_SUFFIX} msvcp${D_SUFFIX}_atomic_wait msvcp${D_SUFFIX}_codecvt_ids)
set_target_properties(msvcp${D_SUFFIX}_implib PROPERTIES STATIC_LIBRARY_OPTIONS "/NOLOGO;/NODEFAULTLIB;/IGNORE:4006;$<TARGET_LINKER_FILE:msvcp${D_SUFFIX}>;$<TARGET_LINKER_FILE:msvcp_1${D_SUFFIX}>;$<TARGET_LINKER_FILE:msvcp_2${D_SUFFIX}>;$<TARGET_LINKER_FILE:msvcp${D_SUFFIX}_codecvt_ids>;$<TARGET_LINKER_FILE:msvcp${D_SUFFIX}_atomic_wait>")
set_target_properties(msvcp${D_SUFFIX}_implib PROPERTIES ARCHIVE_OUTPUT_NAME "msvcprt${D_SUFFIX}")
endfunction()
add_stl_dlls("" "" "${VCLIBS_RELEASE_OPTIONS}" "/GL" "/LTCG;/opt:ref,icf")
add_stl_dlls("d" "_DEBUG" "${VCLIBS_DEBUG_OPTIONS}" "" "/opt:ref,noicf")
function(add_stl_statics FLAVOR_SUFFIX THIS_CONFIG_DEFINITIONS THIS_CONFIG_COMPILE_OPTIONS)
add_library(libcpmt${FLAVOR_SUFFIX}_eha OBJECT ${EHA_SOURCES})
target_compile_definitions(libcpmt${FLAVOR_SUFFIX}_eha PRIVATE "${THIS_CONFIG_DEFINITIONS}")
target_compile_options(libcpmt${FLAVOR_SUFFIX}_eha PRIVATE "${THIS_CONFIG_COMPILE_OPTIONS};/EHa")
add_library(libcpmt${FLAVOR_SUFFIX} STATIC ${HEADERS} ${IMPLIB_SOURCES} ${SOURCES} ${INITIALIZER_SOURCES} ${STATIC_SOURCES})
target_compile_definitions(libcpmt${FLAVOR_SUFFIX} PRIVATE "${THIS_CONFIG_DEFINITIONS}")
target_compile_options(libcpmt${FLAVOR_SUFFIX} PRIVATE "${THIS_CONFIG_COMPILE_OPTIONS};/EHsc")
target_link_libraries(libcpmt${FLAVOR_SUFFIX} PRIVATE Boost::math libcpmt${FLAVOR_SUFFIX}_eha std_init_once_begin_initialize std_init_once_complete)
endfunction()
add_stl_statics("" "_ITERATOR_DEBUG_LEVEL=0" "${VCLIBS_RELEASE_OPTIONS}")
add_stl_statics("1" "_ITERATOR_DEBUG_LEVEL=1" "${VCLIBS_RELEASE_OPTIONS}")
add_stl_statics("d" "_DEBUG;_ITERATOR_DEBUG_LEVEL=2" "${VCLIBS_DEBUG_OPTIONS}")
add_stl_statics("d1" "_DEBUG;_ITERATOR_DEBUG_LEVEL=1" "${VCLIBS_DEBUG_OPTIONS}")
add_stl_statics("d0" "_DEBUG;_ITERATOR_DEBUG_LEVEL=0" "${VCLIBS_DEBUG_OPTIONS}")