Skip to content

Commit c85949e

Browse files
committed
C++ port
Signed-off-by: Juan Cruz Viotti <jv@jviotti.com>
1 parent 3b0ca77 commit c85949e

File tree

6 files changed

+1695
-3
lines changed

6 files changed

+1695
-3
lines changed

cmake/Findmpdecimal.cmake

Lines changed: 72 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,7 @@ if(NOT mpdecimal_FOUND)
8383
if(BUILD_SHARED_LIBS)
8484
target_compile_definitions(mpdecimal PRIVATE BUILD_LIBMPDEC)
8585
else()
86-
set_target_properties(mpdecimal PROPERTIES
87-
MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
86+
target_compile_options(mpdecimal PRIVATE /U_DLL)
8887
endif()
8988
endif()
9089

@@ -98,6 +97,48 @@ if(NOT mpdecimal_FOUND)
9897
C_VISIBILITY_INLINES_HIDDEN FALSE
9998
EXPORT_NAME mpdecimal)
10099

100+
set(MPDECIMALXX_DIR "${MPDECIMAL_DIR}/libmpdec++")
101+
set(MPDECIMALXX_PUBLIC_HEADER "${MPDECIMALXX_DIR}/decimal.hh")
102+
set(MPDECIMALXX_SOURCES "${MPDECIMALXX_DIR}/decimal.cc")
103+
104+
add_library(mpdecimalxx ${MPDECIMALXX_SOURCES})
105+
106+
target_include_directories(mpdecimalxx PRIVATE
107+
"${MPDECIMALXX_DIR}"
108+
"${MPDECIMAL_SOURCE_DIR}")
109+
110+
target_include_directories(mpdecimalxx PUBLIC
111+
"$<BUILD_INTERFACE:${MPDECIMALXX_DIR}>"
112+
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>")
113+
114+
target_link_libraries(mpdecimalxx PUBLIC mpdecimal)
115+
116+
if(UNIX)
117+
find_package(Threads REQUIRED)
118+
target_link_libraries(mpdecimalxx PRIVATE Threads::Threads)
119+
if(NOT APPLE)
120+
target_link_libraries(mpdecimalxx PRIVATE m)
121+
endif()
122+
endif()
123+
124+
if(MSVC)
125+
if(BUILD_SHARED_LIBS)
126+
target_compile_definitions(mpdecimalxx PRIVATE BUILD_LIBMPDECXX)
127+
else()
128+
target_compile_options(mpdecimalxx PRIVATE /U_DLL)
129+
endif()
130+
endif()
131+
132+
add_library(mpdecimal::mpdecimalxx ALIAS mpdecimalxx)
133+
134+
set_target_properties(mpdecimalxx
135+
PROPERTIES
136+
OUTPUT_NAME mpdecimalxx
137+
PUBLIC_HEADER "${MPDECIMALXX_PUBLIC_HEADER}"
138+
CXX_VISIBILITY_PRESET "default"
139+
VISIBILITY_INLINES_HIDDEN FALSE
140+
EXPORT_NAME mpdecimalxx)
141+
101142
if(SOURCEMETA_CORE_INSTALL)
102143
include(GNUInstallDirs)
103144
install(TARGETS mpdecimal
@@ -123,6 +164,35 @@ if(NOT mpdecimal_FOUND)
123164
"${CMAKE_CURRENT_BINARY_DIR}/mpdecimal-config.cmake"
124165
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/mpdecimal"
125166
COMPONENT sourcemeta_core_dev)
167+
168+
install(TARGETS mpdecimalxx
169+
EXPORT mpdecimalxx
170+
PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
171+
COMPONENT sourcemeta_core_dev
172+
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
173+
COMPONENT sourcemeta_core
174+
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
175+
COMPONENT sourcemeta_core
176+
NAMELINK_COMPONENT sourcemeta_core_dev
177+
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
178+
COMPONENT sourcemeta_core_dev)
179+
install(EXPORT mpdecimalxx
180+
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/mpdecimalxx"
181+
NAMESPACE mpdecimal::
182+
COMPONENT sourcemeta_core_dev)
183+
184+
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/mpdecimalxx-config.cmake
185+
"include(CMakeFindDependencyMacro)\n"
186+
"find_dependency(mpdecimal CONFIG)\n"
187+
"if(UNIX)\n"
188+
" find_dependency(Threads)\n"
189+
"endif()\n"
190+
"include(\"\${CMAKE_CURRENT_LIST_DIR}/mpdecimalxx.cmake\")\n"
191+
"check_required_components(\"mpdecimalxx\")\n")
192+
install(FILES
193+
"${CMAKE_CURRENT_BINARY_DIR}/mpdecimalxx-config.cmake"
194+
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/mpdecimalxx"
195+
COMPONENT sourcemeta_core_dev)
126196
endif()
127197

128198
set(mpdecimal_FOUND ON)

config.cmake.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ foreach(component ${SOURCEMETA_CORE_COMPONENTS})
4848
elseif(component STREQUAL "json")
4949
include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_io.cmake")
5050
find_dependency(mpdecimal CONFIG)
51+
find_dependency(mpdecimalxx CONFIG)
5152
include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_json.cmake")
5253
elseif(component STREQUAL "jsonl")
5354
include("${CMAKE_CURRENT_LIST_DIR}/sourcemeta_core_json.cmake")

src/core/json/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ endif()
88

99
target_link_libraries(sourcemeta_core_json PRIVATE sourcemeta::core::io)
1010
target_link_libraries(sourcemeta_core_json PRIVATE mpdecimal)
11+
target_link_libraries(sourcemeta_core_json PRIVATE mpdecimalxx)

vendor-mpdecimal.sh

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,14 @@ rm -rf "$DIRECTORY/libmpdec/literature"
2525
rm -rf "$DIRECTORY/libmpdec/Makefile.in"
2626
rm -rf "$DIRECTORY/libmpdec/Makefile.vc"
2727
rm -rf "$DIRECTORY/libmpdec/README.txt"
28-
rm -rf "$DIRECTORY/libmpdec++"
28+
rm -rf "$DIRECTORY/libmpdec++/.objs"
29+
rm -rf "$DIRECTORY/libmpdec++/.pc"
30+
rm -rf "$DIRECTORY/libmpdec++/.profile"
31+
rm -rf "$DIRECTORY/libmpdec++/examples"
32+
rm -rf "$DIRECTORY/libmpdec++/bench.cc"
33+
rm -rf "$DIRECTORY/libmpdec++/bench_full.cc"
34+
rm -rf "$DIRECTORY/libmpdec++/Makefile.in"
35+
rm -rf "$DIRECTORY/libmpdec++/Makefile.vc"
2936
rm -rf "$DIRECTORY/tests"
3037
rm -rf "$DIRECTORY/tests++"
3138
rm -rf "$DIRECTORY/vcbuild"

0 commit comments

Comments
 (0)