Add mars-nwe CMake build for FLAIM libraries

This commit is contained in:
Mario Fetka
2026-06-05 13:09:28 +00:00
parent c43850ff70
commit 7dd47ea91f

347
CMakeLists.txt Normal file
View File

@@ -0,0 +1,347 @@
cmake_minimum_required(VERSION 3.16)
project(nwflaim LANGUAGES CXX)
include(GNUInstallDirs)
option(NWFLAIM_BUILD_SHARED "Build shared nwflaim libraries" ON)
option(NWFLAIM_BUILD_STATIC "Build static nwflaim libraries" OFF)
option(NWFLAIM_BUILD_SQL "Build SQL FLAIM library" ON)
option(NWFLAIM_WITH_OPENSSL "Build FTK legacy OpenSSL/TLS helpers" ON)
option(NWFLAIM_USE_NICI "Build FLAIM NICI/CCS encrypted-storage path" OFF)
set(NWFLAIM_SSL_TARGET "" CACHE STRING "Optional SSL/Crypto target, for example mars_nwe::ssl")
set(NWFLAIM_NICI_INCLUDE_DIR "" CACHE PATH "Optional private NICI/CCS compatibility include directory")
set(NWFLAIM_LIBRARY_PREFIX nw CACHE STRING "Library output prefix used to avoid system FLAIM collisions")
if(NOT NWFLAIM_BUILD_SHARED AND NOT NWFLAIM_BUILD_STATIC)
message(FATAL_ERROR "Enable at least one of NWFLAIM_BUILD_SHARED or NWFLAIM_BUILD_STATIC")
endif()
set(_nwflaim_common_defs
N_PLAT_UNIX
_LARGEFILE64_SOURCE
_FILE_OFFSET_BITS=64
_REENTRANT)
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
list(APPEND _nwflaim_common_defs FLM_64BIT)
endif()
if(NWFLAIM_USE_NICI)
list(APPEND _nwflaim_common_defs FLM_USE_NICI)
endif()
find_package(Threads REQUIRED)
find_library(NWFLAIM_RT_LIBRARY rt)
find_library(NWFLAIM_DL_LIBRARY dl)
find_package(Curses QUIET)
set(_nwflaim_ssl_target "")
if(NWFLAIM_WITH_OPENSSL)
if(NOT NWFLAIM_SSL_TARGET STREQUAL "")
if(NOT TARGET ${NWFLAIM_SSL_TARGET})
message(FATAL_ERROR "NWFLAIM_SSL_TARGET=${NWFLAIM_SSL_TARGET} is not a CMake target")
endif()
set(_nwflaim_ssl_target ${NWFLAIM_SSL_TARGET})
elseif(TARGET mars_nwe::ssl)
set(_nwflaim_ssl_target mars_nwe::ssl)
else()
find_package(OpenSSL REQUIRED COMPONENTS SSL Crypto)
set(_nwflaim_ssl_target OpenSSL::SSL OpenSSL::Crypto)
endif()
list(APPEND _nwflaim_common_defs FLM_OPENSSL)
endif()
set(NWFLAIM_FTK_SOURCES
ftk/src/ftkarg.cpp
ftk/src/ftkbtree.cpp
ftk/src/ftkcmem.cpp
ftk/src/ftkcoll.cpp
ftk/src/ftkcsum.cpp
ftk/src/ftkdir.cpp
ftk/src/ftkdynbtree.cpp
ftk/src/ftkerror.cpp
ftk/src/ftkfsys.cpp
ftk/src/ftkhttp.cpp
ftk/src/ftkini.cpp
ftk/src/ftkiobuf.cpp
ftk/src/ftklock.cpp
ftk/src/ftklog.cpp
ftk/src/ftkmem.cpp
ftk/src/ftkmfh.cpp
ftk/src/ftkmisc.cpp
ftk/src/ftknet.cpp
ftk/src/ftknlm.cpp
ftk/src/ftkntab.cpp
ftk/src/ftkprntf.cpp
ftk/src/ftkrand.cpp
ftk/src/ftkrset.cpp
ftk/src/ftksem.cpp
ftk/src/ftkstrm.cpp
ftk/src/ftksupr.cpp
ftk/src/ftktext.cpp
ftk/src/ftkthrd.cpp
ftk/src/ftktime.cpp
ftk/src/ftkunix.cpp
ftk/src/ftkwin.cpp
ftk/src/ftkxml.cpp)
if(CURSES_FOUND)
list(APPEND NWFLAIM_FTK_SOURCES ftk/src/ftkftx.cpp)
else()
message(STATUS "Curses not found; building libnwflaimtk without console FTX helpers")
endif()
set(NWFLAIM_FLAIM_SOURCES
flaim/src/checksum.cpp
flaim/src/fblob.cpp
flaim/src/fcs.cpp
flaim/src/fdbcnfig.cpp
flaim/src/fdbcopy.cpp
flaim/src/fdb.cpp
flaim/src/fdbremov.cpp
flaim/src/fdbrenam.cpp
flaim/src/fdict.cpp
flaim/src/ffilehdr.cpp
flaim/src/fgedcom.cpp
flaim/src/flbackup.cpp
flaim/src/flchkdb.cpp
flaim/src/flclose.cpp
flaim/src/flconvrt.cpp
flaim/src/flcreate.cpp
flaim/src/fldbglog.cpp
flaim/src/flerror.cpp
flaim/src/flindex.cpp
flaim/src/flkeyret.cpp
flaim/src/flmimon.cpp
flaim/src/flmstat.cpp
flaim/src/flopen.cpp
flaim/src/flrddrct.cpp
flaim/src/flreduce.cpp
flaim/src/flsweep.cpp
flaim/src/flupdate.cpp
flaim/src/flverify.cpp
flaim/src/fmisc.cpp
flaim/src/f_nici.cpp
flaim/src/fntable.cpp
flaim/src/fnumber.cpp
flaim/src/fqcur.cpp
flaim/src/fqdecl.cpp
flaim/src/fqeval.cpp
flaim/src/fqget.cpp
flaim/src/fqkeys.cpp
flaim/src/fqlog.cpp
flaim/src/fqopt.cpp
flaim/src/fqparse.cpp
flaim/src/fqprep.cpp
flaim/src/fqread.cpp
flaim/src/fqsrch.cpp
flaim/src/fqstack.cpp
flaim/src/frebuild.cpp
flaim/src/frec.cpp
flaim/src/frecset.cpp
flaim/src/fsblk_u.cpp
flaim/src/fscomblk.cpp
flaim/src/fsconvrt.cpp
flaim/src/fscounts.cpp
flaim/src/fscursor.cpp
flaim/src/fsdatacu.cpp
flaim/src/fsdelelm.cpp
flaim/src/fsinselm.cpp
flaim/src/fslfile.cpp
flaim/src/fslfileu.cpp
flaim/src/fsnext.cpp
flaim/src/fsprev.cpp
flaim/src/fsrecget.cpp
flaim/src/fsrecupd.cpp
flaim/src/fsrefspl.cpp
flaim/src/fsrefupd.cpp
flaim/src/fssearch.cpp
flaim/src/fssplblk.cpp
flaim/src/fsv.cpp
flaim/src/fsysdata.cpp
flaim/src/ftext.cpp
flaim/src/ftrans.cpp
flaim/src/furl.cpp
flaim/src/imonbase.cpp
flaim/src/imonchk.cpp
flaim/src/imonerr.cpp
flaim/src/imonfact.cpp
flaim/src/imonfdb.cpp
flaim/src/imonffil.cpp
flaim/src/imonfhsh.cpp
flaim/src/imonfram.cpp
flaim/src/imonfsys.cpp
flaim/src/imonix.cpp
flaim/src/imonlhdr.cpp
flaim/src/imonqury.cpp
flaim/src/imonrche.cpp
flaim/src/imonrec.cpp
flaim/src/imonscfg.cpp
flaim/src/imonsche.cpp
flaim/src/imonsel.cpp
flaim/src/imonstat.cpp
flaim/src/imonutil.cpp
flaim/src/kybuild.cpp
flaim/src/kycollat.cpp
flaim/src/kyget.cpp
flaim/src/lock.cpp
flaim/src/rcache.cpp
flaim/src/recover.cpp
flaim/src/rfl.cpp
flaim/src/scache.cpp
flaim/src/translog.cpp)
set(NWFLAIM_SQL_SOURCES
sql/src/btreeinfo.cpp
sql/src/checksum.cpp
sql/src/createdatabase.cpp
sql/src/createindex.cpp
sql/src/createtable.cpp
sql/src/deleterow.cpp
sql/src/dropdatabase.cpp
sql/src/dropindex.cpp
sql/src/droptable.cpp
sql/src/f_btpool.cpp
sql/src/f_btree.cpp
sql/src/fbtrset.cpp
sql/src/fcollate.cpp
sql/src/fdbcnfig.cpp
sql/src/fdbcopy.cpp
sql/src/fdbrenam.cpp
sql/src/fdict.cpp
sql/src/fdllmain.cpp
sql/src/fdynbuf.cpp
sql/src/ffilehdr.cpp
sql/src/flbackup.cpp
sql/src/flclose.cpp
sql/src/flconvrt.cpp
sql/src/fldbglog.cpp
sql/src/flerror.cpp
sql/src/flgethdr.cpp
sql/src/flindex.cpp
sql/src/flkeyret.cpp
sql/src/flmstat.cpp
sql/src/flog.cpp
sql/src/flreduce.cpp
sql/src/fltrabrt.cpp
sql/src/fltrbeg.cpp
sql/src/fltrcmit.cpp
sql/src/f_nici.cpp
sql/src/fnumber.cpp
sql/src/frestore.cpp
sql/src/frow.cpp
sql/src/fsblk_u.cpp
sql/src/fscursor.cpp
sql/src/fsdatacu.cpp
sql/src/fslfile.cpp
sql/src/fslfileu.cpp
sql/src/fsrefupd.cpp
sql/src/fsysdata.cpp
sql/src/funicode.cpp
sql/src/fvector.cpp
sql/src/insertrow.cpp
sql/src/kybldkey.cpp
sql/src/kybuild.cpp
sql/src/kycollat.cpp
sql/src/kyeword.cpp
sql/src/kyqsort.cpp
sql/src/kyunlock.cpp
sql/src/opendatabase.cpp
sql/src/recover.cpp
sql/src/rfl.cpp
sql/src/scache.cpp
sql/src/select.cpp
sql/src/sqleval.cpp
sql/src/sqloptimize.cpp
sql/src/sqlstatement.cpp
sql/src/translog.cpp
sql/src/updaterow.cpp
sql/src/whereclause.cpp)
function(nwflaim_common_target target_name public_include_dir)
target_compile_features(${target_name} PUBLIC cxx_std_98)
target_compile_definitions(${target_name} PRIVATE ${_nwflaim_common_defs})
target_include_directories(${target_name}
PUBLIC
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/${public_include_dir}>"
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
PRIVATE
"${CMAKE_CURRENT_SOURCE_DIR}/ftk/src"
"${CMAKE_CURRENT_SOURCE_DIR}/flaim/src"
"${CMAKE_CURRENT_SOURCE_DIR}/sql/src")
if(NWFLAIM_USE_NICI AND NOT NWFLAIM_NICI_INCLUDE_DIR STREQUAL "")
target_include_directories(${target_name} PRIVATE "${NWFLAIM_NICI_INCLUDE_DIR}")
endif()
target_link_libraries(${target_name} PUBLIC Threads::Threads)
if(CURSES_INCLUDE_DIRS)
target_include_directories(${target_name} PRIVATE ${CURSES_INCLUDE_DIRS})
elseif(CURSES_INCLUDE_DIR)
target_include_directories(${target_name} PRIVATE ${CURSES_INCLUDE_DIR})
endif()
if(CURSES_LIBRARIES)
target_link_libraries(${target_name} PUBLIC ${CURSES_LIBRARIES})
endif()
if(NWFLAIM_RT_LIBRARY)
target_link_libraries(${target_name} PUBLIC "${NWFLAIM_RT_LIBRARY}")
endif()
if(NWFLAIM_DL_LIBRARY)
target_link_libraries(${target_name} PUBLIC "${NWFLAIM_DL_LIBRARY}")
endif()
endfunction()
function(nwflaim_add_library logical_name output_base public_include_dir)
if(NWFLAIM_BUILD_SHARED)
add_library(${logical_name} SHARED ${ARGN})
add_library(NWFlaim::${logical_name} ALIAS ${logical_name})
set_target_properties(${logical_name} PROPERTIES OUTPUT_NAME "${NWFLAIM_LIBRARY_PREFIX}${output_base}")
nwflaim_common_target(${logical_name} ${public_include_dir})
endif()
if(NWFLAIM_BUILD_STATIC)
add_library(${logical_name}_static STATIC ${ARGN})
add_library(NWFlaim::${logical_name}_static ALIAS ${logical_name}_static)
set_target_properties(${logical_name}_static PROPERTIES OUTPUT_NAME "${NWFLAIM_LIBRARY_PREFIX}${output_base}")
nwflaim_common_target(${logical_name}_static ${public_include_dir})
endif()
endfunction()
nwflaim_add_library(flaimtk flaimtk ftk/src ${NWFLAIM_FTK_SOURCES})
if(TARGET flaimtk AND NWFLAIM_WITH_OPENSSL)
target_link_libraries(flaimtk PUBLIC ${_nwflaim_ssl_target})
endif()
if(TARGET flaimtk_static AND NWFLAIM_WITH_OPENSSL)
target_link_libraries(flaimtk_static PUBLIC ${_nwflaim_ssl_target})
endif()
nwflaim_add_library(flaim flaim flaim/src ${NWFLAIM_FLAIM_SOURCES})
if(TARGET flaim)
target_link_libraries(flaim PUBLIC flaimtk)
endif()
if(TARGET flaim_static)
target_link_libraries(flaim_static PUBLIC flaimtk_static)
endif()
if(NWFLAIM_BUILD_SQL)
nwflaim_add_library(flaimsql flaimsql sql/src ${NWFLAIM_SQL_SOURCES})
if(TARGET flaimsql)
target_link_libraries(flaimsql PUBLIC flaimtk)
endif()
if(TARGET flaimsql_static)
target_link_libraries(flaimsql_static PUBLIC flaimtk_static)
endif()
endif()
install(TARGETS flaimtk flaim
EXPORT nwflaim-targets
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
if(TARGET flaimsql)
install(TARGETS flaimsql
EXPORT nwflaim-targets
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
endif()
install(FILES ftk/src/flaimtk.h flaim/src/flaim.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
if(NWFLAIM_BUILD_SQL)
install(FILES sql/src/flaimsql.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
endif()
install(EXPORT nwflaim-targets NAMESPACE NWFlaim:: DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/nwflaim)