blob: db92b91e6a3d4ef0b60714a3d2b29a60497eadec (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
cmake_minimum_required(VERSION 3.16)
include(CMakePackageConfigHelpers)
project(libbsarch CXX)
find_package(mo2-dds-header CONFIG REQUIRED)
get_target_property(SRCS mo2::dds-header SOURCES)
# libbsarch
add_library(libbsarch SHARED)
if(WIN32)
target_sources(libbsarch
PRIVATE
src/libbsarch.cpp
src/libbsarch.def
PUBLIC
FILE_SET HEADERS
BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include
FILES ${CMAKE_CURRENT_SOURCE_DIR}/include/libbsarch/libbsarch.h
)
else()
target_sources(libbsarch
PRIVATE
src/libbsarch.cpp
PUBLIC
FILE_SET HEADERS
BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include
FILES ${CMAKE_CURRENT_SOURCE_DIR}/include/libbsarch/libbsarch.h
)
# Set default symbol visibility to hidden, export only marked symbols.
# libbsarch.cpp uses BSARCH_DLL_API which maps to
# __attribute__((visibility("default"))) when BSARCH_DLL_EXPORT is set,
# so the C API stays exported while the bsatk bridge stays internal.
target_compile_options(libbsarch PRIVATE -fvisibility=hidden)
endif()
target_include_directories(libbsarch PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include/libbsarch)
if(WIN32)
set_target_properties(libbsarch PROPERTIES DEBUG_POSTFIX "d" CXX_STANDARD 11)
else()
# Linux impl is backed by bsatk and needs C++17 for std::string::data()
# non-const and the rest of the bsatk API.
set_target_properties(libbsarch PROPERTIES DEBUG_POSTFIX "d" CXX_STANDARD 17)
endif()
target_link_libraries(libbsarch PUBLIC mo2::dds-header)
if(NOT WIN32)
target_link_libraries(libbsarch PRIVATE mo2::bsatk)
endif()
target_compile_definitions(libbsarch PRIVATE BSARCH_DLL_EXPORT)
# preprocessor definitions
if(MSVC)
target_compile_options(libbsarch PRIVATE
/W3 /EHsc /MP
$<$<CONFIG:DEBUG>:/MDd /Od>
$<$<CONFIG:RELEASE>:/Zi>
)
endif()
# libbsarch_OOP
add_library(libbsarch_OOP STATIC)
target_sources(libbsarch_OOP
PRIVATE
src/bs_archive_entries.cpp
src/utils/string_convert.cpp
src/utils/convertible_ostream.cpp
src/utils/convertible_string.cpp
src/bs_archive_auto.cpp
src/bs_archive.cpp
PUBLIC
FILE_SET HEADERS
BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include
FILES
${CMAKE_CURRENT_SOURCE_DIR}/include/libbsarch/base_types.hpp
${CMAKE_CURRENT_SOURCE_DIR}/include/libbsarch/bs_archive_auto.hpp
${CMAKE_CURRENT_SOURCE_DIR}/include/libbsarch/bs_archive.h
${CMAKE_CURRENT_SOURCE_DIR}/include/libbsarch/bs_archive_entries.h
${CMAKE_CURRENT_SOURCE_DIR}/include/libbsarch/libbsarch.hpp
${CMAKE_CURRENT_SOURCE_DIR}/include/libbsarch/libbsarch.h
${CMAKE_CURRENT_SOURCE_DIR}/include/libbsarch/utils/convertible_string.hpp
${CMAKE_CURRENT_SOURCE_DIR}/include/libbsarch/utils/convertible_ostream.hpp
${CMAKE_CURRENT_SOURCE_DIR}/include/libbsarch/utils/string_convert.hpp
)
target_include_directories(libbsarch_OOP PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/include/libbsarch
${CMAKE_CURRENT_SOURCE_DIR}/include/libbsarch/utils)
target_link_libraries(libbsarch_OOP PUBLIC mo2::dds-header)
set_target_properties(libbsarch_OOP PROPERTIES
DEBUG_POSTFIX "d"
CXX_STANDARD 17
)
if (MSVC)
target_compile_options(libbsarch_OOP PRIVATE /MP)
endif()
# target_link_libraries(libbsarch_OOP PUBLIC libbsarch)
# install
# finding 32 or 64bits
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
# 64 bits
set(lib_delphi "${CMAKE_CURRENT_SOURCE_DIR}/delphi/lib64")
message("libbsarch: using 64bits DLL")
elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
# 32 bits
set(lib_delphi "${CMAKE_CURRENT_SOURCE_DIR}/delphi/lib")
message("libbsarch: using 32bits DLL")
endif()
install(TARGETS libbsarch libbsarch_OOP EXPORT libbsarchTargets FILE_SET HEADERS)
if(WIN32)
install(FILES $<TARGET_PDB_FILE:libbsarch> DESTINATION pdb OPTIONAL)
endif()
install(EXPORT libbsarchTargets
FILE mo2-libbsarch-targets.cmake
NAMESPACE mo2::
DESTINATION lib/cmake/mo2-libbsarch
)
if(WIN32)
# install the true DLLs (Windows only - Delphi-built BSArch)
install(FILES ${lib_delphi}/libbsarch.dll DESTINATION bin CONFIGURATIONS Release RelWithDebInfo MinSizeRel)
install(FILES ${lib_delphi}/libbsarchd.dll DESTINATION bin CONFIGURATIONS Debug)
endif()
configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/config.cmake.in
"${CMAKE_CURRENT_BINARY_DIR}/mo2-libbsarch-config.cmake"
INSTALL_DESTINATION "lib/cmake/mo2-libbsarch"
NO_SET_AND_CHECK_MACRO
NO_CHECK_REQUIRED_COMPONENTS_MACRO
)
include(${CMAKE_CURRENT_SOURCE_DIR}/Version.cmake)
set(LIBBSARCH_VERSION
${LIBBSARCH_MAJOR_VERSION}.${LIBBSARCH_MINOR_VERSION}.${LIBBSARCH_PATCH_VERSION})
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/mo2-libbsarch-config-version.cmake"
VERSION "${LIBBSARCH_VERSION}"
COMPATIBILITY AnyNewerVersion
ARCH_INDEPENDENT
)
install(FILES
${CMAKE_CURRENT_BINARY_DIR}/mo2-libbsarch-config.cmake
${CMAKE_CURRENT_BINARY_DIR}/mo2-libbsarch-config-version.cmake
DESTINATION lib/cmake/mo2-libbsarch
)
|