CMakeLists.txt 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. cmake_minimum_required(VERSION 3.2)
  2. project (CHAKRACORE)
  3. function(clr_unknown_arch)
  4. if (WIN32)
  5. message(FATAL_ERROR "Only AMD64, ARM and I386 are supported")
  6. else()
  7. message(FATAL_ERROR "Only AMD64 and ARM are supported")
  8. endif()
  9. endfunction()
  10. if(ICU_INCLUDE_PATH)
  11. set(ICU_CC_PATH "${ICU_INCLUDE_PATH}/../lib/")
  12. find_library(ICUUC icuuc PATHS ${ICU_CC_PATH} NO_DEFAULT_PATH)
  13. find_library(ICU18 icui18n PATHS ${ICU_CC_PATH} NO_DEFAULT_PATH)
  14. find_library(ICUDATA icudata PATHS ${ICU_CC_PATH} NO_DEFAULT_PATH)
  15. if(ICUUC)
  16. message("found libraries on ${ICU_CC_PATH}")
  17. set(ICULIB
  18. ${ICUUC}
  19. ${ICU18}
  20. ${ICUDATA}
  21. )
  22. endif()
  23. endif()
  24. if(CMAKE_SYSTEM_NAME STREQUAL Linux)
  25. if(NOT ICULIB)
  26. set(ICULIB "icuuc")
  27. endif()
  28. set(CLR_CMAKE_PLATFORM_UNIX 1)
  29. if(CMAKE_SYSTEM_PROCESSOR STREQUAL x86_64)
  30. set(CLR_CMAKE_PLATFORM_UNIX_TARGET_AMD64 1)
  31. else()
  32. clr_unknown_arch()
  33. endif()
  34. set(CLR_CMAKE_PLATFORM_LINUX 1)
  35. elseif(CMAKE_SYSTEM_NAME STREQUAL Darwin)
  36. add_definitions(
  37. -DPLATFORM_UNIX
  38. )
  39. if(NOT ICULIB)
  40. set(ICULIB "icucore")
  41. add_definitions(
  42. -DU_DISABLE_RENAMING=1 #in case we link against to an older binary of icu
  43. )
  44. message("using ICU from system default: ${ICULIB}")
  45. endif()
  46. set(CLR_CMAKE_PLATFORM_UNIX 1)
  47. if(CMAKE_SYSTEM_PROCESSOR STREQUAL x86_64)
  48. set(CLR_CMAKE_PLATFORM_UNIX_TARGET_AMD64 1)
  49. else()
  50. clr_unknown_arch()
  51. endif()
  52. set(CLR_CMAKE_PLATFORM_DARWIN 1)
  53. else()
  54. clr_unknown_arch()
  55. endif()
  56. if(CLR_CMAKE_PLATFORM_UNIX_TARGET_AMD64)
  57. add_definitions(-D_M_X64_OR_ARM64)
  58. set(CLR_CMAKE_PLATFORM_ARCH_AMD64 1)
  59. endif()
  60. if (CMAKE_CXX_COMPILER_ID STREQUAL AppleClang
  61. OR CMAKE_CXX_COMPILER_ID STREQUAL Clang
  62. OR CMAKE_CXX_COMPILER_ID STREQUAL GNU)
  63. # Color diagnostics for g++ and clang++
  64. add_definitions("-fdiagnostics-color=always")
  65. endif()
  66. if(STATIC_LIBRARY)
  67. add_definitions(-DCHAKRA_STATIC_LIBRARY=1)
  68. endif()
  69. if(CLR_CMAKE_PLATFORM_UNIX)
  70. add_definitions(-DPLATFORM_UNIX=1)
  71. if(CLR_CMAKE_PLATFORM_LINUX)
  72. add_definitions(-D__LINUX__=1)
  73. if(CLR_CMAKE_PLATFORM_UNIX_TARGET_AMD64)
  74. message("Detected Linux x86_64")
  75. add_definitions(-DLINUX64)
  76. else()
  77. clr_unknown_arch()
  78. endif(CLR_CMAKE_PLATFORM_UNIX_TARGET_AMD64)
  79. endif(CLR_CMAKE_PLATFORM_LINUX)
  80. if(CMAKE_SYSTEM_PROCESSOR STREQUAL x86_64 OR CMAKE_SYSTEM_PROCESSOR STREQUAL amd64)
  81. set(IS_64BIT_BUILD 1)
  82. add_definitions(-D_M_X64 -D_M_AMD64 -D_AMD64_)
  83. endif(CMAKE_SYSTEM_PROCESSOR STREQUAL x86_64 OR CMAKE_SYSTEM_PROCESSOR STREQUAL amd64)
  84. add_definitions(
  85. -DUNICODE
  86. -D_SAFECRT_USE_CPP_OVERLOADS=1
  87. -D__STDC_WANT_LIB_EXT1__=1
  88. -DDISABLE_JIT=1 # xplat-todo: enable the JIT for Linux
  89. )
  90. set(CMAKE_CXX_STANDARD 11)
  91. # CC WARNING FLAGS
  92. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} \
  93. -Wno-implicit-function-declaration"
  94. )
  95. # todo: fix general visibility of the interface
  96. # do not set to `fvisibility=hidden` as it is going to
  97. # prevent the required interface is being exported
  98. # clang by default sets fvisibility=default
  99. if(NOT CC_XCODE_PROJECT)
  100. # todo: enable for XCode too
  101. # XCode is a bit more strict
  102. # keep this until we fix all the warnings there.
  103. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} \
  104. -Werror"
  105. )
  106. endif()
  107. # CXX WARNING FLAGS
  108. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} \
  109. -Wno-missing-braces\
  110. -Wno-reorder\
  111. -Wno-microsoft\
  112. -Wno-unused-value\
  113. -Wno-int-to-void-pointer-cast\
  114. -Wno-invalid-offsetof\
  115. -Wno-undefined-inline\
  116. -Wno-inconsistent-missing-override\
  117. -Wno-c++14-extensions\
  118. -Wno-macro-redefined\
  119. -Wno-pragmas\
  120. -Wno-invalid-token-paste\
  121. -Wno-format\
  122. -Wno-invalid-noreturn\
  123. -Wno-null-arithmetic\
  124. -Wno-tautological-constant-out-of-range-compare\
  125. -Wno-tautological-undefined-compare\
  126. -Wno-address-of-temporary\
  127. -Wno-null-conversion\
  128. -Wno-return-type\
  129. -Wno-switch\
  130. -Wno-int-to-pointer-cast"
  131. )
  132. # notes..
  133. # -Wno-address-of-temporary # vtinfo.h, VirtualTableInfo<T>::RegisterVirtualTable
  134. # -Wno-null-conversion # Check shmemory.cpp and cs.cpp here...
  135. # -Wno-return-type # switch unreachable code
  136. # -Wno-switch # switch values not handled
  137. # CXX COMPILER FLAGS
  138. # xplat-todo for release build
  139. # -fno-inline.... -> -mno-omit.... are needed for more accurate stack inf.
  140. # Release Builds: Not sure if this has to be as strict as the debug/test?
  141. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} \
  142. -fdelayed-template-parsing\
  143. -fno-omit-frame-pointer\
  144. -fno-optimize-sibling-calls\
  145. -mno-omit-leaf-frame-pointer" # this is for compat reasons. i.e. It is a noop with gcc
  146. )
  147. # CXX / CC COMPILER FLAGS
  148. add_compile_options(
  149. -fms-extensions
  150. -msse4.1
  151. )
  152. endif(CLR_CMAKE_PLATFORM_UNIX)
  153. if(CMAKE_BUILD_TYPE STREQUAL Debug)
  154. add_definitions(
  155. -DDBG=1
  156. -DDEBUG=1
  157. -D_DEBUG=1 # for PAL
  158. -DDBG_DUMP=1
  159. )
  160. elseif(CMAKE_BUILD_TYPE STREQUAL Test)
  161. add_definitions(
  162. -DENABLE_DEBUG_CONFIG_OPTIONS=1
  163. )
  164. endif(CMAKE_BUILD_TYPE STREQUAL Debug)
  165. if(NOT CMAKE_BUILD_TYPE STREQUAL Debug)
  166. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} \
  167. -O3"
  168. )
  169. endif(NOT CMAKE_BUILD_TYPE STREQUAL Debug)
  170. if(IS_64BIT_BUILD)
  171. add_definitions(
  172. -DBIT64=1
  173. -DSTACK_ALIGN=16
  174. )
  175. endif(IS_64BIT_BUILD)
  176. if(CLR_CMAKE_PLATFORM_UNIX)
  177. add_definitions(-DFEATURE_PAL)
  178. endif(CLR_CMAKE_PLATFORM_UNIX)
  179. if(WITHOUT_FEATURES)
  180. add_definitions(${WITHOUT_FEATURES})
  181. endif(WITHOUT_FEATURES)
  182. enable_language(ASM)
  183. include_directories(
  184. .
  185. lib/Common
  186. lib/Common/PlaceHolder
  187. pal
  188. pal/inc
  189. pal/inc/rt
  190. ${ICU_INCLUDE_PATH}
  191. )
  192. if(ICU_INCLUDE_PATH)
  193. if(NOT HAVE_LIBICU_UCHAR_H)
  194. set(HAVE_LIBICU_UCHAR_H "1")
  195. endif()
  196. endif()
  197. add_subdirectory (pal)
  198. # build the rest with NO_PAL_MINMAX and PAL_STDCPP_COMPAT
  199. add_definitions(
  200. -DNO_PAL_MINMAX
  201. -DPAL_STDCPP_COMPAT
  202. )
  203. add_subdirectory (lib)
  204. add_subdirectory (bin)