Skip to content

Commit f36bc04

Browse files
committed
[#2]:svarga:build, adding initial build configuration
1 parent 218bf6f commit f36bc04

5 files changed

Lines changed: 142 additions & 8 deletions

File tree

.gitignore

Lines changed: 34 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,6 @@
1111
*.gch
1212
*.pch
1313

14-
# Linker files
15-
*.ilk
16-
17-
# Debugger Files
18-
*.pdb
19-
2014
# Compiled Dynamic libraries
2115
*.so
2216
*.dylib
@@ -37,5 +31,37 @@
3731
*.out
3832
*.app
3933

40-
# debug information files
41-
*.dwo
34+
# data
35+
*.h5
36+
*.gz
37+
*.csv
38+
39+
# Other
40+
*.prof
41+
*.aux
42+
*.json
43+
docs/html/
44+
data
45+
.vscode/
46+
.cache/
47+
compile_commands.json
48+
49+
src/iex2h5
50+
51+
build/
52+
.venv
53+
site/
54+
55+
/overrides/
56+
/badges/
57+
/assets/
58+
/download-demo/
59+
/search/
60+
/spec/
61+
/.nojekyll
62+
/*.html
63+
/*.xml
64+
65+
include/licenses.hpp
66+
67+
examples/python/__pycache__/

CMakeLists.txt

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
# This file is part of the libdecimal project and is licensed under the MIT License.
2+
#
3+
# Copyright © 2025–2026 Varga Labs, Toronto, ON, Canada 🇨🇦
4+
# Contact: info@vargalabs.com
5+
6+
cmake_minimum_required(VERSION 3.22)
7+
project(libdecimal VERSION 0.1.0 DESCRIPTION "Deterministic Decimal Arithmetic Built on Intel LIBBID" LANGUAGES CXX)
8+
9+
include(GNUInstallDirs)
10+
include(CMakePackageConfigHelpers)
11+
include(CTest)
12+
13+
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
14+
15+
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR)
16+
message(WARNING "In-source builds are discouraged. Skipping compile_commands.json symlink.")
17+
else()
18+
execute_process(
19+
COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_BINARY_DIR}/compile_commands.json ${CMAKE_SOURCE_DIR}/compile_commands.json
20+
RESULT_VARIABLE symlink_result OUTPUT_QUIET ERROR_QUIET)
21+
endif()
22+
23+
set(CMAKE_CXX_STANDARD 23)
24+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
25+
set(CMAKE_CXX_EXTENSIONS OFF)
26+
27+
option(libdecimal_BUILD_TESTS "Build tests" ${BUILD_TESTING})
28+
option(libdecimal_BUILD_DOCS "Enable MkDocs documentation targets" ON)
29+
30+
set(git_commit_hash "unknown")
31+
set(git_tag "")
32+
33+
find_package(Git QUIET)
34+
if(GIT_FOUND AND EXISTS "${CMAKE_SOURCE_DIR}/.git")
35+
execute_process( COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE git_commit_hash OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET)
36+
execute_process( COMMAND ${GIT_EXECUTABLE} describe --tags --abbrev=0 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE git_tag OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET )
37+
endif()
38+
39+
if(git_tag)
40+
set(libdecimal_version_string "${git_tag}")
41+
else()
42+
set(libdecimal_version_string "${PROJECT_VERSION}")
43+
endif()
44+
45+
# Third-party dependencies
46+
add_subdirectory(thirdparty EXCLUDE_FROM_ALL)
47+
# Public library target
48+
49+
add_library(libdecimal INTERFACE)
50+
add_library(libdecimal::libdecimal ALIAS libdecimal)
51+
target_compile_features(libdecimal INTERFACE cxx_std_23)
52+
target_include_directories(libdecimal INTERFACE $<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/include> $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
53+
target_compile_definitions(libdecimal INTERFACE libdecimal_SOFTWARE_VERSION="${libdecimal_version_string}" libdecimal_SOFTWARE_COMMIT_HASH="${git_commit_hash}" )
54+
target_link_libraries(libdecimal INTERFACE libdecimal::libbid_static )
55+
# ------------------------------------------------------------------------------
56+
# Installation
57+
# ------------------------------------------------------------------------------
58+
install( FILES ${CMAKE_SOURCE_DIR}/include/libdecimal.hpp DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
59+
install( TARGETS libdecimal libbid_static EXPORT libdecimal_targets)
60+
install( FILES ${libbid_static_archive} DESTINATION ${CMAKE_INSTALL_LIBDIR} )
61+
install( DIRECTORY ${libbid_static_include_dir}/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libbid FILES_MATCHING PATTERN "*.h")
62+
install( EXPORT libdecimal_targets FILE libdecimal_targets.cmake NAMESPACE libdecimal:: DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/libdecimal)
63+
64+
configure_package_config_file( ${CMAKE_SOURCE_DIR}/cmake/libdecimal_config.cmake.in ${CMAKE_BINARY_DIR}/libdecimal_config.cmake INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/libdecimal )
65+
write_basic_package_version_file( ${CMAKE_BINARY_DIR}/libdecimal_config_version.cmake VERSION ${PROJECT_VERSION} COMPATIBILITY SameMajorVersion )
66+
install( FILES ${CMAKE_BINARY_DIR}/libdecimal_config.cmake ${CMAKE_BINARY_DIR}/libdecimal_config_version.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/libdecimal )
67+
# ------------------------------------------------------------------------------
68+
# Tests
69+
# ------------------------------------------------------------------------------
70+
if(libdecimal_BUILD_TESTS)
71+
enable_testing()
72+
function(add_test_case file_name)
73+
add_executable(test-${file_name} test/${file_name}.cpp)
74+
set_target_properties(test-${file_name} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} )
75+
target_link_libraries(test-${file_name} PRIVATE libdecimal::libdecimal libdoctest)
76+
if(CMAKE_BUILD_TYPE MATCHES "Debug")
77+
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
78+
target_compile_options(test-${file_name} PRIVATE -fsanitize=address,undefined -fno-omit-frame-pointer )
79+
target_link_options(test-${file_name} PRIVATE -fsanitize=address,undefined )
80+
target_compile_definitions(test-${file_name} PRIVATE DEBUG)
81+
endif()
82+
endif()
83+
add_test(NAME test-${file_name} COMMAND test-${file_name})
84+
endfunction()
85+
86+
add_test_case(example)
87+
endif()

cmake/libdecimal_config.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}/libdecimal_targets.cmake")
4+
5+
check_required_components(libdecimal)

test/example.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
/* This file is part of the LIBDECIMAL project and is licensed under the MIT License.
2+
* Copyright © 2025–2026 Varga Labs, Toronto, ON, Canada 🇨🇦 Contact: info@vargalabs.com */
3+
4+
#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
5+
#include <doctest/all>
6+
7+
TEST_CASE("example") {
8+
std::cerr << "example test case" << std::endl;
9+
}

thirdparty/CMakeLists.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# This file is part of the RLP project and is licensed under the MIT License.
2+
#
3+
# Copyright © 2025–2026 Varga Labs, Toronto, ON, Canada 🇨🇦
4+
# Contact: info@vargalabs.com
5+
6+
add_subdirectory(doctest)
7+
add_subdirectory(intel-decimal-float)

0 commit comments

Comments
 (0)