Initial Commit
This commit is contained in:
parent
01bba10af9
commit
ba0857832c
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
build/
|
24
CMakeLists.txt
Normal file
24
CMakeLists.txt
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.11)
|
||||||
|
FIND_PACKAGE(SWIG 3.0.11 REQUIRED)
|
||||||
|
INCLUDE(${SWIG_USE_FILE})
|
||||||
|
|
||||||
|
if(WIN32)
|
||||||
|
add_definitions(/D_WIN32 /D_WINDOWS /DWINDOWS=1 /DZEND_WIN32=1 /DPHP_WIN32=1 /DWIN32 /DNDebug /DNDEBUG /DZEND_DEBUG=0 /DZTS=1)
|
||||||
|
if(NOT CMAKE_CL_64)
|
||||||
|
add_definitions(-D_USE_32BIT_TIME_T)
|
||||||
|
endif(NOT CMAKE_CL_64)
|
||||||
|
ENDIF(WIN32)
|
||||||
|
|
||||||
|
include_directories (C:/php-sdk/phpmaster/vc${VSCMD_VER}/$ENV{VSCMD_ARG_TGT_ARCH}/php-src)
|
||||||
|
include_directories (C:/php-sdk/phpmaster/vc${VSCMD_VER}/$ENV{VSCMD_ARG_TGT_ARCH}/php-src/main)
|
||||||
|
include_directories (C:/php-sdk/phpmaster/vc${VSCMD_VER}/$ENV{VSCMD_ARG_TGT_ARCH}/php-src/Zend)
|
||||||
|
include_directories (C:/php-sdk/phpmaster/vc${VSCMD_VER}/$ENV{VSCMD_ARG_TGT_ARCH}/php-src/TSRM)
|
||||||
|
include_directories (${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
|
||||||
|
add_library(example STATIC example.c)
|
||||||
|
swig_add_library(php_example TYPE MODULE LANGUAGE php7 SOURCES example.i)
|
||||||
|
target_compile_options(php_example PRIVATE /D_WIN32 /D_WINDOWS /DWINDOWS=1 /DZEND_WIN32=1 /DPHP_WIN32=1 /DWIN32 /DNDebug /DNDEBUG /DZEND_DEBUG=0 /DZTS=1)
|
||||||
|
|
||||||
|
string(SUBSTRING $ENV{VSCMD_VER} 0 2 VSCMD_VER)
|
||||||
|
target_link_libraries(php_example "C:/php-sdk/phpmaster/vc${VSCMD_VER}/$ENV{VSCMD_ARG_TGT_ARCH}/php-src/x64/Release_TS/php7ts.lib")
|
||||||
|
target_link_libraries(php_example example)
|
20
README.md
20
README.md
@ -1,2 +1,20 @@
|
|||||||
# SWIGCmakePHPExampleWindows
|
# SWIGCmakePHPExampleWindows
|
||||||
Example on how to build a SWIG Extension for PHP with CMake on Windows
|
Example on how to build a SWIG Extension for PHP with CMake on Windows.
|
||||||
|
Couldn't find any working example for Windows so i created this one ;)
|
||||||
|
Hope it helps you.
|
||||||
|
|
||||||
|
To build this Example, build PHP as descriped here: https://github.com/Microsoft/php-sdk-binary-tools
|
||||||
|
You need SWIG to make this work.
|
||||||
|
Current SWIG (3.0.12) has a Problem with building Extensions on Windows with Thread-Safe PHP.
|
||||||
|
So until SWIG 4.0.0 is released, you need to build SWIG, too.
|
||||||
|
I have a fork of swig in my github account which enables you to build it with cmake: https://github.com/AlexanderGabriel/swig
|
||||||
|
Build it and change the path SWIG_EXECUTABLE and SWIG_DIR to your environment.
|
||||||
|
|
||||||
|
You can stay inside PHP-SDK-Shell if you want, change directory back to where you checked out this and then execute the following commands.
|
||||||
|
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
cmake .. -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -Wno-dev -DSWIG_EXECUTABLE=C:\dev\work\swig\swig.exe -DSWIG_DIR=C:\dev\work\swig
|
||||||
|
cmake --build .
|
||||||
|
|
||||||
|
Thats it.
|
||||||
|
14
example.c
Normal file
14
example.c
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
/* File : example.c */
|
||||||
|
|
||||||
|
double My_variable = 3.0;
|
||||||
|
|
||||||
|
/* Compute factorial of n */
|
||||||
|
int fact(int n) {
|
||||||
|
if (n <= 1) return 1;
|
||||||
|
else return n*fact(n-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Compute n mod m */
|
||||||
|
int my_mod(int n, int m) {
|
||||||
|
return(n % m);
|
||||||
|
}
|
12
example.i
Normal file
12
example.i
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
/* File : example.i */
|
||||||
|
%module example
|
||||||
|
%{
|
||||||
|
/* Put headers and other declarations here */
|
||||||
|
extern double My_variable;
|
||||||
|
extern int fact(int);
|
||||||
|
extern int my_mod(int n, int m);
|
||||||
|
%}
|
||||||
|
|
||||||
|
extern double My_variable;
|
||||||
|
extern int fact(int);
|
||||||
|
extern int my_mod(int n, int m);
|
Loading…
Reference in New Issue
Block a user