[CRT] Implement thread/fiber safe support for MSVC and Clang-CL
[reactos.git] / sdk / lib / crt / msvcrtex.cmake
1
2 include_directories(include/internal/mingw-w64)
3
4 if(NOT MSVC)
5 add_compile_flags("-Wno-main")
6 if(LTCG)
7 add_compile_flags("-fno-lto")
8 endif()
9 endif()
10
11 list(APPEND MSVCRTEX_SOURCE
12 startup/crtexe.c
13 startup/wcrtexe.c
14 startup/crt_handler.c
15 startup/crtdll.c
16 startup/_newmode.c
17 startup/wildcard.c
18 startup/tlssup.c
19 startup/mingw_helpers.c
20 startup/natstart.c
21 startup/charmax.c
22 startup/merr.c
23 startup/atonexit.c
24 startup/dllmain.c
25 startup/txtmode.c
26 startup/pesect.c
27 startup/tlsmcrt.c
28 startup/tlsthrd.c
29 startup/tlsmthread.c
30 startup/cinitexe.c
31 startup/gs_support.c
32 startup/dll_argv.c
33 startup/dllargv.c
34 startup/wdllargv.c
35 startup/crt0_c.c
36 startup/crt0_w.c
37 startup/dllentry.c
38 startup/reactos.c
39 misc/fltused.c
40 misc/isblank.c
41 misc/iswblank.c
42 misc/ofmt_stub.c)
43
44 if(MSVC)
45 list(APPEND MSVCRTEX_SOURCE
46 startup/threadSafeInit.c)
47 else()
48 list(APPEND MSVCRTEX_SOURCE
49 startup/pseudo-reloc.c
50 startup/pseudo-reloc-list.c)
51 endif()
52
53 if(ARCH STREQUAL "i386")
54 list(APPEND MSVCRTEX_ASM_SOURCE
55 except/i386/chkstk_asm.s
56 except/i386/chkstk_ms.s
57 math/i386/ftol2_asm.s
58 math/i386/alldiv_asm.s)
59 list(APPEND MSVCRTEX_SOURCE
60 math/i386/ci.c
61 math/i386/cicos.c
62 math/i386/cilog.c
63 math/i386/cipow.c
64 math/i386/cisin.c
65 math/i386/cisqrt.c)
66 elseif(ARCH STREQUAL "amd64")
67 list(APPEND MSVCRTEX_ASM_SOURCE
68 except/amd64/chkstk_asm.s
69 except/amd64/chkstk_ms.s)
70 elseif(ARCH STREQUAL "arm")
71 list(APPEND MSVCRTEX_SOURCE
72 math/arm/__rt_sdiv.c
73 math/arm/__rt_sdiv64_worker.c
74 math/arm/__rt_udiv.c
75 math/arm/__rt_udiv64_worker.c
76 )
77 list(APPEND MSVCRTEX_ASM_SOURCE
78 except/arm/chkstk_asm.s
79 math/arm/__dtoi64.s
80 math/arm/__dtou64.s
81 math/arm/__i64tod.s
82 math/arm/__i64tos.s
83 math/arm/__stoi64.s
84 math/arm/__stou64.s
85 math/arm/__u64tod.s
86 math/arm/__u64tos.s
87 math/arm/__rt_sdiv64.s
88 math/arm/__rt_srsh.s
89 math/arm/__rt_udiv64.s
90 )
91 endif()
92
93 if(MSVC)
94 list(APPEND MSVCRTEX_SOURCE startup/mscmain.c)
95 else()
96 list(APPEND MSVCRTEX_SOURCE startup/gccmain.c)
97 endif()
98
99 set_source_files_properties(${MSVCRTEX_ASM_SOURCE} PROPERTIES COMPILE_DEFINITIONS "_DLL;_MSVCRTEX_")
100 add_asm_files(msvcrtex_asm ${MSVCRTEX_ASM_SOURCE})
101
102 add_library(msvcrtex ${MSVCRTEX_SOURCE} ${msvcrtex_asm})
103 add_target_compile_definitions(msvcrtex _DLL _MSVCRTEX_)
104 set_source_files_properties(startup/crtdll.c PROPERTIES COMPILE_DEFINITIONS CRTDLL)
105 set_source_files_properties(startup/crtexe.c
106 startup/wcrtexe.c PROPERTIES COMPILE_DEFINITIONS _M_CEE_PURE)
107
108 if(NOT MSVC)
109 target_link_libraries(msvcrtex oldnames)
110 endif()
111
112 if(STACK_PROTECTOR)
113 target_link_libraries(msvcrtex gcc_ssp)
114 endif()
115
116 add_dependencies(msvcrtex psdk asm)