CMakeLists.txt 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. find_package (Python COMPONENTS Interpreter)
  2. add_custom_target(dbg_controller_h
  3. COMMAND ${Python_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/jstoc.py ${CMAKE_CURRENT_SOURCE_DIR}/DbgController.js controllerScript
  4. WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
  5. SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/jstoc.py ${CMAKE_CURRENT_SOURCE_DIR}/DbgController.js
  6. )
  7. set(ch_source_files
  8. ch.cpp
  9. ChakraRtInterface.cpp
  10. CodexAssert.cpp
  11. Debugger.cpp
  12. Helpers.cpp
  13. HostConfigFlags.cpp
  14. WScriptJsrt.cpp
  15. RuntimeThreadData.cpp
  16. )
  17. if (STATIC_LIBRARY)
  18. set(ch_source_files "${ch_source_files}"
  19. ../ChakraCore/TestHooks.cpp
  20. )
  21. endif()
  22. add_executable (ch ${ch_source_files})
  23. add_dependencies(ch dbg_controller_h)
  24. set_target_properties(ch
  25. PROPERTIES
  26. POSITION_INDEPENDENT_CODE True
  27. )
  28. include_directories(..)
  29. if(CC_TARGETS_AMD64)
  30. set(Wasm_dep ../../lib/WasmReader)
  31. endif()
  32. target_include_directories (ch
  33. PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}
  34. ${CMAKE_CURRENT_BINARY_DIR}
  35. ../ChakraCore
  36. ../../lib/Common
  37. ../../lib/Jsrt
  38. ../../lib/Runtime
  39. ../../lib/Parser
  40. ${Wasm_dep}
  41. )
  42. if(STATIC_LIBRARY)
  43. if(CC_TARGET_OS_ANDROID OR CC_TARGET_OS_LINUX)
  44. set(LINKER_START_GROUP -pie -Wl,--start-group)
  45. set(LINKER_END_GROUP -Wl,--end-group)
  46. if (CC_TARGET_OS_LINUX) # do not embed libstdc++ statically on Android
  47. set(LINKER_END_GROUP "${LINKER_END_GROUP} -static-libstdc++")
  48. else()
  49. set(LINKER_END_GROUP "${LINKER_END_GROUP} -llog")
  50. endif()
  51. elseif(CC_TARGET_OS_OSX)
  52. set(LINKER_START_GROUP -Wl,-force_load,)
  53. endif()
  54. if (NOT CC_TARGET_OS_ANDROID)
  55. set(LINKER_END_GROUP
  56. "${LINKER_END_GROUP}"
  57. pthread
  58. )
  59. endif()
  60. # common link deps
  61. set(lib_target "${lib_target}"
  62. -Wl,-undefined,error
  63. ${LINKER_START_GROUP}
  64. ChakraCoreStatic
  65. ${ICU_LIBRARIES}
  66. ${LINKER_END_GROUP}
  67. dl
  68. )
  69. if(CC_TARGET_OS_OSX)
  70. set(lib_target "${lib_target}"
  71. "-framework CoreFoundation"
  72. "-framework Security"
  73. )
  74. elseif (NOT CC_TARGET_OS_ANDROID)
  75. set(lib_target "${lib_target}"
  76. "pthread"
  77. )
  78. endif()
  79. else() # // shared library below
  80. set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fPIE")
  81. if(CC_TARGET_OS_ANDROID OR CC_TARGET_OS_LINUX)
  82. set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie") # osx clang sets this by default
  83. endif()
  84. set(lib_target
  85. PRIVATE Chakra.Pal.Singular
  86. PRIVATE Chakra.Common.Codex.Singular
  87. PRIVATE Chakra.Runtime.PlatformAgnostic.Singular
  88. )
  89. # Link explicitly to ICU to support u_getVersion
  90. set(lib_target ${lib_target} ${ICU_LIBRARIES})
  91. endif()
  92. if(CC_TARGET_OS_ANDROID OR CC_TARGET_OS_LINUX)
  93. set(lib_target "${lib_target}"
  94. -Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/ch.version
  95. ${LINKER_REDUCED_MEMORY}
  96. )
  97. elseif(CC_TARGET_OS_OSX)
  98. if(CC_TARGETS_X86)
  99. set(lib_target "${lib_target} -arch i386")
  100. elseif(CC_TARGETS_ARM)
  101. set(lib_target "${lib_target} -arch arm")
  102. endif()
  103. endif()
  104. target_link_libraries (ch
  105. ${lib_target}
  106. ${CC_LTO_ENABLED}
  107. )
  108. if(NOT CC_XCODE_PROJECT)
  109. # Add a post build event to the ch target
  110. # which executes a command to copy ch to
  111. # out/{BUILD_TYPE}/ for convenience
  112. add_custom_command(TARGET ch POST_BUILD
  113. COMMAND ${CMAKE_COMMAND} -E copy_if_different
  114. "${CHAKRACORE_BINARY_DIR}/bin/ch/ch"
  115. ${CHAKRACORE_BINARY_DIR}/)
  116. endif()