@@ -61,6 +61,8 @@ option(WITH_DPDK_BENCHMARK "Build DPDK comparison benchmark" OFF)
6161option (WITH_EXTERNAL_LPM_BENCHMARK "Build benchmarks with external LPM libraries" OFF )
6262option (BUILD_GO_WRAPPER "Build Go wrapper and bindings" OFF )
6363option (BUILD_CPP_WRAPPER "Build C++ wrapper and bindings" OFF )
64+ option (BUILD_PERL_WRAPPER "Build Perl wrapper and bindings" OFF )
65+ option (BUILD_PHP_WRAPPER "Build PHP wrapper and bindings" OFF )
6466option (BUILD_PYTHON_WRAPPER "Build Python wrapper and bindings" OFF )
6567option (LPM_TS_RESOLVERS "Enable thread-safe resolvers (for dlopen contexts)" OFF )
6668
@@ -418,6 +420,93 @@ if(BUILD_GO_WRAPPER)
418420 endif ()
419421endif ()
420422
423+ # Perl wrapper
424+ if (BUILD_PERL_WRAPPER)
425+ find_program (PERL_EXECUTABLE perl )
426+ if (PERL_EXECUTABLE)
427+ message (STATUS "Found Perl: ${PERL_EXECUTABLE} " )
428+
429+ # Custom target to configure Perl wrapper
430+ add_custom_target (perl_configure
431+ COMMAND ${PERL_EXECUTABLE} Makefile.PL
432+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} /bindings/perl
433+ DEPENDS lpm
434+ COMMENT "Configuring Perl wrapper"
435+ )
436+
437+ # Custom target to build Perl wrapper
438+ add_custom_target (perl_wrapper ALL
439+ COMMAND make
440+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} /bindings/perl
441+ DEPENDS perl_configure
442+ COMMENT "Building Perl wrapper and bindings"
443+ )
444+
445+ # Custom target to test Perl wrapper
446+ add_custom_target (perl_test
447+ COMMAND ${CMAKE_COMMAND} -E env "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR} :$ENV{LD_LIBRARY_PATH} " make test
448+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} /bindings/perl
449+ DEPENDS perl_wrapper
450+ COMMENT "Testing Perl wrapper"
451+ )
452+
453+ message (STATUS "Perl wrapper targets added:" )
454+ message (STATUS " make perl_wrapper - Build Perl wrapper" )
455+ message (STATUS " make perl_test - Run Perl tests" )
456+ else ()
457+ message (WARNING "Perl not found. Perl wrapper will not be built." )
458+ message (WARNING "Install Perl to build the wrapper: sudo apt install perl" )
459+ endif ()
460+ endif ()
461+
462+ # PHP wrapper
463+ if (BUILD_PHP_WRAPPER)
464+ find_program (PHP_EXECUTABLE php )
465+ find_program (PHPIZE_EXECUTABLE phpize )
466+ if (PHP_EXECUTABLE AND PHPIZE_EXECUTABLE)
467+ message (STATUS "Found PHP: ${PHP_EXECUTABLE} " )
468+ message (STATUS "Found phpize: ${PHPIZE_EXECUTABLE} " )
469+
470+ # Custom target to configure PHP extension
471+ add_custom_target (php_configure
472+ COMMAND ${PHPIZE_EXECUTABLE}
473+ COMMAND ./configure --with-liblpm=${CMAKE_INSTALL_PREFIX}
474+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} /bindings/php
475+ DEPENDS lpm
476+ COMMENT "Configuring PHP extension"
477+ )
478+
479+ # Custom target to build PHP extension
480+ add_custom_target (php_wrapper ALL
481+ COMMAND make
482+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} /bindings/php
483+ DEPENDS php_configure
484+ COMMENT "Building PHP extension and bindings"
485+ )
486+
487+ # Custom target to test PHP extension
488+ add_custom_target (php_test
489+ COMMAND ${CMAKE_COMMAND} -E env "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR} :$ENV{LD_LIBRARY_PATH} " make test
490+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} /bindings/php
491+ DEPENDS php_wrapper
492+ COMMENT "Testing PHP extension"
493+ )
494+
495+ message (STATUS "PHP wrapper targets added:" )
496+ message (STATUS " make php_wrapper - Build PHP extension" )
497+ message (STATUS " make php_test - Run PHP tests" )
498+ else ()
499+ if (NOT PHP_EXECUTABLE)
500+ message (WARNING "PHP not found. PHP extension will not be built." )
501+ message (WARNING "Install PHP to build the extension: sudo apt install php php-dev" )
502+ endif ()
503+ if (NOT PHPIZE_EXECUTABLE)
504+ message (WARNING "phpize not found. PHP extension will not be built." )
505+ message (WARNING "Install PHP development tools: sudo apt install php-dev" )
506+ endif ()
507+ endif ()
508+ endif ()
509+
421510# Print configuration summary
422511message (STATUS "liblpm configuration:" )
423512message (STATUS " Version: ${PROJECT_VERSION} " )
@@ -463,6 +552,16 @@ if(BUILD_CPP_WRAPPER)
463552else ()
464553 message (STATUS " Build C++ wrapper: OFF" )
465554endif ()
555+ if (BUILD_PERL_WRAPPER AND PERL_EXECUTABLE)
556+ message (STATUS " Build Perl wrapper: ON" )
557+ else ()
558+ message (STATUS " Build Perl wrapper: OFF" )
559+ endif ()
560+ if (BUILD_PHP_WRAPPER AND PHP_EXECUTABLE AND PHPIZE_EXECUTABLE)
561+ message (STATUS " Build PHP wrapper: ON" )
562+ else ()
563+ message (STATUS " Build PHP wrapper: OFF" )
564+ endif ()
466565if (BUILD_PYTHON_WRAPPER AND Python_FOUND AND CYTHON_EXECUTABLE)
467566 message (STATUS " Build Python wrapper: ON" )
468567else ()
0 commit comments