aboutsummaryrefslogtreecommitdiff
path: root/libs/libbsarch/CMakeLists.txt
blob: d3e994e30da3be5082ee2e58c5d4f2e79687ae74 (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
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
    target_compile_options(libbsarch PRIVATE -fvisibility=hidden)
endif()
target_include_directories(libbsarch PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include/libbsarch)
set_target_properties(libbsarch PROPERTIES DEBUG_POSTFIX "d" CXX_STANDARD 11)
target_link_libraries(libbsarch PUBLIC mo2::dds-header)
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
)