summaryrefslogtreecommitdiff
path: root/monero_libwallet2_api_c/CMakeLists.txt
blob: ab6a3b4a6e8face9d3336ae793d6d0ad1683a9e4 (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
cmake_minimum_required(VERSION 3.5)
project(${MONERO_FLAVOR}_wallet2_api_c)
message(STATUS HOST_ABI = ${HOST_ABI})

set(MD_LIBRARY "")

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)

if(${HOST_ABI} STREQUAL "x86_64-w64-mingw32")
    set(CMAKE_SYSTEM_NAME Windows)
    set(CMAKE_LINKER "x86_64-w64-mingw32-ld")
    set(TARGET "x86_64-w64-mingw32")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -lssp")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -lssp")
elseif(${HOST_ABI} STREQUAL "i686-w64-mingw32")
    set(CMAKE_SYSTEM_NAME Windows)
    set(CMAKE_LINKER "i686-w64-mingw32-ld")
    set(TARGET "i686-w64-mingw32")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -lssp")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -lssp")
elseif(${HOST_ABI} MATCHES "-apple-ios")
    set(CMAKE_SYSTEM_NAME iOS)
elseif(${HOST_ABI} MATCHES "-apple-darwin")
    set(CMAKE_SYSTEM_NAME Darwin)
endif()

if(${HOST_ABI} MATCHES "-linux-android")
    add_link_options(-stdlib=libc++ -static-libstdc++)
    set(EXTRA_LIBS_ANDROID log)
endif()


add_library( ${MONERO_FLAVOR}_wallet2_api_c
             ${OUTPUT_MODE}
             src/main/cpp/helpers.cpp
             src/main/cpp/${MONERO_FLAVOR}_wallet2_api_c.cpp
             src/main/cpp/${MONERO_FLAVOR}_checksum.c)

if(${HOST_ABI} MATCHES "-linux-android")
    set_target_properties(${MONERO_FLAVOR}_wallet2_api_c PROPERTIES LINK_FLAGS "-Wl,-z,noexecstack")
endif()

if(${HOST_ABI} MATCHES "-linux-gnu")
    set_target_properties(${MONERO_FLAVOR}_wallet2_api_c PROPERTIES LINK_FLAGS "-Wl,-z,noexecstack")
endif()

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden")

set(MONERO_DIR ${CMAKE_SOURCE_DIR}/../${MONERO_FLAVOR})
set(EXTERNAL_LIBS_DIR ${CMAKE_SOURCE_DIR}/../contrib/depends/${HOST_ABI})

if(${HOST_ABI} STREQUAL "x86_64-w64-mingw32" OR ${HOST_ABI} STREQUAL "i686-w64-mingw32")
    target_link_options(${MONERO_FLAVOR}_wallet2_api_c PRIVATE -static-libgcc -static-libstdc++)
endif()

if (${MONERO_FLAVOR} STREQUAL "monero")
    target_compile_definitions(${MONERO_FLAVOR}_wallet2_api_c PRIVATE FLAVOR_MONERO)
    set(BCUR_ENABLED bc-ur)
elseif(${MONERO_FLAVOR} STREQUAL "wownero")
    target_compile_definitions(${MONERO_FLAVOR}_wallet2_api_c PRIVATE FLAVOR_WOWNERO)
elseif(${MONERO_FLAVOR} STREQUAL "zano")
    target_compile_definitions(${MONERO_FLAVOR}_wallet2_api_c PRIVATE FLAVOR_ZANO)
endif()

if(NOT HOST_ABI MATCHES "-apple-")
    set_target_properties(${MONERO_FLAVOR}_wallet2_api_c PROPERTIES LINK_FLAGS "-Wl,--exclude-libs,ALL")
endif()

if (${MONERO_FLAVOR} STREQUAL "zano")
    include_directories(
        ${CMAKE_SOURCE_DIR}/build/${HOST_ABI}/zano_build/contrib/zlib
    )
endif()

add_subdirectory("${CMAKE_SOURCE_DIR}/../${MONERO_FLAVOR}" ${CMAKE_BINARY_DIR}/${MONERO_FLAVOR}_build EXCLUDE_FROM_ALL)

if(HOST_ABI MATCHES "-apple-")
    set(EXPORTED_SYMBOLS_FILE ${CMAKE_CURRENT_SOURCE_DIR}/${MONERO_FLAVOR}_libwallet2_api_c.exp)

    set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -exported_symbols_list ${EXPORTED_SYMBOLS_FILE}")
    set_target_properties(${TARGET} PROPERTIES LINK_DEPENDS ${EXPORTED_SYMBOLS_FILE})
endif()

if (${MONERO_FLAVOR} STREQUAL "monero" OR ${MONERO_FLAVOR} STREQUAL "wownero")
    set(WALLET_TARGETS wallet_api ${wallet_api_LIB_DEPENDS})
elseif(${MONERO_FLAVOR} STREQUAL "zano")
    set(THREADS_PREFER_PTHREAD_FLAG ON)

    set(CMAKE_THREAD_LIBS_INIT "-lpthread")
    set(CMAKE_HAVE_THREADS_LIBRARY 1)
    set(CMAKE_USE_PTHREADS_INIT 1)
    set(Threads_FOUND TRUE)
    find_package(Boost 1.71 REQUIRED COMPONENTS filesystem thread timer date_time chrono regex serialization atomic program_options)
    find_package(OpenSSL REQUIRED)
    set(WALLET_TARGETS
        wallet
        general
        tor-connect
        crypto
        currency_core
        common
        zlibstatic

        ${Boost_LIBRARIES}
        ${OpenSSL_LIBRARIES})
endif()

if(${MONERO_FLAVOR} STREQUAL "wownero")
    add_subdirectory(wownero-seed EXCLUDE_FROM_ALL)
    set(EXTRA_LIBS_WOWNEROSEED wownero-seed)
endif()

if (${HOST_ABI} MATCHES "-w64-mingw32")
    target_link_options(${MONERO_FLAVOR}_wallet2_api_c PRIVATE "-Wl,--section-alignment,16384")
elseif(${HOST_ABI} MATCHES "-linux-")
    target_link_options(${MONERO_FLAVOR}_wallet2_api_c PRIVATE "-Wl,-z,max-page-size=16384")
endif()

if(${HOST_ABI} MATCHES "-apple-")
    set(DUMMY_RT_SRC "${CMAKE_CURRENT_BINARY_DIR}/dummy_rt.c")
    file(WRITE "${DUMMY_RT_SRC}" "/* I have no idea what is adding -lrt in the middle of nowhere. And frankly I don't care at this point */\n")

    add_library(dummy_rt STATIC "${DUMMY_RT_SRC}")

    target_sources(dummy_rt PRIVATE "${DUMMY_RT_SRC}")
    target_compile_definitions(dummy_rt PRIVATE DUMMY_RT_SYMBOL)

    set_target_properties(dummy_rt PROPERTIES
        OUTPUT_NAME "rt"
        ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
    )
endif()

target_link_libraries(  ${MONERO_FLAVOR}_wallet2_api_c

                        ${WALLET_TARGETS}
                        ${EXTRA_LIBS_WOWNEROSEED}
                        ${EXTRA_LIBS_ANDROID}
                        ${EXTRA_LIBS_LINUX}
                       )