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
44 changes: 43 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.11)
cmake_minimum_required(VERSION 3.21)

project(ArgumentManagerProject VERSION 1.0 LANGUAGES CXX)

Expand Down Expand Up @@ -108,6 +108,48 @@ add_custom_target(format-check
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
COMMENT "Verify clang-format compliance")

# ============
# INSTALL
# ============
include(GNUInstallDirs)

if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
set_target_properties(ctrace PROPERTIES
INSTALL_RPATH "$ORIGIN/../lib"
)

install(TARGETS ctrace
RUNTIME_DEPENDENCY_SET ctrace_deps
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

install(RUNTIME_DEPENDENCY_SET ctrace_deps
PRE_EXCLUDE_REGEXES
"^libc\\.so"
"^libm\\.so"
"^libdl\\.so"
"^librt\\.so"
"^libpthread\\.so"
"^ld-linux"
"^libstdc\\+\\+"
"^libgcc_s"
DIRECTORIES
"/usr/lib/llvm-20/lib"
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
else()
install(TARGETS ctrace
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
endif()

install(DIRECTORY ${CMAKE_SOURCE_DIR}/config/
DESTINATION config
FILES_MATCHING
PATTERN "*.json"
PATTERN "*.txt"
)

# ============
# TESTS
# ============
Expand Down
29 changes: 23 additions & 6 deletions Dockerfile.release-binaries
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
python3 \
git \
tar \
patchelf \
&& rm -rf /var/lib/apt/lists/*

RUN curl -fsSL https://apt.llvm.org/llvm.sh -o /tmp/llvm.sh \
Expand Down Expand Up @@ -44,6 +45,7 @@ RUN cmake -S . -B build -G Ninja \
-DPARSER_TYPE=CLI11 \
-DUSE_THREAD_SANITIZER=OFF \
-DUSE_ADDRESS_SANITIZER=OFF \
-DCLANG_LINK_CLANG_DYLIB=ON \
-DLLVM_DIR=/usr/lib/llvm-${LLVM_VERSION}/lib/cmake/llvm \
-DClang_DIR=/usr/lib/llvm-${LLVM_VERSION}/lib/cmake/clang \
&& cmake --build build -j"$(nproc)" \
Expand All @@ -56,20 +58,35 @@ ARG TARGETARCH
ARG PROJECT_NAME=coretrace
ARG BINARY_NAME=ctrace

SHELL ["/bin/bash", "-o", "pipefail", "-c"]
RUN set -eux; \
case "${TARGETARCH}" in \
amd64) arch_label="amd64" ;; \
arm64) arch_label="arm64" ;; \
*) echo "unsupported TARGETARCH: ${TARGETARCH}" >&2; exit 1 ;; \
esac; \
package_name="${PROJECT_NAME}-${VERSION}-linux-${arch_label}"; \
mkdir -p "/out/${package_name}"; \
install -m 0755 "/repo/build/${BINARY_NAME}" "/out/${package_name}/${BINARY_NAME}"; \
install -m 0644 /repo/README.md "/out/${package_name}/README.md"; \
install -m 0644 /repo/LICENSE "/out/${package_name}/LICENSE"; \
tar -C /out -czf "/out/${package_name}.tar.gz" "${package_name}"; \
staging="/staging/${package_name}"; \
\
# Install via CMake (binary in bin/, shared libs in lib/, config in share/) \
cmake --install build --prefix "${staging}" --strip; \
\
# Patch RPATH on bundled shared libs so they resolve each other \
find "${staging}/lib" -name '*.so*' -type f -exec \
patchelf --set-rpath '$ORIGIN' {} \; ; \
\
# Verify all shared libraries resolve via RPATH alone (no LD_LIBRARY_PATH) \
ldd "${staging}/bin/${BINARY_NAME}" | { ! grep 'not found'; }; \
\
# Add metadata files \
install -m 0644 /repo/README.md "${staging}/README.md"; \
install -m 0644 /repo/LICENSE "${staging}/LICENSE"; \
\
# Create archive and checksum \
mkdir -p /out; \
tar -C /staging -czf "/out/${package_name}.tar.gz" "${package_name}"; \
(cd /out && sha256sum "${package_name}.tar.gz" > "${package_name}.tar.gz.sha256"); \
rm -rf "/out/${package_name}"
rm -rf /staging

FROM scratch AS artifacts

Expand Down
6 changes: 5 additions & 1 deletion cmake/FetchNlohmannJson.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,8 @@ FetchContent_Declare(
DOWNLOAD_EXTRACT_TIMESTAMP FALSE
)

FetchContent_MakeAvailable(json)
FetchContent_GetProperties(json)
if(NOT json_POPULATED)
FetchContent_Populate(json)
add_subdirectory(${json_SOURCE_DIR} ${json_BINARY_DIR} EXCLUDE_FROM_ALL)
endif()
6 changes: 5 additions & 1 deletion cmake/httpLib.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,8 @@ FetchContent_Declare(
GIT_TAG v0.14.3
)

FetchContent_MakeAvailable(cpp_httplib)
FetchContent_GetProperties(cpp_httplib)
if(NOT cpp_httplib_POPULATED)
FetchContent_Populate(cpp_httplib)
add_subdirectory(${cpp_httplib_SOURCE_DIR} ${cpp_httplib_BINARY_DIR} EXCLUDE_FROM_ALL)
endif()
6 changes: 5 additions & 1 deletion cmake/logger/coretraceLog.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,8 @@ FetchContent_Declare(coretrace-logger
GIT_REPOSITORY https://github.com/CoreTrace/coretrace-log.git
GIT_TAG main
)
FetchContent_MakeAvailable(coretrace-logger)
FetchContent_GetProperties(coretrace-logger)
if(NOT coretrace-logger_POPULATED)
FetchContent_Populate(coretrace-logger)
add_subdirectory(${coretrace-logger_SOURCE_DIR} ${coretrace-logger_BINARY_DIR} EXCLUDE_FROM_ALL)
endif()
6 changes: 5 additions & 1 deletion cmake/stackUsageAnalyzer.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,11 @@ FetchContent_Declare(
GIT_TAG v0.17.0
)

FetchContent_MakeAvailable(stack_analyzer)
FetchContent_GetProperties(stack_analyzer)
if(NOT stack_analyzer_POPULATED)
FetchContent_Populate(stack_analyzer)
add_subdirectory(${stack_analyzer_SOURCE_DIR} ${stack_analyzer_BINARY_DIR} EXCLUDE_FROM_ALL)
endif()

# Copy upstream default models into config/models/ so that tool-config.json
# can reference them with paths relative to the config directory, without
Expand Down
Loading