CMakeLists.txt 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. cmake_minimum_required(VERSION 3.0)
  2. project(gravity VERSION 1.0 LANGUAGES C)
  3. set(CMAKE_C_STANDARD 99)
  4. SET(COMPILER_DIR src/compiler/)
  5. SET(RUNTIME_DIR src/runtime/)
  6. SET(SHARED_DIR src/shared/)
  7. SET(UTILS_DIR src/utils/)
  8. SET(OPT_DIR src/optionals/)
  9. SET(GRAVITY_SRC src/cli/gravity.c)
  10. AUX_SOURCE_DIRECTORY(${COMPILER_DIR} COMPILER_FILES)
  11. AUX_SOURCE_DIRECTORY(${RUNTIME_DIR} RUNTIME_FILES)
  12. AUX_SOURCE_DIRECTORY(${SHARED_DIR} SHARED_FILES)
  13. AUX_SOURCE_DIRECTORY(${UTILS_DIR} UTILS_FILES)
  14. AUX_SOURCE_DIRECTORY(${OPT_DIR} OPT_FILES)
  15. set(GRAVITY_INCLUDE_DIR ${COMPILER_DIR} ${RUNTIME_DIR} ${SHARED_DIR} ${UTILS_DIR} ${OPT_DIR})
  16. SET(SRC_FILES ${COMPILER_FILES} ${RUNTIME_FILES} ${SHARED_FILES} ${UTILS_FILES} ${OPT_FILES})
  17. set(GRAVITY_DEPENDENT_LIBS "")
  18. set(GRAVITY_PRIVATE_DEFINITIONS "")
  19. set(GRAVITY_PRIVATE_COMPILE_OPTIONS "")
  20. set(GRAVITY_INSTALL_RUNTIME_PATH "/usr/local/bin") # Gravity executable install path
  21. set(GRAVITY_INSTALL_LIB_PATH "lib") # Gravity shared library install path
  22. set(GRAVITY_INSTALL_LIB_STATIC_PATH "lib") # Gravity static library install path
  23. # ----------------------------------------------------------------
  24. if(MSVC)
  25. # for path functions
  26. list(APPEND GRAVITY_DEPENDENT_LIBS "shlwapi")
  27. # supress _CRT_SECURE_NO_WARNINGS for MSVC builds
  28. list(APPEND GRAVITY_PRIVATE_DEFINITIONS "_CRT_SECURE_NO_WARNINGS")
  29. # MSVC does not like static inlining
  30. list(APPEND GRAVITY_PRIVATE_DEFINITIONS "inline=")
  31. # warning C4068: unknown pragma
  32. list(APPEND GRAVITY_PRIVATE_COMPILE_OPTIONS "/wd4068")
  33. # make Windows installs local
  34. set(GRAVITY_INSTALL_RUNTIME_PATH "${CMAKE_CURRENT_SOURCE_DIR}/bin")
  35. set(GRAVITY_INSTALL_LIB_PATH "${CMAKE_CURRENT_SOURCE_DIR}/bin/lib")
  36. set(GRAVITY_INSTALL_LIB_STATIC_PATH "${CMAKE_CURRENT_SOURCE_DIR}/bin/lib")
  37. elseif(MINGW)
  38. # for path functions
  39. list(APPEND GRAVITY_DEPENDENT_LIBS "shlwapi")
  40. # make Windows installs local
  41. set(GRAVITY_INSTALL_RUNTIME_PATH "${CMAKE_CURRENT_SOURCE_DIR}/bin")
  42. set(GRAVITY_INSTALL_LIB_PATH "${CMAKE_CURRENT_SOURCE_DIR}/bin/lib")
  43. set(GRAVITY_INSTALL_LIB_STATIC_PATH "${CMAKE_CURRENT_SOURCE_DIR}/bin/lib")
  44. elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin|NetBSD|BSD|DragonFly|Linux")
  45. # for math functions
  46. list(APPEND GRAVITY_DEPENDENT_LIBS "m")
  47. if (${CMAKE_SYSTEM_NAME} MATCHES "NetBSD|BSD|DragonFly")
  48. list(APPEND GRAVITY_PRIVATE_DEFINITIONS "_WITH_GETLINE")
  49. endif()
  50. endif()
  51. # ----------------------------------------------------------------
  52. add_library(gravityapi SHARED ${SRC_FILES})
  53. add_library(gravityapi_s STATIC ${SRC_FILES})
  54. target_compile_definitions(gravityapi PUBLIC BUILD_GRAVITY_API)
  55. # ----------------------------------------------------------------
  56. set(GRAVITY_TARGETS gravityapi gravityapi_s)
  57. foreach(target ${GRAVITY_TARGETS})
  58. target_link_libraries(${target} PRIVATE ${GRAVITY_DEPENDENT_LIBS})
  59. target_compile_definitions(${target} PRIVATE ${GRAVITY_PRIVATE_DEFINITIONS})
  60. target_compile_options(${target} PRIVATE ${GRAVITY_PRIVATE_COMPILE_OPTIONS})
  61. target_include_directories(${target} PUBLIC ${GRAVITY_INCLUDE_DIR})
  62. endforeach()
  63. # ----------------------------------------------------------------
  64. add_executable(gravity ${GRAVITY_SRC})
  65. target_link_libraries(gravity gravityapi_s)
  66. target_include_directories(gravity PUBLIC ${GRAVITY_INCLUDE_DIR})
  67. # ----------------------------------------------------------------
  68. install(TARGETS gravity ${GRAVITY_TARGETS}
  69. RUNTIME DESTINATION ${GRAVITY_INSTALL_RUNTIME_PATH}
  70. LIBRARY DESTINATION ${GRAVITY_INSTALL_LIB_PATH}
  71. ARCHIVE DESTINATION ${GRAVITY_INSTALL_LIB_STATIC_PATH})