Skip to content

Commit

Permalink
added explicit targets for every 3rd party lib (#612)
Browse files Browse the repository at this point in the history
* added explicit targets for every 3rd party lib
these contain include dirs/libs/compiler defs

* moved each 3rd party lib into a version folder, to give each target a
dedicated include directory.
Now noone should add lib root folder as include dir
Used private linking where possible
disabled building of boost, wasnt used at all

* regnerate boost cache
adapted targets for coverity
  • Loading branch information
turleypol committed Jan 27, 2024
1 parent 08bd3c7 commit 271a110
Show file tree
Hide file tree
Showing 80 changed files with 1,747 additions and 1,689 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/build.yml
Expand Up @@ -63,7 +63,7 @@ jobs:
uses: actions/cache@v3
with:
path: lib/boost_1_83_0
key: ${{ runner.os }}-${{ matrix.config.cxx-compiler }}-${{ matrix.config.compiler-version }}-boost-1.83.0-1
key: ${{ runner.os }}-${{ matrix.config.cxx-compiler }}-${{ matrix.config.compiler-version }}-boost-1.83.0-2
- name: Install Compiler and Dependencies
if: matrix.config.os == 'ubuntu-latest'
shell: pwsh
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/buildmacos.yml
Expand Up @@ -39,7 +39,7 @@ jobs:
uses: actions/cache@v3
with:
path: lib/boost_1_83_0
key: ${{ runner.os }}-${{ matrix.config.cxx-compiler }}-${{ matrix.config.compiler-version }}-boost-1.83.0-1
key: ${{ runner.os }}-${{ matrix.config.cxx-compiler }}-${{ matrix.config.compiler-version }}-boost-1.83.0-2
- name: Install Dependencies
shell: pwsh
run: |
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/buildsan.yml
Expand Up @@ -49,7 +49,7 @@ jobs:
uses: actions/cache@v3
with:
path: lib/boost_1_83_0
key: ${{ runner.os }}-${{ matrix.config.cxx-compiler }}-${{ matrix.config.compiler-version }}-boost-1.83.0
key: ${{ runner.os }}-${{ matrix.config.cxx-compiler }}-${{ matrix.config.compiler-version }}-boost-1.83.0-2
- name: Install Compiler and Dependencies
shell: pwsh
run: |
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/buildwinnopch.yml
Expand Up @@ -62,7 +62,7 @@ jobs:
uses: actions/cache@v3
with:
path: lib/boost_1_83_0
key: ${{ runner.os }}-${{ matrix.config.cxx-compiler }}-${{ matrix.config.compiler-version }}-${{ matrix.config.build-type }}-${{ matrix.config.nopch }}-${{ matrix.config.ninja }}-boost-1.83.0
key: ${{ runner.os }}-${{ matrix.config.cxx-compiler }}-${{ matrix.config.compiler-version }}-${{ matrix.config.build-type }}-${{ matrix.config.nopch }}-${{ matrix.config.ninja }}-boost-1.83.0-2
- name: Install llvm
if: matrix.config.cxx-compiler == 'clang-cl'
shell: powershell
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/coverage.yml
Expand Up @@ -32,7 +32,7 @@ jobs:
uses: actions/cache@v3
with:
path: lib/boost_1_83_0
key: ${{ runner.os }}-${{ matrix.config.cxx-compiler }}-${{ matrix.config.compiler-version }}-boost-1.83.0
key: ${{ runner.os }}-${{ matrix.config.cxx-compiler }}-${{ matrix.config.compiler-version }}-boost-1.83.0-2

- name: Install Compiler and Dependencies
shell: pwsh
Expand Down
10 changes: 5 additions & 5 deletions .github/workflows/coverity-scan.yml
Expand Up @@ -59,11 +59,11 @@ jobs:
run: |
cd bin-build
cmake .. -DNO_PCH=1
cmake --build . --target libcurl
cmake --build . --target libantlr_ex
cmake --build . --target boost
cmake --build . --target kaitai
cmake --build . --target tinyxml
cmake --build . --target libcurl_Ext
cmake --build . --target libantlr_ext
cmake --build . --target boost_extract
cmake --build . --target kaitai_Ext
cmake --build . --target libtinyxml
- name: Build with cov-build
Expand Down
5 changes: 4 additions & 1 deletion CMakeLists.txt
Expand Up @@ -143,15 +143,18 @@ include(cmake/Benchmark.cmake)
include(cmake/EscriptGrammarLib.cmake)
include(cmake/escript_grammar.cmake)
include(cmake/Fmt.cmake)
include(cmake/ZLib.cmake)
if (${windows})
include(cmake/ZLib.cmake)
include(cmake/StackWalker.cmake)
endif()
include(cmake/Kaitai.cmake)
if (BUILD_ALL OR ONLY_POL)
include(cmake/Curl.cmake)
include(cmake/SQL.cmake)
endif()
include(cmake/TinyXML.cmake)
include(cmake/PicoJson.cmake)
include(cmake/UTF8.cmake)

add_subdirectory(docs)
add_subdirectory(pol-core)
Expand Down
14 changes: 13 additions & 1 deletion cmake/Antlr.cmake
Expand Up @@ -14,7 +14,7 @@ else()
set(ANTLR_LIB "${ANTLR_INSTALL_DIR}/lib/antlr4-runtime-static.lib")
endif()
if (NOT EXISTS ${ANTLR_LIB})
ExternalProject_Add(libantlr_ex
ExternalProject_Add(libantlr_ext
SOURCE_DIR ${ANTLR_SOURCE_DIR}
PREFIX antlr
LIST_SEPARATOR |
Expand All @@ -30,6 +30,18 @@ if (NOT EXISTS ${ANTLR_LIB})
LOG_INSTALL 1
LOG_OUTPUT_ON_FAILURE 1
)
file(MAKE_DIRECTORY ${ANTLR_INCLUDE_DIR}) #directory has to exist during configure
else()
message("Antlr already build")
endif()

# imported target to add include/lib dir and additional dependencies
add_library(libantlr STATIC IMPORTED)
set_target_properties(libantlr PROPERTIES
IMPORTED_LOCATION ${ANTLR_LIB}
IMPORTED_IMPLIB ${ANTLR_LIB}
INTERFACE_INCLUDE_DIRECTORIES ${ANTLR_INCLUDE_DIR}
INTERFACE_COMPILE_DEFINITIONS ANTLR4CPP_STATIC
FOLDER 3rdParty
)
add_dependencies(libantlr libantlr_ext)
150 changes: 99 additions & 51 deletions cmake/Boost.cmake
@@ -1,6 +1,6 @@
message("* boost")
set (BOOST_SOURCE_DIR "${POL_EXT_LIB_DIR}/boost_1_83_0")
set (BOOST_STAGE_LIB_DIR "${BOOST_SOURCE_DIR}/stage/lib")
# set (BOOST_STAGE_LIB_DIR "${BOOST_SOURCE_DIR}/stage/lib")

if (clang)
set (BOOST_TOOLSET "clang")
Expand All @@ -24,63 +24,111 @@ endif()

if (${windows})
set (BOOST_CONFIGURE_COMMAND "bootstrap.bat")
set (BOOST_BUILD_COMMAND "b2.exe")
set (BOOST_REGEX_LIB "${BOOST_STAGE_LIB_DIR}/libboost_regex.lib" )
set (BOOST_SYSTEM_LIB "${BOOST_STAGE_LIB_DIR}/libboost_system.lib" )
set (BOOST_THREAD_LIB "${BOOST_STAGE_LIB_DIR}/libboost_thread.lib" )
if (msvc)
set (BOOST_CXX_FLAGS "/MT")
else()
set (BOOST_CXX_FLAGS "-fms-runtime-lib=static")
endif()
# set (BOOST_BUILD_COMMAND "b2.exe")
# set (BOOST_REGEX_LIB "${BOOST_STAGE_LIB_DIR}/libboost_regex.lib" )
# set (BOOST_SYSTEM_LIB "${BOOST_STAGE_LIB_DIR}/libboost_system.lib" )
# set (BOOST_THREAD_LIB "${BOOST_STAGE_LIB_DIR}/libboost_thread.lib" )
# if (msvc)
# set (BOOST_CXX_FLAGS "/MT")
# else()
# set (BOOST_CXX_FLAGS "-fms-runtime-lib=static")
# endif()
else()
set (BOOST_CONFIGURE_COMMAND "./bootstrap.sh")
set (BOOST_BUILD_COMMAND "./b2")
set (BOOST_REGEX_LIB "${BOOST_STAGE_LIB_DIR}/libboost_regex.a" )
set (BOOST_SYSTEM_LIB "${BOOST_STAGE_LIB_DIR}/libboost_system.a" )
set (BOOST_THREAD_LIB "${BOOST_STAGE_LIB_DIR}/libboost_thread.a" )

set (BOOST_CXX_FLAGS "")
foreach(OSX_ARCHITECTURE ${CMAKE_OSX_ARCHITECTURES})
set (BOOST_CXX_FLAGS "${BOOST_CXX_FLAGS} -arch ${OSX_ARCHITECTURE}")
endforeach()
# set (BOOST_BUILD_COMMAND "./b2")
# set (BOOST_REGEX_LIB "${BOOST_STAGE_LIB_DIR}/libboost_regex.a" )
# set (BOOST_SYSTEM_LIB "${BOOST_STAGE_LIB_DIR}/libboost_system.a" )
# set (BOOST_THREAD_LIB "${BOOST_STAGE_LIB_DIR}/libboost_thread.a" )
#
# set (BOOST_CXX_FLAGS "")
# foreach(OSX_ARCHITECTURE ${CMAKE_OSX_ARCHITECTURES})
# set (BOOST_CXX_FLAGS "${BOOST_CXX_FLAGS} -arch ${OSX_ARCHITECTURE}")
# endforeach()
endif()

if(NOT EXISTS ${BOOST_REGEX_LIB} OR NOT EXISTS ${BOOST_SYSTEM_LIB} OR NOT EXISTS ${BOOST_THREAD_LIB})
message(" - will build in ${BOOST_SOURCE_DIR} toolset=${BOOST_TOOLSET} cxxflags=${BOOST_CXX_FLAGS}")
ExternalProject_Add(boost
SOURCE_DIR ${BOOST_SOURCE_DIR}
set(boost_needs_extract FALSE)
set(boost_needs_build FALSE)
if (NOT EXISTS "${BOOST_SOURCE_DIR}/boost")
message(" - will extract")
ExternalProject_Add(boost_extract
URL "https://boostorg.jfrog.io/artifactory/main/release/1.83.0/source/boost_1_83_0.tar.bz2"
SOURCE_DIR "${BOOST_SOURCE_DIR}"
CONFIGURE_COMMAND ${BOOST_CONFIGURE_COMMAND} --with-toolset=${BOOST_TOOLSET}
BUILD_COMMAND ""
INSTALL_COMMAND ""
CONFIGURE_COMMAND ""
DOWNLOAD_COMMAND ""
BUILD_COMMAND ${BOOST_BUILD_COMMAND} cxxflags=${BOOST_CXX_FLAGS} address-model=${ARCH_BITS} toolset=${BOOST_TOOLSET} variant=release link=static runtime-link=static --layout=system --with-regex --with-system --with-thread stage
BUILD_BYPRODUCTS ${BOOST_REGEX_LIB} ${BOOST_SYSTEM_LIB} ${BOOST_THREAD_LIB}
LOG_BUILD 1
BUILD_BYPRODUCTS "${BOOST_SOURCE_DIR}"
LOG_DOWNLOAD 1
LOG_CONFIGURE 1
BUILD_IN_SOURCE 1
LOG_OUTPUT_ON_FAILURE 1
DOWNLOAD_EXTRACT_TIMESTAMP 1
)
set_target_properties (boost PROPERTIES FOLDER 3rdParty)
if (NOT EXISTS "${BOOST_SOURCE_DIR}/boost")
message(" - will extract")
ExternalProject_Add(boost_extract
URL "https://boostorg.jfrog.io/artifactory/main/release/1.83.0/source/boost_1_83_0.tar.bz2"
SOURCE_DIR "${BOOST_SOURCE_DIR}"
CONFIGURE_COMMAND ${BOOST_CONFIGURE_COMMAND} --with-toolset=${BOOST_TOOLSET}
BUILD_COMMAND ""
INSTALL_COMMAND ""
BUILD_BYPRODUCTS "${BOOST_SOURCE_DIR}"
LOG_DOWNLOAD 1
LOG_CONFIGURE 1
BUILD_IN_SOURCE 1
LOG_OUTPUT_ON_FAILURE 1
DOWNLOAD_EXTRACT_TIMESTAMP 1
)
set_target_properties (boost_extract PROPERTIES FOLDER 3rdParty)

add_dependencies(boost boost_extract)
else()
message(" - will not extract")
endif()
set_target_properties (boost_extract PROPERTIES FOLDER 3rdParty)
set(boost_needs_extract TRUE)
else()
message(" - will not build")
message(" - will not extract")
endif()

#if(NOT EXISTS ${BOOST_REGEX_LIB} OR NOT EXISTS ${BOOST_SYSTEM_LIB} OR NOT EXISTS ${BOOST_THREAD_LIB})
# message(" - will build in ${BOOST_SOURCE_DIR} toolset=${BOOST_TOOLSET} cxxflags=${BOOST_CXX_FLAGS}")
# ExternalProject_Add(boost_build
# SOURCE_DIR ${BOOST_SOURCE_DIR}
# INSTALL_COMMAND ""
# CONFIGURE_COMMAND ""
# DOWNLOAD_COMMAND ""
# BUILD_COMMAND ${BOOST_BUILD_COMMAND} cxxflags=${BOOST_CXX_FLAGS} address-model=${ARCH_BITS} toolset=${BOOST_TOOLSET} variant=release link=static runtime-link=static --layout=system --with-regex --with-system --with-thread stage
# BUILD_BYPRODUCTS ${BOOST_REGEX_LIB} ${BOOST_SYSTEM_LIB} ${BOOST_THREAD_LIB}
# LOG_BUILD 1
# BUILD_IN_SOURCE 1
# LOG_OUTPUT_ON_FAILURE 1
# )
# if (boost_needs_extract)
# add_dependencies(boost_build boost_extract)
# endif()
# set_target_properties (boost_build PROPERTIES FOLDER 3rdParty)
# set(boost_needs_build TRUE)
#else()
# message(" - will not build")
#endif()

# imported target to add include/lib dir and additional dependencies
add_library(libboost_headers INTERFACE IMPORTED)
set_target_properties(libboost_headers PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES ${BOOST_SOURCE_DIR}
)
if (boost_needs_extract)
add_dependencies(libboost_headers boost_extract)
endif()

#add_library(libboost_regex STATIC IMPORTED)
#set_target_properties(libboost_regex PROPERTIES
# IMPORTED_LOCATION ${BOOST_REGEX_LIB}
# IMPORTED_IMPLIB ${BOOST_REGEX_LIB}
# INTERFACE_INCLUDE_DIRECTORIES ${BOOST_SOURCE_DIR}
# FOLDER 3rdParty
#)
#if (boost_needs_build)
# add_dependencies(libboost_regex boost_build)
#endif()
#
#add_library(libboost_system STATIC IMPORTED)
#set_target_properties(libboost_system PROPERTIES
# IMPORTED_LOCATION ${BOOST_SYSTEM_LIB}
# IMPORTED_IMPLIB ${BOOST_SYSTEM_LIB}
# INTERFACE_INCLUDE_DIRECTORIES ${BOOST_SOURCE_DIR}
# FOLDER 3rdParty
#)
#if (boost_needs_build)
# add_dependencies(libboost_system boost_build)
#endif()
#
#add_library(libboost_thread STATIC IMPORTED)
#set_target_properties(libboost_thread PROPERTIES
# IMPORTED_LOCATION ${BOOST_THREAD_LIB}
# IMPORTED_IMPLIB ${BOOST_THREAD_LIB}
# INTERFACE_INCLUDE_DIRECTORIES ${BOOST_SOURCE_DIR}
# FOLDER 3rdParty
#)
#if (boost_needs_build)
# add_dependencies(libboost_thread boost_build)
#endif()
36 changes: 34 additions & 2 deletions cmake/Curl.cmake
Expand Up @@ -13,7 +13,7 @@ else()
endif()

if(NOT EXISTS "${CURL_LIB}")
ExternalProject_Add(libcurl
ExternalProject_Add(libcurl_Ext
URL "${CURL_SOURCE_DIR}/../curl-8.2.1.zip"
SOURCE_DIR "${CURL_SOURCE_DIR}"
PREFIX curl
Expand All @@ -30,7 +30,39 @@ if(NOT EXISTS "${CURL_LIB}")
LOG_OUTPUT_ON_FAILURE 1
DOWNLOAD_EXTRACT_TIMESTAMP 1
)
set_target_properties (libcurl PROPERTIES FOLDER 3rdParty)
set_target_properties (libcurl_Ext PROPERTIES FOLDER 3rdParty)
file(MAKE_DIRECTORY ${CURL_INSTALL_DIR}/include) #directory has to exist during configure
else()
message("Curl already build")
endif()

# imported target to add include/lib dir and additional dependencies
add_library(libcurl STATIC IMPORTED)
set_target_properties(libcurl PROPERTIES
IMPORTED_LOCATION ${CURL_LIB}
IMPORTED_IMPLIB ${CURL_LIB}
INTERFACE_INCLUDE_DIRECTORIES ${CURL_INSTALL_DIR}/include
INTERFACE_COMPILE_DEFINITIONS CURL_STATICLIB
FOLDER 3rdParty
)
if (${linux})
set_property(TARGET libcurl
PROPERTY INTERFACE_LINK_LIBRARIES ssl)
if (APPLE)
pkg_search_module(LIBSSH2 REQUIRED libssh2 IMPORTED_TARGET)
if(TARGET PkgConfig::LIBSSH2)
set_property(TARGET libcurl APPEND
PROPERTY INTERFACE_LINK_LIBRARIES PkgConfig::LIBSSH2)
endif()
find_library(CoreFoundation_Library CoreFoundation)
find_library(CoreServices_Library CoreServices)
find_library(SystemConfiguration_Library SystemConfiguration)
set_property(TARGET libcurl APPEND
PROPERTY INTERFACE_LINK_LIBRARIES
${CoreFoundation_Library} ${CoreServices_Library} ${SystemConfiguration_Library})
endif()
else()
set_property(TARGET libcurl
PROPERTY INTERFACE_LINK_LIBRARIES wldap32)
endif()
add_dependencies(libcurl libcurl_Ext)
39 changes: 16 additions & 23 deletions cmake/EscriptGrammarLib.cmake
@@ -1,12 +1,14 @@
set(grammardir ${POL_EXT_LIB_DIR}/Parser)

set(escriptgrammarlib_sources
${POL_EXT_LIB_DIR}/EscriptGrammar/EscriptLexer.cpp
${POL_EXT_LIB_DIR}/EscriptGrammar/EscriptLexer.h
${POL_EXT_LIB_DIR}/EscriptGrammar/EscriptParser.cpp
${POL_EXT_LIB_DIR}/EscriptGrammar/EscriptParser.h
${POL_EXT_LIB_DIR}/EscriptGrammar/EscriptParserBaseListener.cpp
${POL_EXT_LIB_DIR}/EscriptGrammar/EscriptParserBaseListener.h
${POL_EXT_LIB_DIR}/EscriptGrammar/EscriptParserListener.cpp
${POL_EXT_LIB_DIR}/EscriptGrammar/EscriptParserListener.h
${grammardir}/EscriptGrammar/EscriptLexer.cpp
${grammardir}/EscriptGrammar/EscriptLexer.h
${grammardir}/EscriptGrammar/EscriptParser.cpp
${grammardir}/EscriptGrammar/EscriptParser.h
${grammardir}/EscriptGrammar/EscriptParserBaseListener.cpp
${grammardir}/EscriptGrammar/EscriptParserBaseListener.h
${grammardir}/EscriptGrammar/EscriptParserListener.cpp
${grammardir}/EscriptGrammar/EscriptParserListener.h
)

set(lib_name escriptgrammarlib)
Expand All @@ -17,22 +19,10 @@ add_library(${lib_name} STATIC
set_compile_flags(${lib_name} 0)

target_include_directories(${lib_name} PRIVATE
"${POL_EXT_LIB_DIR}/EscriptGrammar"
)
target_include_directories(${lib_name} PUBLIC
${ANTLR_INCLUDE_DIR}
"${grammardir}/EscriptGrammar"
)

if (NOT EXISTS ${ANTLR_LIB})
add_dependencies(${lib_name} libantlr_ex)
endif()

target_compile_definitions(${lib_name} PUBLIC
-DANTLR4CPP_STATIC
)

target_link_libraries(${lib_name} PUBLIC
${ANTLR_LIB}
libantlr
)

warning_suppression(${lib_name})
Expand All @@ -47,4 +37,7 @@ target_compile_options(${lib_name} PRIVATE
>
)

set_target_properties (${lib_name} PROPERTIES FOLDER 3rdParty)
set_target_properties (${lib_name} PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES ${grammardir}
FOLDER 3rdParty
)

0 comments on commit 271a110

Please sign in to comment.