aboutsummaryrefslogtreecommitdiff
path: root/sdk/compiler/cmake/modules/FindCapnProtoSDK.cmake
blob: 19b9f9cb25b907c805a6cdd26177056ed829e518 (plain) (blame)
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
# - Try to find CapnProto SDK
# - Sets CAPNPROTOSDK_LIBRARIES - list of the libraries found
# - Sets CAPNPROTOSDK_SOURCE_FILES 
# - Sets CAPNPROTOSDK_INCLUDE_DIRS 

include(FindPackageHandleStandardArgs)

# Find the includes

# TODO: Do the version stuff properly!
find_path(CAPNPROTOSDK_PATH src/capnp/message.h
	PATHS 
	$ENV{PM_CapnProto_PATH}
	${GW_DEPS_ROOT}/$ENV{PM_CapnProto_NAME}/${CapnProtoSDK_FIND_VERSION}
)

if (TARGET_BUILD_PLATFORM STREQUAL "Windows")

	if (STATIC_WINCRT)
		SET(CAPNPROTOSDK_CRT_SUFFIX "-mt")
	else()
		SET(CAPNPROTOSDK_CRT_SUFFIX "-md")
	endif()


	# If the project pulling in this dependency needs the static crt, then append that to the path.
	if (CMAKE_CL_64)
		SET(CAPNPROTOSDK_ARCH_FOLDER "win64")
	else()
		SET(CAPNPROTOSDK_ARCH_FOLDER "win32")
	endif()

	SET(LIB_PATH ${CAPNPROTOSDK_PATH}/bin/${CAPNPROTOSDK_ARCH_FOLDER})
    SET(EXE_PATH ${CAPNPROTOSDK_PATH}/tools/win32)


elseif(TARGET_BUILD_PLATFORM STREQUAL "PS4")
	SET(LIB_PATH ${CAPNPROTOSDK_PATH}/bin/ps4)
    SET(EXE_PATH ${CAPNPROTOSDK_PATH}/tools/win32)
	SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
	SET(CMAKE_FIND_LIBRARY_PREFIXES "lib")
elseif(TARGET_BUILD_PLATFORM STREQUAL "XboxOne")
	SET(LIB_PATH ${CAPNPROTOSDK_PATH}/bin/xboxone)
    SET(EXE_PATH ${CAPNPROTOSDK_PATH}/tools/win32)
	SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
	SET(CMAKE_FIND_LIBRARY_PREFIXES "lib")
elseif(TARGET_BUILD_PLATFORM STREQUAL "linux")
	SET(LIB_PATH ${CAPNPROTOSDK_PATH}/bin/ubuntu64)
	if (UE4_LINUX_CROSSCOMPILE)
		SET(EXE_PATH ${CAPNPROTOSDK_PATH}/tools/win32)
	else()
    	SET(EXE_PATH ${CAPNPROTOSDK_PATH}/tools/ubuntu64)
    endif()
	SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
	SET(CMAKE_FIND_LIBRARY_PREFIXES "lib")
endif()

find_library(CAPNPROTO_LIB
	NAMES capnp${CAPNPROTOSDK_CRT_SUFFIX}
	PATHS ${LIB_PATH}/Release
)
find_library(CAPNPROTO_LIB_DEBUG
	NAMES capnp${CAPNPROTOSDK_CRT_SUFFIX}
	PATHS ${LIB_PATH}/Debug
)

find_library(KJ_LIB
	NAMES kj${CAPNPROTOSDK_CRT_SUFFIX}
	PATHS ${LIB_PATH}/Release
)
find_library(KJ_LIB_DEBUG
	NAMES kj${CAPNPROTOSDK_CRT_SUFFIX}
	PATHS ${LIB_PATH}/Debug
)

find_program(CAPNP_EXECUTABLE
  NAMES capnp
  DOC "Cap'n Proto Command-line Tool"
  PATHS ${EXE_PATH}
)

find_program(CAPNPC_CXX_EXECUTABLE
  NAMES capnpc-c++
  DOC "Capn'n Proto C++ Compiler"
  PATHS ${EXE_PATH}
)

FIND_PACKAGE_HANDLE_STANDARD_ARGS(CAPNPROTOSDK
	DEFAULT_MSG
	CAPNPROTOSDK_PATH

	CAPNP_EXECUTABLE
	CAPNPC_CXX_EXECUTABLE
	
	#CAPNPROTO_LIB
	#KJ_LIB
	
	#CAPNPROTO_LIB_DEBUG
	#KJ_LIB_DEBUG
)

if (CAPNPROTOSDK_FOUND)
	
	SET(CAPNPROTOSDK_INCLUDE_DIRS 
		${CAPNPROTOSDK_PATH}/src/
	)

	SET(CAPNP_INCLUDE_DIRS
		${CAPNPROTOSDK_INCLUDE_DIRS}
	)
	
	SET(CAPNPROTOSDK_LIBRARIES "" CACHE STRING "")
	SET(CAPNPROTOSDK_SOURCE_FILES "")
	
	IF ((TARGET_BUILD_PLATFORM STREQUAL "PLATFROM_USING_PREBUILT_LIBS"))
		LIST(APPEND CAPNPROTOSDK_LIBRARIES 
			optimized ${CAPNPROTO_LIB} debug ${CAPNPROTO_LIB_DEBUG}
			optimized ${KJ_LIB} debug ${KJ_LIB_DEBUG}
			)
	ELSE()
		#Include source files for the "lite" version only, there aren't too many it avoids needing many permutations of static libs
		LIST(APPEND CAPNPROTOSDK_SOURCE_FILES
			${CAPNPROTOSDK_PATH}/src/capnp/arena.c++
			${CAPNPROTOSDK_PATH}/src/capnp/blob.c++
			${CAPNPROTOSDK_PATH}/src/capnp/layout.c++
			${CAPNPROTOSDK_PATH}/src/capnp/message.c++
			${CAPNPROTOSDK_PATH}/src/capnp/serialize.c++

			${CAPNPROTOSDK_PATH}/src/kj/array.c++
			${CAPNPROTOSDK_PATH}/src/kj/common.c++
			${CAPNPROTOSDK_PATH}/src/kj/debug.c++
			${CAPNPROTOSDK_PATH}/src/kj/exception.c++
			${CAPNPROTOSDK_PATH}/src/kj/io.c++
			${CAPNPROTOSDK_PATH}/src/kj/mutex.c++
			${CAPNPROTOSDK_PATH}/src/kj/string.c++
			${CAPNPROTOSDK_PATH}/src/kj/units.c++
			)
	ENDIF()
endif()