Initial Commit

This commit is contained in:
Alexander Gabriel 2018-06-30 23:37:25 +02:00
parent 01bba10af9
commit ba0857832c
5 changed files with 70 additions and 1 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
build/

24
CMakeLists.txt Normal file
View 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)

View File

@ -1,2 +1,20 @@
# 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
View 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
View 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);