-
Notifications
You must be signed in to change notification settings - Fork 103
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
120 lines (98 loc) · 4.15 KB
/
CMakeLists.txt
File metadata and controls
120 lines (98 loc) · 4.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
cmake_minimum_required(VERSION 3.10)
project(phpx)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
if (NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Debug CACHE STRING "Build type" FORCE)
endif ()
# Code Coverage Configuration
add_library(coverage_config INTERFACE)
option(CODE_COVERAGE "Enable coverage reporting" OFF)
if(CODE_COVERAGE)
message(STATUS "Open coverage")
# --coverage => -fprofile-arcs -ftest-coverage
target_compile_options(coverage_config INTERFACE
-O0
-g
-fprofile-update=atomic
--coverage
)
if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.13)
target_link_options(coverage_config INTERFACE --coverage)
else()
target_link_libraries(coverage_config INTERFACE --coverage)
endif()
endif(CODE_COVERAGE)
option(enable_asan "Enable address sanitize" OFF)
if (enable_asan)
message(STATUS "Enabled ASAN")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fno-omit-frame-pointer")
endif ()
if (DEFINED php_dir)
set(PHP_CONFIG "${php_dir}/bin/php-config")
else ()
set(PHP_CONFIG "php-config")
endif()
execute_process(COMMAND ${PHP_CONFIG} --includes OUTPUT_VARIABLE PHP_INCLUDES OUTPUT_STRIP_TRAILING_WHITESPACE RESULT_VARIABLE PHP_CONFIG_RESULT)
if (NOT PHP_CONFIG_RESULT EQUAL 0)
message(FATAL_ERROR "Failed to execute php-config: ${PHP_CONFIG_RESULT}")
endif()
execute_process(COMMAND ${PHP_CONFIG} --extension-dir OUTPUT_VARIABLE PHP_EXTENSION_DIR OUTPUT_STRIP_TRAILING_WHITESPACE RESULT_VARIABLE PHP_CONFIG_RESULT)
if (NOT PHP_CONFIG_RESULT EQUAL 0)
message(FATAL_ERROR "Failed to execute php-config: ${PHP_CONFIG_RESULT}")
endif()
execute_process(COMMAND ${PHP_CONFIG} --libs OUTPUT_VARIABLE PHP_LIBS OUTPUT_STRIP_TRAILING_WHITESPACE RESULT_VARIABLE PHP_CONFIG_RESULT)
if (NOT PHP_CONFIG_RESULT EQUAL 0)
message(FATAL_ERROR "Failed to execute php-config: ${PHP_CONFIG_RESULT}")
endif()
execute_process(COMMAND ${PHP_CONFIG} --ldflags OUTPUT_VARIABLE PHP_LDFLAGS OUTPUT_STRIP_TRAILING_WHITESPACE RESULT_VARIABLE PHP_CONFIG_RESULT)
if (NOT PHP_CONFIG_RESULT EQUAL 0)
message(FATAL_ERROR "Failed to execute php-config: ${PHP_CONFIG_RESULT}")
endif()
execute_process(COMMAND ${PHP_CONFIG} --prefix OUTPUT_VARIABLE PHP_PREFIX OUTPUT_STRIP_TRAILING_WHITESPACE RESULT_VARIABLE PHP_CONFIG_RESULT)
if (NOT PHP_CONFIG_RESULT EQUAL 0)
message(FATAL_ERROR "Failed to execute php-config: ${PHP_CONFIG_RESULT}")
endif()
message("PHP_PREFIX: ${PHP_PREFIX}")
message("PHP_INCLUDES: ${PHP_INCLUDES}")
message("PHP_LIBS: ${PHP_LIBS_NO_PHP}")
message("PHP_LDFLAGS: ${PHP_LDFLAGS}")
include_directories(include tests/include)
link_directories(${PHP_PREFIX}/lib)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${PHP_INCLUDES}")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
if (APPLE)
SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -undefined dynamic_lookup")
message(${CMAKE_SHARED_LINKER_FLAGS})
endif ()
# library
file(GLOB_RECURSE SRC_FILES src/core/*.cc src/func/*.cc src/class/*.cc src/const/*.cc)
file(GLOB_RECURSE HEADER_FILES include/*.h)
add_library(phpx SHARED ${SRC_FILES})
set_target_properties(phpx PROPERTIES CLEAN_DIRECT_OUTPUT 1)
if (CODE_COVERAGE)
target_link_libraries(phpx coverage_config gcov)
endif(CODE_COVERAGE)
# find GTest
find_package(GTest)
if (!${GTEST_FOUND})
message(FATAL_ERROR "Not found GTest")
endif()
message(STATUS "Found GTest")
# tests
file(GLOB_RECURSE TEST_FILES tests/src/*.cpp)
add_executable(phpx-tests ${TEST_FILES})
add_dependencies(phpx-tests phpx)
target_link_libraries(phpx-tests php phpx ${PHP_LIBS_NO_PHP} ${PHP_LDFLAGS} ${GTEST_BOTH_LIBRARIES})
# ext
file(GLOB_RECURSE EXT_FILES tests/ext/*.cpp)
add_library(ext SHARED ${EXT_FILES})
add_dependencies(ext phpx)
target_link_libraries(ext phpx)
# install
install(CODE "MESSAGE(\"Are you run command using root user?\")")
install(TARGETS phpx LIBRARY DESTINATION ${PHP_PREFIX}/lib)
install(FILES ${HEADER_FILES} DESTINATION ${PHP_PREFIX}/include/phpx)