Compare commits

...

2 Commits

Author SHA1 Message Date
Leonardo Grasso
369f69e8c8 build: drop WIN32 exclusion from http_output, webserver, and metrics gates
Rely solely on MINIMAL_BUILD and EMSCRIPTEN as semantic guards instead of explicit platform checks. MSVC builds are unaffected since  CompilerFlags.cmake forces MINIMAL_BUILD=ON, keeping these features  disabled. Non-MSVC Windows toolchains (MinGW, clang) can now build with http_output if curl and OpenSSL are available.

Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2026-03-19 17:36:07 +01:00
Leonardo Grasso
9a664771c0 build: enable http_output, webserver, and metrics on macOS
The HTTP output, health webserver, and Prometheus metrics were excluded from macOS builds as collateral damage when a Linux-only CMake gate was  introduced to handle gRPC/protobuf dependencies (86e76924). Now that  gRPC has been dropped (43aaffc4), the original reason no longer applies.

Widen CMake gates and C++ preprocessor guards from Linux-only to  all non-Windows/non-Emscripten platforms. Also remove the dead c-ares dependency, which was only needed by gRPC.

Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2026-03-19 16:55:51 +01:00
11 changed files with 19 additions and 115 deletions

View File

@@ -175,18 +175,14 @@ include(njson)
# yaml-cpp
include(yaml-cpp)
if(NOT WIN32
AND NOT APPLE
AND NOT MINIMAL_BUILD
AND NOT EMSCRIPTEN
)
if(NOT MINIMAL_BUILD AND NOT EMSCRIPTEN)
# OpenSSL
include(openssl)
# libcurl
include(curl)
# todo(jasondellaluce,rohith-raju): support webserver for non-linux builds too cpp-httlib
# cpp-httplib
include(cpp-httplib)
endif()
@@ -202,14 +198,6 @@ include(valijson)
if(USE_GPERFTOOLS)
include(gperftools)
endif()
if(NOT MINIMAL_BUILD)
if(NOT WIN32
AND NOT APPLE
AND NOT EMSCRIPTEN
)
include(cares)
endif()
endif()
# Installation
if(WIN32)

View File

@@ -1,78 +0,0 @@
# SPDX-License-Identifier: Apache-2.0
#
# Copyright (C) 2023 The Falco Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
# in compliance with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software distributed under the License
# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
# or implied. See the License for the specific language governing permissions and limitations under
# the License.
#
option(USE_BUNDLED_CARES "Enable building of the bundled c-ares" ${USE_BUNDLED_DEPS})
if(CARES_INCLUDE)
# we already have c-ares
elseif(NOT USE_BUNDLED_CARES)
find_path(CARES_INCLUDE NAMES cares/ares.h ares.h)
find_library(CARES_LIB NAMES cares)
if(CARES_INCLUDE AND CARES_LIB)
message(STATUS "Found c-ares: include: ${CARES_INCLUDE}, lib: ${CARES_LIB}")
else()
message(FATAL_ERROR "Couldn't find system c-ares")
endif()
else()
if(BUILD_SHARED_LIBS)
set(CARES_LIB_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX})
set(CARES_STATIC_OPTION "Off")
else()
set(CARES_LIB_SUFFIX ${CMAKE_STATIC_LIBRARY_SUFFIX})
set(CARES_STATIC_OPTION "On")
endif()
set(CARES_SRC "${PROJECT_BINARY_DIR}/c-ares-prefix/src/c-ares")
set(CARES_INCLUDE "${CARES_SRC}/include/")
set(CARES_LIB "${CARES_SRC}/lib/libcares${CARES_LIB_SUFFIX}")
if(NOT TARGET c-ares)
message(STATUS "Using bundled c-ares in '${CARES_SRC}'")
ExternalProject_Add(
c-ares
PREFIX "${PROJECT_BINARY_DIR}/c-ares-prefix"
URL "https://github.com/c-ares/c-ares/releases/download/v1.33.1/c-ares-1.33.1.tar.gz"
URL_HASH "SHA256=06869824094745872fa26efd4c48e622b9bd82a89ef0ce693dc682a23604f415"
BUILD_IN_SOURCE 1
CMAKE_ARGS -DCMAKE_POLICY_DEFAULT_CMP0091:STRING=NEW
-DCMAKE_MSVC_RUNTIME_LIBRARY=${CMAKE_MSVC_RUNTIME_LIBRARY}
-DCMAKE_INSTALL_LIBDIR=lib
-DCARES_SHARED=${BUILD_SHARED_LIBS}
-DCARES_STATIC=${CARES_STATIC_OPTION}
-DCARES_STATIC_PIC=${ENABLE_PIC}
-DCARES_BUILD_TOOLS=Off
-DCARES_INSTALL=Off
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
BUILD_BYPRODUCTS ${CARES_INCLUDE} ${CARES_LIB}
INSTALL_COMMAND ""
)
install(
FILES "${CARES_LIB}"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/${LIBS_PACKAGE_NAME}"
COMPONENT "libs-deps"
)
install(
DIRECTORY "${CARES_INCLUDE}"
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/${LIBS_PACKAGE_NAME}"
COMPONENT "libs-deps"
)
endif()
endif()
if(NOT TARGET c-ares)
add_custom_target(c-ares)
endif()
include_directories("${CARES_INCLUDE}")

View File

@@ -22,7 +22,7 @@ limitations under the License.
#include <libsinsp/utils.h>
#include <re2/re2.h>
#if defined(__linux__) and !defined(MINIMAL_BUILD) and !defined(__EMSCRIPTEN__)
#if !defined(MINIMAL_BUILD) and !defined(__EMSCRIPTEN__)
#include <openssl/evp.h>
#endif
#include <cstring>
@@ -136,7 +136,7 @@ uint64_t parse_prometheus_interval(std::string interval_str) {
return interval;
}
#if defined(__linux__) and !defined(MINIMAL_BUILD) and !defined(__EMSCRIPTEN__)
#if !defined(MINIMAL_BUILD) and !defined(__EMSCRIPTEN__)
std::string calculate_file_sha256sum(const std::string& filename) {
std::ifstream file(filename, std::ios::binary);
if(!file.is_open()) {

View File

@@ -26,7 +26,7 @@ limitations under the License.
namespace falco::utils {
uint64_t parse_prometheus_interval(std::string interval_str);
#if defined(__linux__) and !defined(MINIMAL_BUILD) and !defined(__EMSCRIPTEN__)
#if !defined(MINIMAL_BUILD) and !defined(__EMSCRIPTEN__)
std::string calculate_file_sha256sum(const std::string& filename);
#endif

View File

@@ -83,22 +83,16 @@ if(NOT WIN32)
target_sources(falco_application PRIVATE outputs_program.cpp outputs_syslog.cpp)
endif()
if(CMAKE_SYSTEM_NAME MATCHES "Linux" AND NOT MINIMAL_BUILD)
if(NOT EMSCRIPTEN AND NOT MINIMAL_BUILD)
target_sources(falco_application PRIVATE outputs_http.cpp falco_metrics.cpp webserver.cpp)
list(APPEND FALCO_INCLUDE_DIRECTORIES FALCO_INCLUDE_DIRECTORIES "${OPENSSL_INCLUDE_DIR}"
"${CARES_INCLUDE}"
)
list(APPEND FALCO_INCLUDE_DIRECTORIES FALCO_INCLUDE_DIRECTORIES "${OPENSSL_INCLUDE_DIR}")
if(TARGET c-ares)
list(APPEND FALCO_DEPENDENCIES c-ares)
endif()
if(CMAKE_SYSTEM_NAME MATCHES "Linux" AND USE_BUNDLED_CURL)
if(USE_BUNDLED_CURL)
list(APPEND FALCO_DEPENDENCIES curl)
endif()
list(APPEND FALCO_LIBRARIES httplib::httplib "${CURL_LIBRARIES}" "${CARES_LIB}")
list(APPEND FALCO_LIBRARIES httplib::httplib "${CURL_LIBRARIES}")
endif()
if(EMSCRIPTEN)

View File

@@ -82,7 +82,7 @@ falco::app::run_result falco::app::actions::load_rules_files(falco::app::state&
if(res->has_warnings()) {
falco_logger::log(falco_logger::level::WARNING, res->as_string(true, rc) + "\n");
}
#if defined(__linux__) and !defined(MINIMAL_BUILD) and !defined(__EMSCRIPTEN__)
#if !defined(MINIMAL_BUILD) and !defined(__EMSCRIPTEN__)
s.config->m_loaded_rules_filenames_sha256sum.insert(
{filename, falco::utils::calculate_file_sha256sum(filename)});
#endif

View File

@@ -17,7 +17,7 @@ limitations under the License.
#include "actions.h"
#if defined(__linux__) && !defined(__EMSCRIPTEN__) && !defined(MINIMAL_BUILD)
#if !defined(__EMSCRIPTEN__) && !defined(MINIMAL_BUILD)
#include "webserver.h"
#endif
@@ -25,7 +25,7 @@ using namespace falco::app;
using namespace falco::app::actions;
falco::app::run_result falco::app::actions::start_webserver(falco::app::state& state) {
#if defined(__linux__) && !defined(__EMSCRIPTEN__) && !defined(MINIMAL_BUILD)
#if !defined(__EMSCRIPTEN__) && !defined(MINIMAL_BUILD)
if(state.is_capture_mode() || !state.config->m_webserver_enabled) {
return run_result::ok();
}
@@ -50,7 +50,7 @@ falco::app::run_result falco::app::actions::start_webserver(falco::app::state& s
}
falco::app::run_result falco::app::actions::stop_webserver(falco::app::state& state) {
#if defined(__linux__) && !defined(__EMSCRIPTEN__) && !defined(MINIMAL_BUILD)
#if !defined(__EMSCRIPTEN__) && !defined(MINIMAL_BUILD)
if(state.is_capture_mode() || !state.config->m_webserver_enabled) {
return run_result::ok();
}

View File

@@ -23,7 +23,7 @@ limitations under the License.
#include "restart_handler.h"
#include "../configuration.h"
#include "../stats_writer.h"
#if defined(__linux__) && !defined(__EMSCRIPTEN__) && !defined(MINIMAL_BUILD)
#if !defined(__EMSCRIPTEN__) && !defined(MINIMAL_BUILD)
#include "../webserver.h"
#endif
@@ -109,7 +109,7 @@ struct state {
// Helper responsible for watching of handling hot application restarts
std::shared_ptr<restart_handler> restarter;
#if defined(__linux__) && !defined(__EMSCRIPTEN__) && !defined(MINIMAL_BUILD)
#if !defined(__EMSCRIPTEN__) && !defined(MINIMAL_BUILD)
falco_webserver webserver;
#endif
// Set by start_webserver to start prometheus metrics

View File

@@ -211,7 +211,7 @@ void falco_configuration::merge_config_files(const std::string &config_name,
}
}
#if defined(__linux__) and !defined(MINIMAL_BUILD) and !defined(__EMSCRIPTEN__)
#if !defined(MINIMAL_BUILD) and !defined(__EMSCRIPTEN__)
for(auto &filename : m_loaded_configs_filenames) {
m_loaded_configs_filenames_sha256sum.insert(
{filename, falco::utils::calculate_file_sha256sum(filename)});

View File

@@ -115,7 +115,7 @@ std::string falco_metrics::falco_to_text_prometheus(
"falco",
{{"version", FALCO_VERSION}});
#if defined(__linux__) and !defined(MINIMAL_BUILD) and !defined(__EMSCRIPTEN__)
#if !defined(MINIMAL_BUILD) and !defined(__EMSCRIPTEN__)
// Note that the rule counter metrics are retrieved from the state, not from any inspector
// Distinguish between config and rules files using labels, following Prometheus best
// practices: https://prometheus.io/docs/practices/naming/#labels

View File

@@ -28,7 +28,7 @@ limitations under the License.
#include "outputs_program.h"
#include "outputs_syslog.h"
#endif
#if defined(__linux__) && !defined(__EMSCRIPTEN__) && !defined(MINIMAL_BUILD)
#if !defined(__EMSCRIPTEN__) && !defined(MINIMAL_BUILD)
#include "outputs_http.h"
#endif
@@ -93,7 +93,7 @@ void falco_outputs::add_output(const falco::outputs::config &oc) {
oo = std::make_unique<falco::outputs::output_syslog>();
}
#endif
#if defined(__linux__) && !defined(__EMSCRIPTEN__) && !defined(MINIMAL_BUILD)
#if !defined(__EMSCRIPTEN__) && !defined(MINIMAL_BUILD)
else if(oc.name == "http") {
oo = std::make_unique<falco::outputs::output_http>();
}