Skip to content

Commit 8beab72

Browse files
authored
Merge pull request #9 from 7bitcoder/dev
Change Cmake build method
2 parents 0f9499d + 681a8f2 commit 8beab72

38 files changed

+263
-174
lines changed

.github/actions/cmake-build/action.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ inputs:
44
args:
55
description: "Other arguments"
66
required: false
7-
default: -DBUILD_TESTS:BOOL=true -DBUILD_EXAMPLES:BOOL=true
7+
default: ""
88
build-type:
99
description: "Build type"
1010
required: false
@@ -13,10 +13,10 @@ inputs:
1313
description: "Toolchain file"
1414
required: false
1515
default: conan_toolchain.cmake
16-
library-type:
17-
description: "Library type"
16+
shared-lib:
17+
description: "Shared lib"
1818
required: false
19-
default: Static
19+
default: "OFF"
2020
build-dir:
2121
description: "Build directory"
2222
required: true
@@ -26,7 +26,7 @@ runs:
2626
steps:
2727
- name: Configure CMake
2828
working-directory: ${{ inputs.build-dir }}
29-
run: cmake .. -DCMAKE_BUILD_TYPE=${{ inputs.build-type }} -DLIBRARY_TYPE=${{ inputs.library-type }} -DCMAKE_TOOLCHAIN_FILE:STRING="${{ inputs.toolchain }}" ${{ inputs.args }}
29+
run: cmake .. -DCMAKE_BUILD_TYPE=${{ inputs.build-type }} -DSEVEN_BIT_DI_BUILD_SHARED:STRING="${{ inputs.shared-lib }}" -DCMAKE_TOOLCHAIN_FILE:STRING="${{ inputs.toolchain }}" -DSEVEN_BIT_DI_BUILD_TESTS:BOOL=true -DSEVEN_BIT_DI_BUILD_EXAMPLES:BOOL=true ${{ inputs.args }}
3030
shell: pwsh
3131

3232
- name: Build

.github/workflows/DevCI.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ jobs:
1717
strategy:
1818
fail-fast: false
1919
matrix:
20-
libraryType: [HeaderOnly, Static, Shared]
20+
shared-lib: ["ON", "OFF"]
2121
os: [ubuntu-22.04, macos-12, windows-2022]
2222

2323
runs-on: ${{matrix.os}}
@@ -35,7 +35,7 @@ jobs:
3535
with:
3636
build-dir: ${{ env.BUILD_DIR }}
3737
build-type: ${{ env.BUILD_TYPE }}
38-
library-type: ${{ matrix.libraryType }}
38+
shared-lib: ${{ matrix.shared-lib }}
3939

4040
- name: Test
4141
working-directory: ${{ env.BUILD_DIR }}

.github/workflows/MainCI.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ jobs:
1616
test-gcc:
1717
strategy:
1818
matrix:
19-
libraryType: [Static]
2019
version: [7, 8, 10, 11]
2120
os: [ubuntu-20.04]
2221

@@ -48,7 +47,6 @@ jobs:
4847
test-clang:
4948
strategy:
5049
matrix:
51-
libraryType: [Static]
5250
version: [6, 13, 14, 15]
5351
os: [ubuntu-20.04]
5452

CMakeLists.txt

Lines changed: 34 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,52 @@
11
cmake_minimum_required(VERSION 3.15.0)
2-
project(7bitInjector VERSION 1.0.0)
32

4-
set(CMAKE_CXX_STANDARD 17)
5-
set(CMAKE_CXX_STANDARD_REQUIRED ON)
6-
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH};${CMAKE_CURRENT_SOURCE_DIR}/Cmake)
3+
set(SEVEN_BIT_DI_PROJECT_NAME 7bitDI)
74

8-
include(GoogleTest)
9-
include(CPack)
10-
enable_testing()
5+
set(SEVEN_BIT_DI_VERSION_MAJOR 1)
6+
set(SEVEN_BIT_DI_VERSION_MINOR 0)
7+
set(SEVEN_BIT_DI_VERSION_PATCH 0)
118

12-
include(Setup)
9+
set(SEVEN_BIT_DI_VERSION ${SEVEN_BIT_DI_VERSION_MAJOR}.${SEVEN_BIT_DI_VERSION_MINOR}.${SEVEN_BIT_DI_VERSION_PATCH})
10+
11+
project(${SEVEN_BIT_DI_PROJECT_NAME} VERSION ${SEVEN_BIT_DI_VERSION})
12+
13+
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH};${CMAKE_CURRENT_SOURCE_DIR}/Cmake)
1314

1415
include_directories(Include)
16+
include(Setup)
17+
18+
set(CMAKE_CXX_STANDARD 17)
19+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
1520

1621
add_subdirectory(Source)
1722

18-
if(BUILD_DOCS)
23+
if(SEVEN_BIT_DI_BUILD_DOCS)
1924
add_subdirectory(Docs)
2025
endif()
2126

22-
if(BUILD_TESTS)
27+
if(SEVEN_BIT_DI_BUILD_TESTS OR SEVEN_BIT_DI_BUILD_TESTS_HO)
28+
include(GoogleTest)
29+
include(CPack)
30+
enable_testing()
31+
2332
add_subdirectory(Tests)
2433
endif()
2534

26-
if(BUILD_EXAMPLES)
35+
if(SEVEN_BIT_DI_BUILD_EXAMPLES OR SEVEN_BIT_DI_BUILD_EXAMPLE_HO)
2736
add_subdirectory(Examples)
2837
endif()
2938

30-
install(DIRECTORY Include/ DESTINATION include)
39+
install(DIRECTORY ${SEVEN_BIT_DI_HEADERS_DIR}/ DESTINATION include)
40+
41+
export(
42+
TARGETS 7BitDI
43+
NAMESPACE 7BitDI::
44+
FILE ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_TARGETS_FILE})
45+
install(EXPORT 7BitDI DESTINATION ${EXPORT_DEST_DIR} NAMESPACE 7BitDI:: FILE ${CONFIG_TARGETS_FILE})
46+
47+
include(CMakePackageConfigHelpers)
48+
configure_package_config_file(${PROJECT_CONFIG_IN} ${PROJECT_CONFIG_OUT}
49+
INSTALL_DESTINATION ${EXPORT_DEST_DIR})
50+
51+
write_basic_package_version_file(${VERSIONS_CONFIG_FILE} COMPATIBILITY SameMajorVersion)
52+
install(FILES ${PROJECT_CONFIG_OUT} ${VERSIONS_CONFIG_FILE} DESTINATION ${EXPORT_DEST_DIR})

Cmake/7bitDIConfig.cmake.in

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
@PACKAGE_INIT@
2+
3+
include("${CMAKE_CURRENT_LIST_DIR}/${config_targets_file}")
4+
5+
check_required_components(spdlog)

Cmake/Setup.cmake

Lines changed: 46 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
include(Functions)
22

3-
set(CPACK_PROJECT_NAME ${PROJECT_NAME})
4-
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
3+
if(NOT CMAKE_BUILD_TYPE)
4+
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose Release or Debug" FORCE)
5+
endif()
56

67
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
78
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}/bin)
@@ -13,43 +14,61 @@ set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
1314
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}/lib)
1415
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR}/lib)
1516

17+
set(CPACK_PROJECT_NAME ${SEVEN_BIT_DI_PROJECT_NAME})
18+
set(CPACK_PROJECT_VERSION ${SEVEN_BIT_DI_VERSION})
19+
1620
set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/publish)
1721

18-
SET(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_RPATH}:\$ORIGIN/../bin:\$ORIGIN)
22+
set(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_RPATH}:\$ORIGIN/../bin:\$ORIGIN)
23+
24+
set(SEVEN_BIT_DI_HEADERS_DIR "${CMAKE_SOURCE_DIR}/Include")
1925

20-
set(LIBRARY_TYPE "HeaderOnly" CACHE STRING
21-
"Library build type: Shared;Static;HeaderOnly")
26+
file(GLOB SEVEN_BIT_DI_TOP_HEADERS "${SEVEN_BIT_DI_HEADERS_DIR}/SevenBit/DI/*.hpp")
27+
file(GLOB SEVEN_BIT_DI_DETAILS_HEADERS "${SEVEN_BIT_DI_HEADERS_DIR}/SevenBit/DI/Details/*.hpp")
28+
file(GLOB SEVEN_BIT_DI_IMPL_HEADERS "${SEVEN_BIT_DI_HEADERS_DIR}/SevenBit/DI/Impl/*.hpp")
29+
set(SEVEN_BIT_DI_ALL_HEADERS ${SEVEN_BIT_DI_TOP_HEADERS} ${SEVEN_BIT_DI_DETAILS_HEADERS} ${SEVEN_BIT_DI_IMPL_HEADERS})
2230

23-
set(LIBRARY_TYPE_VALUES "Shared;Static;HeaderOnly" CACHE STRING
24-
"List of possible BUILD_LIBRARY_Type values")
31+
source_group("Header Files\\SevenBit" FILES ${SEVEN_BIT_DI_TOP_HEADERS})
32+
source_group("Header Files\\SevenBit\\Details" FILES ${SEVEN_BIT_DI_DETAILS_HEADERS})
33+
source_group("Header Files\\SevenBit\\Details\\Impl" FILES ${SEVEN_BIT_DI_IMPL_HEADERS})
2534

26-
set_property(CACHE LIBRARY_TYPE PROPERTY STRINGS ${LIBRARY_TYPE_VALUES})
35+
# build shared option
36+
option(SEVEN_BIT_DI_BUILD_SHARED "Build shared library" OFF)
2737

28-
set(BUILD_DOCS false CACHE BOOL "Turn on to build documentation")
29-
set(BUILD_TESTS false CACHE BOOL "Turn on to build tests")
30-
set(BUILD_EXAMPLES false CACHE BOOL "Turn on to build examples")
38+
# build position independent code
39+
option(SEVEN_BIT_DI_BUILD_PIC "Build position independent code (-fPIC)" OFF)
3140

32-
set(SEVEN_BIT_INJECTOR_VERSION ${CMAKE_PROJECT_VERSION})
41+
# example options
42+
option(SEVEN_BIT_DI_BUILD_EXAMPLES "Build example" OFF)
43+
option(SEVEN_BIT_DI_BUILD_EXAMPLES_HO "Build header only example" OFF)
3344

34-
if(LIBRARY_TYPE STREQUAL "Shared")
35-
set(BUILD_LIBRARY_TYPE "Shared")
36-
set(SEVEN_BIT_INJECTOR_SHARED_LIB true)
37-
elseif(LIBRARY_TYPE STREQUAL "Static")
38-
set(BUILD_LIBRARY_TYPE "Static")
39-
set(SEVEN_BIT_INJECTOR_STATIC_LIB true)
40-
else() # headerOnly
41-
set(BUILD_LIBRARY_TYPE "HeaderOnly")
42-
set(SEVEN_BIT_INJECTOR_HEADER_ONLY_LIB true)
45+
# testing options
46+
option(SEVEN_BIT_DI_BUILD_TESTS "Build tests" OFF)
47+
option(SEVEN_BIT_DI_BUILD_TESTS_HO "Build tests using the header only version" OFF)
48+
49+
# build documentation option (requires sphinx and doxygen installed)
50+
option(SEVEN_BIT_DI_BUILD_DOCS "Turn on to build documentation" OFF)
51+
52+
if(SEVEN_BIT_DI_BUILD_PIC)
53+
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
4354
endif()
4455

45-
configure_file(Include/SevenBit/DI/CmakeDef.hpp.input ${PROJECT_SOURCE_DIR}/Include/SevenBit/DI/CmakeDef.hpp)
56+
set(PROJECT_CONFIG_IN ${CMAKE_SOURCE_DIR}/Cmake/7bitDIConfig.cmake.in)
57+
set(PROJECT_CONFIG_OUT ${CMAKE_BINARY_DIR}/7bitDIConfig.cmake)
58+
set(CONFIG_TARGETS_FILE 7bitDIConfigTargets.cmake)
59+
set(VERSIONS_CONFIG_FILE ${CMAKE_BINARY_DIR}/7bitDIConfigVersion.cmake)
60+
set(EXPORT_DEST_DIR cmake/7bitDI)
61+
62+
configure_file(${CMAKE_SOURCE_DIR}/Include/SevenBit/DI/Version.hpp.input ${CMAKE_SOURCE_DIR}/Include/SevenBit/DI/Version.hpp)
4663

4764
set(INFOS
48-
"${CMAKE_PROJECT_NAME} version: ${SEVEN_BIT_INJECTOR_VERSION}"
49-
"${CMAKE_PROJECT_NAME} build as ${BUILD_LIBRARY_TYPE} library"
65+
"${SEVEN_BIT_DI_PROJECT_NAME} version: ${SEVEN_BIT_DI_VERSION}"
66+
"${SEVEN_BIT_DI_PROJECT_NAME} build as shared library ${SEVEN_BIT_DI_BUILD_SHARED} "
5067
"=================================================="
51-
"Build tests: ${BUILD_TESTS}"
52-
"Build examples: ${BUILD_EXAMPLES}"
53-
"Build documentation: ${BUILD_DOCS}"
68+
"Build tests: ${SEVEN_BIT_DI_BUILD_TESTS}"
69+
"Build tests header only: ${SEVEN_BIT_DI_BUILD_TESTS_HO}"
70+
"Build examples: ${SEVEN_BIT_DI_BUILD_EXAMPLES}"
71+
"Build examples header only: ${SEVEN_BIT_DI_BUILD_EXAMPLES_HO}"
72+
"Build documentation: ${SEVEN_BIT_DI_BUILD_DOCS}"
5473
)
5574
printInfo("${INFOS}" = 50 7 0)

Docs/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,5 +30,6 @@ add_custom_target(GenerateDoc
3030
)
3131

3232
include(GNUInstallDirs)
33+
3334
install(DIRECTORY ${SPHINX_BUILD}
34-
DESTINATION ${CMAKE_INSTALL_DOCDIR})
35+
DESTINATION doc)

0 commit comments

Comments
 (0)