1 2include_directories(include/internal/mingw-w64) 3 4list(APPEND MSVCRTEX_SOURCE 5 ${CRT_STARTUP_SOURCE} 6 math/sincos.c 7 misc/dbgrpt.cpp 8 misc/fltused.c 9 misc/isblank.c 10 misc/iswblank.c 11 misc/ofmt_stub.c 12 stdio/acrt_iob_func.c) 13 14if(DLL_EXPORT_VERSION LESS 0x600) 15 list(APPEND MSVCRTEX_SOURCE 16 stdlib/_invalid_parameter.c 17 stdlib/rand_s.c 18 ) 19endif() 20 21if(CMAKE_C_COMPILER_ID STREQUAL "Clang") 22 # Clang performs some optimizations requiring those funtions 23 list(APPEND MSVCRTEX_SOURCE 24 math/round.c 25 math/roundf.c 26 math/exp2.c 27 math/exp2f.c 28 ) 29endif() 30 31if(ARCH STREQUAL "i386") 32 # Clang wants __aulldiv for its optimizations 33 list(APPEND MSVCRTEX_ASM_SOURCE 34 except/i386/chkstk_asm.s 35 except/i386/chkstk_ms.s 36 math/i386/alldiv_asm.s 37 math/i386/aulldiv_asm.s 38 ) 39 if (CMAKE_C_COMPILER_ID STREQUAL "Clang" AND NOT MSVC) 40 list(APPEND MSVCRTEX_ASM_SOURCE 41 math/i386/ceilf.S 42 math/i386/floorf.S) 43 list(APPEND MSVCRTEX_SOURCE 44 math/i386/sqrtf.c) 45 endif() 46 if(MSVC AND DLL_EXPORT_VERSION LESS 0x600) 47 list(APPEND MSVCRTEX_ASM_SOURCE 48 except/i386/__CxxFrameHandler3.s) 49 list(APPEND MSVCRTEX_SOURCE 50 except/i386/CxxHandleV8Frame.c) 51 endif() 52elseif(ARCH STREQUAL "amd64") 53 list(APPEND MSVCRTEX_ASM_SOURCE 54 except/amd64/chkstk_ms.s) 55 if(MSVC AND DLL_EXPORT_VERSION LESS 0x600) 56 list(APPEND MSVCRTEX_ASM_SOURCE 57 except/amd64/__CxxFrameHandler3.s 58 ) 59 endif() 60elseif(ARCH STREQUAL "arm") 61 list(APPEND MSVCRTEX_SOURCE 62 math/arm/__rt_sdiv.c 63 math/arm/__rt_sdiv64_worker.c 64 math/arm/__rt_udiv.c 65 math/arm/__rt_udiv64_worker.c 66 math/arm/__rt_div_worker.h 67 math/arm/__dtoi64.c 68 math/arm/__dtou64.c 69 math/arm/__stoi64.c 70 math/arm/__stou64.c 71 math/arm/__fto64.h 72 math/arm/__i64tod.c 73 math/arm/__u64tod.c 74 math/arm/__i64tos.c 75 math/arm/__u64tos.c 76 math/arm/__64tof.h 77 ) 78 list(APPEND MSVCRTEX_ASM_SOURCE 79 except/arm/chkstk_asm.s 80 math/arm/__rt_sdiv64.s 81 math/arm/__rt_srsh.s 82 math/arm/__rt_udiv64.s 83 ) 84endif() 85 86set_source_files_properties(${MSVCRTEX_ASM_SOURCE} PROPERTIES COMPILE_DEFINITIONS "_DLL;_MSVCRTEX_") 87add_asm_files(msvcrtex_asm ${MSVCRTEX_ASM_SOURCE}) 88 89add_library(msvcrtex OBJECT ${MSVCRTEX_SOURCE} ${msvcrtex_asm}) 90target_compile_definitions(msvcrtex PRIVATE _DLL _MSVCRTEX_) 91 92if(MSVC AND (ARCH STREQUAL "i386")) 93 # user32.dll needs this as a stand-alone object file 94 add_asm_files(ftol2_asm math/i386/ftol2_asm.s) 95 add_library(ftol2_sse OBJECT ${ftol2_asm}) 96 target_compile_definitions(ftol2_sse PRIVATE $<TARGET_PROPERTY:msvcrtex,COMPILE_DEFINITIONS>) 97 set_target_properties(ftol2_sse PROPERTIES LINKER_LANGUAGE C) 98endif() 99 100 101if(CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_C_COMPILER_ID STREQUAL "Clang") 102 target_compile_options(msvcrtex PRIVATE $<$<COMPILE_LANGUAGE:C>:-Wno-main>) 103 if(LTCG) 104 target_compile_options(msvcrtex PRIVATE -fno-lto) 105 endif() 106endif() 107 108set_source_files_properties(startup/crtdll.c PROPERTIES COMPILE_DEFINITIONS CRTDLL) 109set_source_files_properties(startup/crtexe.c 110 startup/wcrtexe.c PROPERTIES COMPILE_DEFINITIONS _M_CEE_PURE) 111 112if(NOT MSVC) 113 target_link_libraries(msvcrtex oldnames) 114endif() 115 116add_dependencies(msvcrtex psdk asm) 117