Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
102 changes: 38 additions & 64 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,14 @@ execute_process(
OUTPUT_STRIP_TRAILING_WHITESPACE
COMMAND sh -c "cd \"${PROJECT_SOURCE_DIR}\" && git describe --tags --abbrev=0"
)
string(REGEX MATCH "v?([0-9.]+)" RESULT ${GIT_TAG})
string(REGEX MATCH "v?([0-9.]+)" RESULT "${GIT_TAG}")
set(GIT_TAG "${CMAKE_MATCH_1}")
if(NOT GIT_TAG STREQUAL "")
message(STATUS "Detected version tag from git: ${GIT_TAG}")
set(PACKAGE_VERSION "${GIT_TAG}")
else()
message(WARNING "Unable to detect version tag from git")
set(PACKAGE_VERSION "0.0.0")
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perhaps it would be better to fix the resource build process for releases? For example, add a version constant during build to this CMake file, or, as was done in one of my projects, generate a version file with a simple string containing the required project version? A zero version isn't the best idea, in my opinion.

endif()

if(CMAKE_OSX_SYSROOT STREQUAL "")
Expand All @@ -32,8 +34,6 @@ else()
endif()

set(PACKAGE_NAME libASPL)
set(PACKAGE_VERSION ${GIT_TAG})

set(LIB_TARGET libASPL)
set(LIB_NAME ASPL)
set(TEST_NAME aspl-test)
Expand Down Expand Up @@ -82,6 +82,26 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COMPILER_FLAGS}")
string(REPLACE ";" " " LINKER_FLAGS "${LINKER_FLAGS}")
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${LINKER_FLAGS}")

function(add_gen_target)
cmake_parse_arguments(PARSE_ARGV 0 arg "" "OUTFILE" "COMMAND")
set(OUTPATH "src/${arg_OUTFILE}")
add_custom_target("${arg_OUTFILE}"
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
COMMAND
if [ ! -f "${OUTPATH}" ]\; then
${arg_COMMAND} \;
else
echo "${OUTPATH} already exists -- skipping" \;
fi
COMMENT
"Generating ${OUTPATH}"
BYPRODUCTS
# Absolute path necessary here since CMake assumes build dir by default:
"${PROJECT_SOURCE_DIR}/${OUTPATH}"
)
set(SOURCE_LIST "${SOURCE_LIST};${OUTPATH}" PARENT_SCOPE)
endfunction()

set(OBJECT_LIST
"Device"
"MuteControl"
Expand All @@ -91,76 +111,30 @@ set(OBJECT_LIST
"VolumeControl"
)

add_custom_target("gen")

foreach(CLASS IN LISTS OBJECT_LIST)
if(NOT EXISTS "${PROJECT_SOURCE_DIR}/src/${CLASS}.g.cpp")
# automatically generate after "make clobber"
set(BYPRODUCTS "${PROJECT_SOURCE_DIR}/src/${CLASS}.g.cpp")
else()
# don't automatically re-generate if already exists
set(BYPRODUCTS "")
endif()
add_custom_command(
TARGET "gen"
COMMAND cd "${PROJECT_SOURCE_DIR}" &&
"${PROJECT_SOURCE_DIR}/scripts/generate-accessors.py"
-i "src/${CLASS}.json"
-o "src/${CLASS}.g.cpp"
COMMENT
"Generating src/${CLASS}.g.cpp"
BYPRODUCTS
"${BYPRODUCTS}"
)

list(APPEND SOURCE_LIST
"${PROJECT_SOURCE_DIR}/src/${CLASS}.cpp"
"${PROJECT_SOURCE_DIR}/src/${CLASS}.g.cpp"
)
add_gen_target(
OUTFILE ${CLASS}.g.cpp
COMMAND ./scripts/generate-accessors.py
-i "src/${CLASS}.json"
-o "src/${CLASS}.g.cpp"
)
list(APPEND SOURCE_LIST "src/${CLASS}.cpp")
endforeach()

if(NOT EXISTS "${PROJECT_SOURCE_DIR}/src/Bridge.g.cpp")
set(BYPRODUCTS "${PROJECT_SOURCE_DIR}/src/Bridge.g.cpp")
else()
set(BYPRODUCTS "")
endif()
add_custom_command(
TARGET "gen"
COMMAND cd "${PROJECT_SOURCE_DIR}" &&
"${PROJECT_SOURCE_DIR}/scripts/generate-bridge.py"
add_gen_target(
OUTFILE "Bridge.g.cpp"
COMMAND ./scripts/generate-bridge.py
-i "src/Bridge.json"
-o "src/Bridge.g.cpp"
COMMENT
"Generating src/Bridge.g.cpp"
BYPRODUCTS
"${BYPRODUCTS}"
)

list(APPEND SOURCE_LIST
"${PROJECT_SOURCE_DIR}/src/Bridge.g.cpp"
)
)

if(NOT EXISTS "${PROJECT_SOURCE_DIR}/src/Strings.g.cpp")
set(BYPRODUCTS "${PROJECT_SOURCE_DIR}/src/Strings.g.cpp")
else()
set(BYPRODUCTS "")
endif()
add_custom_command(
TARGET "gen"
COMMAND cd "${PROJECT_SOURCE_DIR}" &&
"${PROJECT_SOURCE_DIR}/scripts/generate-strings.py"
add_gen_target(
OUTFILE "Strings.g.cpp"
COMMAND ./scripts/generate-strings.py
-c "${CMAKE_CXX_COMPILER}"
-s "${CMAKE_OSX_SYSROOT}"
-o "src/Strings.g.cpp"
COMMENT
"Generating src/Strings.g.cpp"
BYPRODUCTS
"${BYPRODUCTS}"
)

list(APPEND SOURCE_LIST
"${PROJECT_SOURCE_DIR}/src/Strings.g.cpp"
)
)

list(APPEND SOURCE_LIST
"src/Client.cpp"
Expand Down
14 changes: 1 addition & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -606,22 +606,10 @@ Build and run tests:
make test
```

Run code generation:

```
make gen
```

Remove build results:

```
make clean
```

Remove build results and generated files:

```
make clobber
make clean
```

Format code:
Expand Down
1 change: 1 addition & 0 deletions examples/NetcatDevice/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ get_filename_component(LIBASPL_SOURCE_DIR
set(LIBASPL_TARGET NetcatDevice_libASPL)
include(ExternalProject)
ExternalProject_Add(${LIBASPL_TARGET}
BUILD_BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/libASPL-prefix/lib/libASPL.a
SOURCE_DIR ${LIBASPL_SOURCE_DIR}
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/libASPL-build
INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/libASPL-prefix
Expand Down
1 change: 1 addition & 0 deletions examples/SinewaveDevice/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ get_filename_component(LIBASPL_SOURCE_DIR
set(LIBASPL_TARGET SinewaveDevice_libASPL)
include(ExternalProject)
ExternalProject_Add(${LIBASPL_TARGET}
BUILD_BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/libASPL-prefix/lib/libASPL.a
SOURCE_DIR ${LIBASPL_SOURCE_DIR}
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/libASPL-build
INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/libASPL-prefix
Expand Down
1 change: 1 addition & 0 deletions examples/_template/CMakeLists.txt.in
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ get_filename_component(LIBASPL_SOURCE_DIR
set(LIBASPL_TARGET @DRIVER_NAME@_libASPL)
include(ExternalProject)
ExternalProject_Add(${LIBASPL_TARGET}
BUILD_BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/libASPL-prefix/lib/libASPL.a
SOURCE_DIR ${LIBASPL_SOURCE_DIR}
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/libASPL-build
INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/libASPL-prefix
Expand Down
Loading