1include_directories(. ../include)
2
3if(APPLE)
4	set(PERLASM_STYLE macosx)
5	set(ASM_EXT S)
6	enable_language(ASM)
7elseif(UNIX)
8	set(PERLASM_STYLE elf)
9	set(ASM_EXT S)
10	enable_language(ASM)
11else()
12	if (CMAKE_CL_64)
13		message("Using masm")
14		set(PERLASM_STYLE masm)
15	else()
16		message("Using win32n")
17		set(PERLASM_STYLE win32n)
18	endif()
19	set(ASM_EXT asm)
20	enable_language(ASM_MASM)
21endif()
22
23function(perlasm dest src)
24	add_custom_command(
25		OUTPUT ${dest}
26		COMMAND perl ${CMAKE_CURRENT_SOURCE_DIR}/${src} ${PERLASM_STYLE} ${ARGN} > ${dest}
27		DEPENDS
28		${src}
29		${PROJECT_SOURCE_DIR}/crypto/perlasm/x86_64-xlate.pl
30		${PROJECT_SOURCE_DIR}/crypto/perlasm/x86gas.pl
31		${PROJECT_SOURCE_DIR}/crypto/perlasm/x86asm.pl
32		${PROJECT_SOURCE_DIR}/crypto/perlasm/x86asm.pl
33		WORKING_DIRECTORY .
34	)
35endfunction()
36
37if (${ARCH} STREQUAL "x86_64")
38	set(
39		CRYPTO_ARCH_SOURCES
40
41		cpu-x86_64-asm.${ASM_EXT}
42		cpu-intel.c
43	)
44endif()
45
46if (${ARCH} STREQUAL "x86")
47	set(
48		CRYPTO_ARCH_SOURCES
49
50		cpu-x86-asm.${ASM_EXT}
51		cpu-intel.c
52	)
53endif()
54
55if (${ARCH} STREQUAL "arm")
56	set(
57		CRYPTO_ARCH_SOURCES
58
59		cpu-x86-asm.${ASM_EXT}
60		cpu-arm.c
61	)
62endif()
63
64# Level 0.1 - depends on nothing outside this set.
65add_subdirectory(stack)
66add_subdirectory(lhash)
67add_subdirectory(err)
68add_subdirectory(buf)
69add_subdirectory(base64)
70add_subdirectory(bytestring)
71
72# Level 0.2 - depends on nothing but itself
73add_subdirectory(sha)
74add_subdirectory(md4)
75add_subdirectory(md5)
76add_subdirectory(modes)
77add_subdirectory(aes)
78add_subdirectory(des)
79add_subdirectory(rc4)
80add_subdirectory(conf)
81add_subdirectory(chacha)
82add_subdirectory(poly1305)
83
84# Level 1, depends only on 0.*
85add_subdirectory(digest)
86add_subdirectory(cipher)
87add_subdirectory(rand)
88add_subdirectory(bio)
89add_subdirectory(bn)
90add_subdirectory(obj)
91add_subdirectory(asn1)
92
93# Level 2
94add_subdirectory(engine)
95add_subdirectory(dh)
96add_subdirectory(dsa)
97add_subdirectory(rsa)
98add_subdirectory(ec)
99add_subdirectory(ecdh)
100add_subdirectory(ecdsa)
101add_subdirectory(hmac)
102
103# Level 3
104add_subdirectory(evp)
105add_subdirectory(pem)
106add_subdirectory(x509)
107add_subdirectory(x509v3)
108
109# Level 4
110add_subdirectory(pkcs8)
111
112add_library(
113	crypto
114	STATIC
115
116	crypto.c
117	crypto_error.c
118	mem.c
119	thread.c
120	ex_data.c
121	ex_data_impl.c
122	time_support.c
123	directory_posix.c
124	directory_win.c
125
126	${CRYPTO_ARCH_SOURCES}
127
128	$<TARGET_OBJECTS:stack>
129	$<TARGET_OBJECTS:lhash>
130	$<TARGET_OBJECTS:err>
131	$<TARGET_OBJECTS:base64>
132	$<TARGET_OBJECTS:bytestring>
133	$<TARGET_OBJECTS:sha>
134	$<TARGET_OBJECTS:md4>
135	$<TARGET_OBJECTS:md5>
136	$<TARGET_OBJECTS:digest>
137	$<TARGET_OBJECTS:cipher>
138	$<TARGET_OBJECTS:modes>
139	$<TARGET_OBJECTS:aes>
140	$<TARGET_OBJECTS:des>
141	$<TARGET_OBJECTS:rc4>
142	$<TARGET_OBJECTS:conf>
143	$<TARGET_OBJECTS:chacha>
144	$<TARGET_OBJECTS:poly1305>
145	$<TARGET_OBJECTS:buf>
146	$<TARGET_OBJECTS:bn>
147	$<TARGET_OBJECTS:bio>
148	$<TARGET_OBJECTS:rand>
149	$<TARGET_OBJECTS:obj>
150	$<TARGET_OBJECTS:asn1>
151	$<TARGET_OBJECTS:engine>
152	$<TARGET_OBJECTS:dh>
153	$<TARGET_OBJECTS:dsa>
154	$<TARGET_OBJECTS:rsa>
155	$<TARGET_OBJECTS:ec>
156	$<TARGET_OBJECTS:ecdh>
157	$<TARGET_OBJECTS:ecdsa>
158	$<TARGET_OBJECTS:hmac>
159	$<TARGET_OBJECTS:evp>
160	$<TARGET_OBJECTS:pem>
161	$<TARGET_OBJECTS:x509>
162	$<TARGET_OBJECTS:x509v3>
163	$<TARGET_OBJECTS:pkcs8>
164)
165
166perlasm(cpu-x86_64-asm.${ASM_EXT} cpu-x86_64-asm.pl)
167perlasm(cpu-x86-asm.${ASM_EXT} cpu-x86-asm.pl)
168