Skip to content
Merged
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
11 changes: 1 addition & 10 deletions .docker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -47,15 +47,14 @@ RUN vcpkg/vcpkg install
# build and test
FROM vcpkg-installed AS firestarr-build
WORKDIR /appl/firestarr
# vcpkg-installed should update when this file does
# COPY ./vcpkg*.json .
# mount instead of copy to minimize layers
RUN --mount=type=bind,source=./cmake,target=./cmake \
--mount=type=bind,source=./CMakeLists.txt,target=./CMakeLists.txt \
--mount=type=bind,source=./CMakePresets.json,target=./CMakePresets.json \
--mount=type=bind,source=./.clang-format,target=./.clang-format \
--mount=type=bind,source=./.clang-tidy,target=./.clang-tidy \
--mount=type=bind,source=./.env,target=./.env \
--mount=type=bind,source=./.git,target=./.git \
--mount=type=bind,source=./src/cpp,target=./src/cpp \
--mount=type=bind,source=./test/data,target=./test/data \
--mount=type=bind,source=./test/input,target=./test/input \
Expand All @@ -64,14 +63,6 @@ RUN --mount=type=bind,source=./cmake,target=./cmake \
cmake --preset Release \
&& cmake --build --parallel --preset Release \
&& ctest --preset Release
# COPY ./cmake cmake/
# COPY ./.env ./CMake* ./.clang-* .
# COPY ./src/cpp src/cpp/
# RUN cmake --preset Release
# RUN cmake --build --parallel --preset Release
# COPY ./test test/
# COPY ./fuel.lut ./settings.ini .
# RUN ctest --preset Release

FROM --platform=linux/amd64 ${BASE_DISTROLESS} AS distroless-amd64

Expand Down
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ if (WIN32)
add_compile_options(
"$<$<CONFIG:Debug>:/bigobj>")
else()
if(CMAKE_VERBOSE_MAKEFILE)
if(CMAKE_VERBOSE_OPTIMIZATIONS)
add_compile_options(-fopt-info-vec-all)
endif()
add_compile_options(
Expand Down
68 changes: 49 additions & 19 deletions cmake/Version.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -26,29 +26,59 @@ list(APPEND FILES_USED ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt ${CMAKE_CURREN

set(FILE_VERSION_CPP ${CMAKE_BINARY_DIR}/version.cpp)

# calculate hash from files that matter
set(HASHES)
# if modified from committed version then look at file timestamps
foreach(file_path IN LISTS FILES_USED)
file(SHA512 ${file_path} HASH_FILE)
if(NOT CMAKE_QUIET_MAKEFILE)
message("${file_path} ${HASH_FILE}")
set(HASH_PREFIX "")
set(HASH_SUFFIX "")
set(MODIFIED_TIME "")
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git")
if(EXISTS "${FILE_ENV}")
# check when .env last changed - if not this commit then this is version+
execute_process(COMMAND git log -n1 --pretty=%H ${FILE_ENV} OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE VERSION_HASH)
endif()
list(APPEND HASHES ${HASH_FILE})
file(TIMESTAMP "${file_path}" LAST_MOD_TIME "${FMT_TIME}")
if ("${LAST_MOD_TIME}" STRGREATER "${MODIFIED_TIME}")
if(NOT CMAKE_QUIET_MAKEFILE)
message("Change in ${file_path}")
endif()
set(MODIFIED_TIME "${LAST_MOD_TIME}")
execute_process(COMMAND git rev-parse --verify HEAD OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE FULL_HASH)
message("VERSION_HASH = ${VERSION_HASH}")
message("FULL_HASH = ${FULL_HASH}")
if (NOT "${VERSION_HASH}" STREQUAL "${FULL_HASH}")
# add + to version if .env isn't from current commit
set(VERSION "${VERSION}+")
endif()
# is anything in git changed?
list(JOIN FILES_USED " " FILES_USED_STRING)
execute_process(COMMAND git diff-index HEAD -- ${FILES_USED_STRING} RESULT_VARIABLE GIT_CHANGED)
message("GIT_CHANGED = ${GIT_CHANGED}")
if ("${GIT_CHANGED}" STREQUAL "0")
# use time from git commit since nothing is different
execute_process(COMMAND git log -1 --pretty=%ad --date=format:%Y-%m-%dT%H:%M:%SZ OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE MODIFIED_TIME)
else()
set(HASH_SUFFIX "+")
endif()
endforeach()
list(JOIN HASHES "" ALL_HASHES)
string(SHA512 FULL_HASH ${ALL_HASHES})
else()
# will never have a '+' for HASH_SUFFIX because it's based on exact files
set(HASH_PREFIX "file:")
list(JOIN HASHES "" ALL_HASHES)
string(SHA512 FULL_HASH ${ALL_HASHES})
endif()

string(TIMESTAMP COMPILE_TIME "${FMT_TIME}" UTC)
if(NOT MODIFIED_TIME)
# calculate hash from files that matter
set(HASHES)
# if modified from committed version then look at file timestamps
foreach(file_path IN LISTS FILES_USED)
file(SHA512 ${file_path} HASH_FILE)
if(CMAKE_VERBOSE_MAKEFILE)
message("${file_path} ${HASH_FILE}")
endif()
list(APPEND HASHES ${HASH_FILE})
file(TIMESTAMP "${file_path}" LAST_MOD_TIME "${FMT_TIME}")
if ("${LAST_MOD_TIME}" STRGREATER "${MODIFIED_TIME}")
set(MODIFIED_TIME "${LAST_MOD_TIME}")
endif()
endforeach()
endif()

string(SUBSTRING ${FULL_HASH} 0 8 HASH)
string(SUBSTRING ${FULL_HASH} 0 10 HASH)
set(HASH "${HASH_PREFIX}${HASH}${HASH_SUFFIX}")
set(FULL_HASH "${HASH_PREFIX}${FULL_HASH}${HASH_SUFFIX}")
string(TIMESTAMP COMPILE_TIME "${FMT_TIME}" UTC)

set(COMPILED_ON "${CMAKE_SYSTEM_PROCESSOR}-${CMAKE_SYSTEM}-${CMAKE_CXX_COMPILER_ID}")

Expand Down
24 changes: 13 additions & 11 deletions src/cpp/firestarr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,22 +44,24 @@ int main(const int argc, const char* const argv[])
printf("FireSTARR %s\n\n", SPECIFIC_REVISION);
MainArgumentParser parser{argc, argv};
parser.parse_args();
// HACK: check here so verbosity can affect showing compile info
if (parser.help_requested())
{
show_help_and_exit();
}
auto result = -1;
#ifdef NDEBUG
try
{
#endif
fs::logging::check_fatal(
!Log::openLogFile(parser.log_file.c_str()), "Can't open log file %s", parser.log_file.c_str()
);
fs::logging::note("Specific revision is %s", SPECIFIC_REVISION);
fs::logging::debug("Full hash of all sources is: %s", FULL_HASH);
fs::logging::debug("Compiled on: %s", COMPILED_ON);
const auto opened_log = Log::openLogFile(parser.log_file.c_str());
// HACK: check here so verbosity can affect showing compile info
if (parser.help_requested())
{
fs::logging::note("Specific revision is %s", SPECIFIC_REVISION);
fs::logging::debug("Full hash is: %s", FULL_HASH);
fs::logging::debug("Compiled on: %s", COMPILED_ON);
show_help_and_exit();
}
if (!opened_log)
{
logging::fatal("Can't open log file %s", parser.log_file.c_str());
}
fs::logging::note("Output directory is %s", parser.output_directory.c_str());
fs::logging::note("Output log is %s", parser.log_file.c_str());
// at this point we've parsed positional args and know we're not in test mode
Expand Down
Loading