-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
104 lines (82 loc) · 4.39 KB
/
CMakeLists.txt
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
cmake_minimum_required (VERSION 3.10)
project ("cc_x509")
option (CC_X509_WARN_AS_ERR "Treat warning as error" ON)
option (CC_X509_USE_CCACHE "Use ccache" OFF)
option (CC_X509_BUILD_APPS "Build applications." OFF)
option (CC_X509_USE_SANITIZERS "Build apps with sanitizers" OFF)
option (CC_X509_BUILD_DOC "Build documentation target in generated X.509 definition project" OFF)
option (CC_X509_GEN_SWIG "Use commsdsl2swig to generate swig bindings project." OFF)
option (CC_X509_BUILD_SWIG "Build and install project generated by the commsdsl2swig." ${CC_X509_GEN_SWIG})
option (CC_X509_GEN_EMSCRIPTEN "Use commsdsl2emscripten to generate emscripten bindings project." OFF)
option (CC_X509_BUILD_EMSCRIPTEN "Build and install project generated by the commsdsl2emscripten." ${CC_X509_GEN_EMSCRIPTEN})
# Additional variables to be used if needed
# ---------------------------
# CC_X509_DEF_OUTPUT_DIR - Output directory for X.509 definition project. Defaults to implementation defined path inside ${PROJECT_BINARY_DIR}
# CC_X509_SWIG_OUTPUT_DIR - Path to swig output directory. If not provided <build_dir>/output_swig one is used.
# CC_X509_SWIG_SRC_DIR - Path to the commsdsl2swig sources. If not provided local "swig/src" dir is used.
# CC_X509_SWIG_LANGUAGES - Languages list to support by swig. If not provided "python java csharp" are chosen
# CC_X509_EMSCRIPTEN_OUTPUT_DIR - Path to emscripten output directory. If not provided <build_dir>/output_emscripten one is used.
# CC_X509_CCACHE_EXECUTABLE - Custom ccache executable
# CC_X509_COMMSDSL2COMMS_EXTRA_ARGS - Extra command line parameters to be passed to commsdsl2comms
# CC_X509_COMMSDSL2TEST_EXTRA_ARGS - Extra command line parameters to be passed to commsdsl2test
# CC_X509_COMMSDSL2SWIG_EXTRA_ARGS - Extra arguments to pass to "commsdsl2swig"
# CC_X509_COMMSDSL2EMSCRIPTEN_EXTRA_ARGS - Extra arguments to pass to "commsdsl2emscripten"
# Other built-in CMake variables that can be used
# ---------------------------
# CMAKE_CXX_STANDARD - C++ standard to be used for built applications
# CMAKE_PREFIX_PATH - Path(s) to find externals like COMMS library
# CMAKE_PROGRAM_PATH - Path(s) to find programs like commsdsl2comms to parse the schema files(s)
################################################
set (CC_X509_VERSION "1.1.1")
set (CC_X509_MIN_COMMSDSL_VERSION "7.0.2")
if ("${CMAKE_CXX_STANDARD}" STREQUAL "")
set(CMAKE_CXX_STANDARD 17)
endif ()
if ("${CMAKE_BUILD_TYPE}" STREQUAL "")
set(CMAKE_BUILD_TYPE None)
endif ()
set(CC_X509_DEF_OUTPUT_DIR "${PROJECT_BINARY_DIR}/output" CACHE STRING "Protocol definition output directory")
################################################
set (CMAKE_SCIPTS_DIR "${PROJECT_SOURCE_DIR}/cmake")
include (${CMAKE_SCIPTS_DIR}/X509Compile.cmake)
# Compiler options
set (extra_opts)
if (CC_X509_WARN_AS_ERR)
list (APPEND extra_opts WARN_AS_ERR)
endif ()
if (CC_X509_USE_CCACHE)
list (APPEND extra_opts USE_CCACHE)
if (NOT "${CC_X509_CCACHE_EXECUTABLE}" STREQUAL "")
list (APPEND extra_opts CCACHE_EXECUTABLE "${CC_X509_CCACHE_EXECUTABLE}" )
endif ()
endif ()
if (CC_X509_USE_SANITIZERS)
list (APPEND extra_opts DEFAULT_SANITIZERS)
endif ()
CC_X509_compile(${extra_opts})
CC_X509_msvc_force_warn_opt("/W4")
set (X509_BUILD_TGT "${PROJECT_NAME}_build_tgt")
find_file(
CC_X509_ASN1_SCHEMA "schema.xml"
PATH_SUFFIXES cc_asn1/dsl share/cc_asn1/dsl usr/share/cc_asn1/dsl src/cc_asn1/dsl usr/src/cc_asn1/dsl)
find_file(
CC_X509_ASN1_EMB_SCHEMA "emb_schema.xml"
PATH_SUFFIXES cc_asn1/dsl share/cc_asn1/dsl usr/share/cc_asn1/dsl src/cc_asn1/dsl usr/src/cc_asn1/dsl)
if ((NOT CC_X509_ASN1_SCHEMA) OR (NOT CC_X509_ASN1_EMB_SCHEMA))
message (FATAL_ERROR "The required ASN.1 definition schema is not found.")
endif ()
message (STATUS "Found ASN.1 schema files: ${CC_X509_ASN1_SCHEMA};${CC_X509_ASN1_EMB_SCHEMA}")
get_filename_component(asn1_dir ${CC_X509_ASN1_SCHEMA} DIRECTORY)
set (CC_X509_ASN1_DSL_SRC ${asn1_dir}/../dsl_src)
if (NOT EXISTS ${CC_X509_ASN1_DSL_SRC})
message (FATAL_ERROR "The extra source files of the ASN.1 definition schema haven't been found in expected location \"${CC_X509_ASN1_DSL_SRC}\".")
endif ()
set (CC_X509_SCHEMA_FILES
${CC_X509_ASN1_SCHEMA}
${PROJECT_SOURCE_DIR}/cc_x509/dsl/main_schema.xml
${CC_X509_ASN1_EMB_SCHEMA}
${PROJECT_SOURCE_DIR}/cc_x509/dsl/fields_schema.xml)
add_subdirectory (cc_x509)
add_subdirectory (app)
add_subdirectory (swig)
add_subdirectory (emscripten)