You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

CMakeLists.txt 3.9KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. # -*- mode: CMAKE; -*-
  2. project( replxx VERSION 0.0.2 LANGUAGES CXX C )
  3. # INFO
  4. set(REPLXX_DISPLAY_NAME "replxx")
  5. set(REPLXX_URL_INFO_ABOUT "https://github.com/AmokHuginnsson/replxx")
  6. set(REPLXX_CONTACT "amok@codestation.org")
  7. set(REPLXX_FRIENDLY_STRING "replxx - Read Evaluate Print Loop library")
  8. # compiler options
  9. if(CMAKE_COMPILER_IS_GNUCXX)
  10. message(STATUS "Compiler type GNU: ${CMAKE_CXX_COMPILER}")
  11. set(BASE_COMPILER_OPTIONS "-std=c++11 -Wall -D_GNU_SOURCE -pthread")
  12. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${BASE_COMPILER_OPTIONS}")
  13. set(CMAKE_CXX_FLAGS_COVERAGE "${CMAKE_CXX_FLAGS} ${BASE_COMPILER_OPTIONS} -O0 --coverage -fno-inline -fno-default-inline -fno-inline-small-functions")
  14. set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${BASE_COMPILER_OPTIONS} -O0 -g -ggdb -g3 -ggdb3")
  15. set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} ${BASE_COMPILER_OPTIONS} -Os")
  16. set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${BASE_COMPILER_OPTIONS} -O3 -fomit-frame-pointer")
  17. set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} ${BASE_COMPILER_OPTIONS} -O3 -g")
  18. set(CMAKE_C_FLAGS "-std=c99")
  19. elseif(CMAKE_COMPILER_IS_CLANGCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  20. # using regular Clang or AppleClang
  21. message(STATUS "Compiler type CLANG: ${CMAKE_CXX_COMPILER}")
  22. set(BASE_COMPILER_OPTIONS "-std=c++11 -Wall -Wextra -D_GNU_SOURCE -pthread")
  23. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${BASE_COMPILER_OPTIONS}")
  24. set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${BASE_COMPILER_OPTIONS} -O0 -g")
  25. set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} ${BASE_COMPILER_OPTIONS} -Os")
  26. set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${BASE_COMPILER_OPTIONS} -O3 -fomit-frame-pointer")
  27. set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} ${BASE_COMPILER_OPTIONS} -O3 -g")
  28. set(CMAKE_C_FLAGS "-std=c99")
  29. elseif(MSVC)
  30. message(STATUS "Compiler type MSVC: ${CMAKE_CXX_COMPILER}")
  31. add_definitions("-D_CRT_SECURE_NO_WARNINGS=1")
  32. set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /INCREMENTAL:NO /SUBSYSTEM:CONSOLE /LTCG /ignore:4099")
  33. set(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "${CMAKE_EXE_LINKER_FLAGS_MINSIZEREL} /SUBSYSTEM:CONSOLE /ignore:4099")
  34. set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /SUBSYSTEM:CONSOLE /ignore:4099")
  35. set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} /SUBSYSTEM:CONSOLE /ignore:4099")
  36. else()
  37. # unknown compiler
  38. message(STATUS "Compiler type UNKNOWN: ${CMAKE_CXX_COMPILER}")
  39. set(BASE_COMPILER_OPTIONS "-std=c++11 -Wall -pthread")
  40. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${BASE_COMPILER_OPTIONS}")
  41. set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${BASE_COMPILER_OPTIONS} -O0 -g")
  42. set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} ${BASE_COMPILER_OPTIONS} -Os")
  43. set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${BASE_COMPILER_OPTIONS} -O3 -fomit-frame-pointer")
  44. set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} ${BASE_COMPILER_OPTIONS} -O3 -g")
  45. set(CMAKE_C_FLAGS "-std=c99")
  46. endif()
  47. # build libreplxx
  48. set(
  49. REPLXX_SOURCES
  50. src/conversion.cxx
  51. src/escape.cxx
  52. src/history.cxx
  53. src/replxx_impl.cxx
  54. src/prompt.cxx
  55. src/replxx.cxx
  56. src/util.cxx
  57. src/wcwidth.cpp
  58. src/terminal.cxx
  59. src/windows.cxx
  60. )
  61. set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
  62. if(ENABLE_STATIC MATCHES "ON")
  63. add_library(rspamd-replxx STATIC ${REPLXX_SOURCES})
  64. else()
  65. add_library(rspamd-replxx SHARED ${REPLXX_SOURCES})
  66. endif()
  67. target_include_directories(
  68. rspamd-replxx
  69. PUBLIC ${PROJECT_SOURCE_DIR}/include
  70. PRIVATE ${PROJECT_SOURCE_DIR}/src
  71. )
  72. set( TARGETS ${TARGETS} rspamd-replxx )
  73. target_compile_definitions(rspamd-replxx PRIVATE REPLXX_BUILDING_DLL)
  74. target_link_libraries(rspamd-replxx "${RSPAMD_REQUIRED_LIBRARIES}")
  75. install( TARGETS ${TARGETS} LIBRARY DESTINATION ${RSPAMD_LIBDIR})