Skip to content

Commit df7e9fe

Browse files
committed
Initial commit
0 parents  commit df7e9fe

83 files changed

Lines changed: 19638 additions & 0 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.clang-format

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# https://clang.llvm.org/docs/ClangFormatStyleOptions.html
2+
#
3+
---
4+
BasedOnStyle: Chromium
5+
6+
UseTab: Never
7+
IndentWidth: 4
8+
AccessModifierOffset: -4
9+
ColumnLimit: 90
10+
SpacesBeforeTrailingComments: 1
11+
12+
MaxEmptyLinesToKeep: 1
13+
EmptyLineBeforeAccessModifier: Always
14+
15+
FixNamespaceComments: true
16+
17+
AlignAfterOpenBracket: DontAlign
18+
AlignTrailingComments: false
19+
AllowAllConstructorInitializersOnNextLine: false
20+
AllowShortFunctionsOnASingleLine: None
21+
AllowShortLambdasOnASingleLine: false
22+
BinPackArguments: false
23+
BreakConstructorInitializers: BeforeComma
24+
ConstructorInitializerAllOnOneLineOrOnePerLine: false
25+
IndentCaseLabels: false
26+
PenaltyBreakComment: 0
27+
28+
BreakBeforeBraces: Custom
29+
BraceWrapping:
30+
AfterCaseLabel: true
31+
AfterClass: true
32+
AfterEnum: true
33+
AfterExternBlock: true
34+
AfterFunction: true
35+
AfterStruct: true
36+
AfterUnion: true
37+
BeforeCatch: true
38+
BeforeWhile: true

.github/workflows/build.yml

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
name: "build"
2+
3+
on:
4+
workflow_dispatch:
5+
6+
push:
7+
branches:
8+
- main
9+
tags:
10+
- v*
11+
12+
pull_request:
13+
14+
jobs:
15+
build:
16+
runs-on: macos-latest
17+
steps:
18+
- name: Prepare
19+
run: brew install doxygen
20+
21+
- name: Checkout
22+
uses: actions/checkout@v2
23+
24+
- name: Build
25+
run: make
26+
27+
- name: Test
28+
run: make test
29+
30+
- name: Example
31+
run: make example
32+
33+
- name: Install
34+
run: sudo make install
35+
36+
- name: Deploy
37+
uses: JamesIves/github-pages-deploy-action@4.0.0
38+
with:
39+
branch: doxygen
40+
folder: html
41+
single-commit: true

.gitignore

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
/build
2+
/html
3+
compile_commands.json
4+
GNUmakefile
5+
*.org
6+
.ackrc
7+
.dir-locals.el

AUTHORS

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# Authors ordered by first contribution.
2+
Victor Gaydov <victor@enise.org>

CMakeLists.txt

Lines changed: 277 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,277 @@
1+
cmake_minimum_required(VERSION 3.0.0)
2+
3+
project(aspl CXX)
4+
5+
set(PACKAGE_NAME libASPL)
6+
set(PACKAGE_VERSION 1.0.0)
7+
8+
set(LIB_TARGET libASPL)
9+
set(LIB_NAME ASPL)
10+
set(TEST_NAME aspl-test)
11+
12+
if(NOT CMAKE_BUILD_TYPE)
13+
set(CMAKE_BUILD_TYPE "Release")
14+
endif()
15+
16+
set(CMAKE_CXX_STANDARD 17)
17+
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
18+
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
19+
20+
set(COMPILER_FLAGS "")
21+
set(LINKER_FLAGS "")
22+
23+
if(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
24+
list(APPEND COMPILER_FLAGS
25+
"-Weverything"
26+
"-Wno-anon-enum-enum-conversion"
27+
"-Wno-c++98-c++11-c++14-compat"
28+
"-Wno-c++98-compat"
29+
"-Wno-c++98-compat-pedantic"
30+
"-Wno-double-promotion"
31+
"-Wno-exit-time-destructors"
32+
"-Wno-float-equal"
33+
"-Wno-format-nonliteral"
34+
"-Wno-four-char-constants"
35+
"-Wno-global-constructors"
36+
"-Wno-mismatched-tags"
37+
"-Wno-padded"
38+
"-Wno-shadow-uncaptured-local"
39+
"-Wno-unused-parameter"
40+
"-Wno-weak-vtables"
41+
)
42+
endif()
43+
44+
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
45+
list(APPEND COMPILER_FLAGS
46+
"-ggdb"
47+
"-funwind-tables"
48+
"-fno-omit-frame-pointer"
49+
)
50+
endif()
51+
52+
option(ENABLE_SANITIZERS "enable clang sanitizer" OFF)
53+
54+
if(ENABLE_SANITIZERS)
55+
list(APPEND COMPILER_FLAGS
56+
"-fsanitize=address"
57+
)
58+
59+
list(APPEND LINKER_FLAGS
60+
"-fsanitize=address"
61+
)
62+
endif()
63+
64+
string(REPLACE ";" " " COMPILER_FLAGS "${COMPILER_FLAGS}")
65+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COMPILER_FLAGS}")
66+
67+
string(REPLACE ";" " " LINKER_FLAGS "${LINKER_FLAGS}")
68+
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${LINKER_FLAGS}")
69+
70+
set(OBJECT_LIST
71+
"Device"
72+
"MuteControl"
73+
"Object"
74+
"Plugin"
75+
"Stream"
76+
"VolumeControl"
77+
)
78+
79+
foreach(CLASS IN LISTS OBJECT_LIST)
80+
add_custom_command(
81+
DEPENDS
82+
"${PROJECT_SOURCE_DIR}/src/${CLASS}.json"
83+
"${PROJECT_SOURCE_DIR}/script/generate-accessors.py"
84+
OUTPUT
85+
"${PROJECT_SOURCE_DIR}/src/${CLASS}.g.cpp"
86+
COMMAND cd "${PROJECT_SOURCE_DIR}" &&
87+
"${PROJECT_SOURCE_DIR}/script/generate-accessors.py"
88+
-i "src/${CLASS}.json"
89+
-o "src/${CLASS}.g.cpp"
90+
COMMENT
91+
"Generating src/${CLASS}.g.cpp"
92+
)
93+
94+
list(APPEND SOURCE_LIST
95+
"${PROJECT_SOURCE_DIR}/src/${CLASS}.cpp"
96+
"${PROJECT_SOURCE_DIR}/src/${CLASS}.g.cpp"
97+
)
98+
endforeach()
99+
100+
add_custom_command(
101+
DEPENDS
102+
"${PROJECT_SOURCE_DIR}/src/Bridge.json"
103+
"${PROJECT_SOURCE_DIR}/script/generate-bridge.py"
104+
OUTPUT
105+
"${PROJECT_SOURCE_DIR}/src/Bridge.g.cpp"
106+
COMMAND cd "${PROJECT_SOURCE_DIR}" &&
107+
"${PROJECT_SOURCE_DIR}/script/generate-bridge.py"
108+
-i "src/Bridge.json"
109+
-o "src/Bridge.g.cpp"
110+
COMMENT
111+
"Generating src/Bridge.g.cpp"
112+
)
113+
114+
list(APPEND SOURCE_LIST
115+
"${PROJECT_SOURCE_DIR}/src/Bridge.g.cpp"
116+
)
117+
118+
add_custom_command(
119+
DEPENDS
120+
"${PROJECT_SOURCE_DIR}/script/generate-strings.py"
121+
OUTPUT
122+
"${PROJECT_SOURCE_DIR}/src/Strings.g.cpp"
123+
COMMAND cd "${PROJECT_SOURCE_DIR}" &&
124+
"${PROJECT_SOURCE_DIR}/script/generate-strings.py"
125+
-c "${CMAKE_CXX_COMPILER}"
126+
-s "${CMAKE_OSX_SYSROOT}"
127+
-o "src/Strings.g.cpp"
128+
COMMENT
129+
"Generating src/Strings.g.cpp"
130+
)
131+
132+
list(APPEND SOURCE_LIST
133+
"${PROJECT_SOURCE_DIR}/src/Strings.g.cpp"
134+
)
135+
136+
list(APPEND SOURCE_LIST
137+
"src/Client.cpp"
138+
"src/Convert.cpp"
139+
"src/Dispatcher.cpp"
140+
"src/Driver.cpp"
141+
"src/Strings.cpp"
142+
"src/Tracer.cpp"
143+
"src/Uid.cpp"
144+
"src/VolumeCurve.cpp"
145+
)
146+
147+
add_library(${LIB_TARGET} STATIC
148+
${SOURCE_LIST}
149+
)
150+
151+
target_include_directories(${LIB_TARGET}
152+
PUBLIC
153+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
154+
$<INSTALL_INTERFACE:include>
155+
)
156+
157+
find_library(LIB_CoreFoundation CoreFoundation REQUIRED)
158+
target_link_libraries(${LIB_TARGET}
159+
PUBLIC ${LIB_CoreFoundation}
160+
)
161+
162+
set_target_properties(${LIB_TARGET} PROPERTIES
163+
OUTPUT_NAME ${LIB_NAME}
164+
)
165+
166+
set_property(TARGET ${LIB_TARGET}
167+
PROPERTY VERSION ${PACKAGE_VERSION}
168+
)
169+
170+
set_property(TARGET ${LIB_TARGET}
171+
APPEND PROPERTY COMPATIBLE_INTERFACE_STRING ${PACKAGE_VERSION}
172+
)
173+
174+
install(TARGETS ${LIB_TARGET}
175+
EXPORT ${PACKAGE_NAME}Targets
176+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
177+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
178+
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
179+
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
180+
)
181+
182+
install(DIRECTORY include/aspl
183+
DESTINATION ${CMAKE_INSTALL_PREFIX}/include
184+
)
185+
186+
install(EXPORT ${PACKAGE_NAME}Targets
187+
FILE ${PACKAGE_NAME}Targets.cmake
188+
NAMESPACE aspl::
189+
DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/cmake/${PACKAGE_NAME}
190+
)
191+
192+
include(CMakePackageConfigHelpers)
193+
194+
configure_package_config_file(
195+
${CMAKE_CURRENT_SOURCE_DIR}/${PACKAGE_NAME}Config.cmake.in
196+
${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE_NAME}Config.cmake
197+
INSTALL_DESTINATION lib/cmake/${PACKAGE_NAME}
198+
)
199+
200+
write_basic_package_version_file(
201+
${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE_NAME}ConfigVersion.cmake
202+
VERSION ${PACKAGE_VERSION}
203+
COMPATIBILITY ExactVersion
204+
)
205+
206+
install(FILES
207+
${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE_NAME}Config.cmake
208+
${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE_NAME}ConfigVersion.cmake
209+
DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/cmake/${PACKAGE_NAME}
210+
)
211+
212+
if(BUILD_TESTING)
213+
include(ExternalProject)
214+
ExternalProject_Add(googletest
215+
GIT_REPOSITORY https://github.com/google/googletest.git
216+
GIT_TAG release-1.10.0
217+
GIT_SHALLOW ON
218+
SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/googletest-src
219+
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/googletest-build
220+
INSTALL_COMMAND ""
221+
TEST_COMMAND ""
222+
LOG_DOWNLOAD ON
223+
LOG_CONFIGURE ON
224+
LOG_BUILD ON
225+
)
226+
227+
add_dependencies(googletest
228+
${LIB_TARGET}
229+
)
230+
231+
add_executable(${TEST_NAME}
232+
"test/Main.cpp"
233+
"test/TestClients.cpp"
234+
"test/TestConstruction.cpp"
235+
"test/TestProperties.cpp"
236+
"test/TestRegistration.cpp"
237+
)
238+
239+
add_dependencies(${TEST_NAME}
240+
${LIB_TARGET}
241+
googletest
242+
)
243+
244+
target_include_directories(${TEST_NAME} SYSTEM
245+
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include
246+
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src
247+
PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/googletest-src/googletest/include
248+
)
249+
250+
target_link_libraries(${TEST_NAME}
251+
${LIB_TARGET}
252+
${CMAKE_CURRENT_BINARY_DIR}/googletest-build/lib/libgtest.a
253+
)
254+
255+
enable_testing()
256+
add_test(NAME ${TEST_NAME}
257+
COMMAND ${TEST_NAME}
258+
)
259+
endif(BUILD_TESTING)
260+
261+
find_package(Doxygen)
262+
263+
if(DOXYGEN_FOUND STREQUAL YES)
264+
add_custom_target(doxygen ALL
265+
DEPENDS ${LIB_TARGET}
266+
COMMENT "Generating HTML documentation"
267+
COMMAND cd "${PROJECT_SOURCE_DIR}" && doxygen
268+
)
269+
endif()
270+
271+
add_custom_target(compile_commands ALL
272+
DEPENDS ${LIB_TARGET}
273+
COMMENT "Copying compile_commands.json to project root"
274+
COMMAND "${CMAKE_COMMAND}" -E copy
275+
"${CMAKE_CURRENT_BINARY_DIR}/compile_commands.json"
276+
"${PROJECT_SOURCE_DIR}/compile_commands.json"
277+
)

0 commit comments

Comments
 (0)