-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
122 lines (95 loc) · 2.65 KB
/
Makefile
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
121
122
KOTLIN_HOME=/root/kotlin-native-linux-0.7.1/bin
PHP_HOME=/opt/rh/rh-php71/root/usr
PHP_LIB_ROOT=${PHP_HOME}/include/php
OUTPUT=./phpmodule
TESTS=./tests
PHP_BIN=${PHP_HOME}/bin
PHP_LIB_INCLUDE=-I${PHP_LIB_ROOT} \
-I${PHP_LIB_ROOT}/main \
-I${PHP_LIB_ROOT}/Zend \
-I${PHP_LIB_ROOT}/TSRM
ROOT=./konfigure
COPT_PHP_LIB_INCLUDE=-copt -I${PHP_LIB_ROOT} \
-copt -I${PHP_LIB_ROOT}/main \
-copt -I${PHP_LIB_ROOT}/Zend \
-copt -I${PHP_LIB_ROOT}/TSRM \
-copt -I${OUTPUT} \
-copt -I./
GENERATOR=${ROOT}/generator/*.kt
ZEND_INTEROP=${ROOT}/proxy/*.kt
SHARE=${ROOT}/share/*.kt
DSL=${ROOT}/dsl/*.kt
GENERATOR_FILESET=${SHARE} ${GENERATOR} ${DSL}
SOURCES=`ls ./*.kt | sed 's/.\/extension.kt//g'`
KLIB_NAME=libphp
KLIB=./${KLIB_NAME}.klib
KEXE_NAME=extension
KEXE=./${KEXE_NAME}.kexe
DEF=./php.def
NAME_HOLDER=./extension.name
ARTEFACTS=${KEXE} \
${OUTPUT}/*.h \
${OUTPUT}/*.a \
${DEF} \
./extension_constants_generated.kt \
./extension_ini_mapper_generated.kt \
${OUTPUT}/config.m4 \
${OUTPUT}/*.c \
./*.o \
./*.a
all: kotlin php
prepare:
mkdir -p ${OUTPUT}
cp -pR ${TESTS} ${OUTPUT}/
kotlin: prepare make_generator generate interop compile
php:
[ -f ${OUTPUT}/config.m4 ] || exit 1
cd ${OUTPUT};${PHP_BIN}/phpize
cd ${OUTPUT};./configure --with-php-config=${PHP_BIN}/php-config
cd ${OUTPUT};make
interop:
ifneq ($(KLIB),$(wildcard $(KLIB)))
${KOTLIN_HOME}/cinterop -def ${DEF} -o ${KLIB_NAME} ${COPT_PHP_LIB_INCLUDE}
else
@echo "Skip interop"
endif
make_generator:
ifneq ($(KEXE),$(wildcard $(KEXE)))
${KOTLIN_HOME}/kotlinc ./${KEXE_NAME}.kt ${GENERATOR_FILESET} -o ${KEXE_NAME}
else
@echo "Skip make_generator"
endif
generate:
${KEXE} > ${NAME_HOLDER}
mv ./config.m4 ${OUTPUT}/
mv ./extension.c ${OUTPUT}/
compile:
ifneq (${OUTPUT}/lib`cat ${NAME_HOLDER}`.a,$(wildcard ${OUTPUT}/lib`cat ${NAME_HOLDER}`.a))
${KOTLIN_HOME}/kotlinc -opt -produce static ${SOURCES} ${ZEND_INTEROP} ${SHARE} -l ${KLIB} -o `cat ${NAME_HOLDER}`
mv ./*.h ${OUTPUT}/
mv ./*.a ${OUTPUT}/
else
@echo "Skip compiling"
endif
test:
ifeq ($(OUTPUT)/Makefile,$(wildcard $(OUTPUT)/Makefile))
cd ${OUTPUT};echo "n" | make test -s
@echo "n"
endif
install:
ifeq ($(OUTPUT)/Makefile,$(wildcard $(OUTPUT)/Makefile))
cd ${OUTPUT};make install
endif
clean: clean_keep_interop
rm ${KLIB}
clean_keep_interop:
rm ${ARTEFACTS} || true
ifeq ($(OUTPUT)/Makefile,$(wildcard $(OUTPUT)/Makefile))
cd ${OUTPUT};make clean || true
endif
recompile:
${KOTLIN_HOME}/kotlinc -opt -produce static ${SOURCES} ${ZEND_INTEROP} ${SHARE} -l ${KLIB} -o `cat ${NAME_HOLDER}`
mv ./`cat ${NAME_HOLDER}`_api.h ${OUTPUT}/
mv ./lib`cat ${NAME_HOLDER}`.a ${OUTPUT}/
run:
${PHP_BIN}/php -dextension=`ls ${OUTPUT}/modules/*.so` -r "${php}"