xref: /aosp_15_r20/external/sandboxed-api/contrib/jsonnet/CMakeLists.txt (revision ec63e07ab9515d95e79c211197c445ef84cefa6a)
1*ec63e07aSXin Li# Copyright 2020 Google LLC
2*ec63e07aSXin Li#
3*ec63e07aSXin Li# Licensed under the Apache License, Version 2.0 (the "License");
4*ec63e07aSXin Li# you may not use this file except in compliance with the License.
5*ec63e07aSXin Li# You may obtain a copy of the License at
6*ec63e07aSXin Li#
7*ec63e07aSXin Li#     https://www.apache.org/licenses/LICENSE-2.0
8*ec63e07aSXin Li#
9*ec63e07aSXin Li# Unless required by applicable law or agreed to in writing, software
10*ec63e07aSXin Li# distributed under the License is distributed on an "AS IS" BASIS,
11*ec63e07aSXin Li# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*ec63e07aSXin Li# See the License for the specific language governing permissions and
13*ec63e07aSXin Li# limitations under the License.
14*ec63e07aSXin Li
15*ec63e07aSXin Licmake_minimum_required(VERSION 3.13..3.26)
16*ec63e07aSXin Li
17*ec63e07aSXin Liproject(jsonnet-sapi C CXX)
18*ec63e07aSXin Liinclude(CTest)
19*ec63e07aSXin Liinclude(GoogleTest)
20*ec63e07aSXin Li
21*ec63e07aSXin Liset(CMAKE_CXX_STANDARD 17)
22*ec63e07aSXin Liset(CMAKE_CXX_STANDARD_REQUIRED True)
23*ec63e07aSXin Li
24*ec63e07aSXin Liif(NOT TARGET sapi::sapi)
25*ec63e07aSXin Li  set(SAPI_ROOT "../.." CACHE PATH "Path to the Sandboxed API source tree")
26*ec63e07aSXin Li  add_subdirectory("${SAPI_ROOT}"
27*ec63e07aSXin Li                   "${CMAKE_BINARY_DIR}/sandboxed-api-build"
28*ec63e07aSXin Li                   EXCLUDE_FROM_ALL)
29*ec63e07aSXin Liendif()
30*ec63e07aSXin Li
31*ec63e07aSXin LiFetchContent_Declare(jsonnet
32*ec63e07aSXin Li  GIT_REPOSITORY https://github.com/google/jsonnet.git
33*ec63e07aSXin Li  GIT_TAG        v0.18.0 # 2021-12-21
34*ec63e07aSXin Li)
35*ec63e07aSXin Liset(BUILD_TESTS OFF CACHE BOOL "" FORCE) # Do not build jsonnet tests
36*ec63e07aSXin LiFetchContent_MakeAvailable(jsonnet)
37*ec63e07aSXin Licreate_directory_symlink("${jsonnet_SOURCE_DIR}"
38*ec63e07aSXin Li                         "${PROJECT_BINARY_DIR}/jsonnet")
39*ec63e07aSXin Li
40*ec63e07aSXin Liconfigure_file("${jsonnet_SOURCE_DIR}/cmd/jsonnet.cpp"
41*ec63e07aSXin Li               "${PROJECT_BINARY_DIR}/gen_files/jsonnet.cpp" COPYONLY)
42*ec63e07aSXin Li
43*ec63e07aSXin Liadd_custom_command(
44*ec63e07aSXin Li  OUTPUT "${PROJECT_BINARY_DIR}/gen_files/write_helper.cc"
45*ec63e07aSXin Li  WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/gen_files"
46*ec63e07aSXin Li  COMMAND patch -o write_helper.cc
47*ec63e07aSXin Li            < "${PROJECT_SOURCE_DIR}/jsonnet.patch" > /dev/null
48*ec63e07aSXin Li)
49*ec63e07aSXin Li
50*ec63e07aSXin Liadd_library(jsonnet_helper STATIC
51*ec63e07aSXin Li  "${PROJECT_BINARY_DIR}/gen_files/write_helper.cc"
52*ec63e07aSXin Li  "${jsonnet_SOURCE_DIR}/cmd/utils.cpp"
53*ec63e07aSXin Li  "${jsonnet_SOURCE_DIR}/cmd/utils.h"
54*ec63e07aSXin Li  jsonnet_helper.cc
55*ec63e07aSXin Li  jsonnet_helper.h
56*ec63e07aSXin Li)
57*ec63e07aSXin Liadd_library(sapi_contrib::jsonnet_helper ALIAS jsonnet_helper)
58*ec63e07aSXin Litarget_include_directories(jsonnet_helper PUBLIC
59*ec63e07aSXin Li  "${PROJECT_BINARY_DIR}"
60*ec63e07aSXin Li  "${PROJECT_BINARY_DIR}/gen_files"
61*ec63e07aSXin Li  "${SAPI_SOURCE_DIR}"
62*ec63e07aSXin Li)
63*ec63e07aSXin Litarget_link_libraries(jsonnet_helper
64*ec63e07aSXin Li  libjsonnet_for_binaries
65*ec63e07aSXin Li)
66*ec63e07aSXin Li
67*ec63e07aSXin Liadd_sapi_library(jsonnet_sapi
68*ec63e07aSXin Li  FUNCTIONS c_free_input
69*ec63e07aSXin Li            c_jsonnet_destroy
70*ec63e07aSXin Li            c_jsonnet_evaluate_snippet
71*ec63e07aSXin Li            c_jsonnet_evaluate_snippet_multi
72*ec63e07aSXin Li            c_jsonnet_evaluate_snippet_stream
73*ec63e07aSXin Li            c_jsonnet_fmt_snippet
74*ec63e07aSXin Li            c_jsonnet_make
75*ec63e07aSXin Li            c_jsonnet_realloc
76*ec63e07aSXin Li            c_read_input
77*ec63e07aSXin Li            c_write_multi_output_files
78*ec63e07aSXin Li            c_write_output_file
79*ec63e07aSXin Li            c_write_output_stream
80*ec63e07aSXin Li  INPUTS jsonnet_helper.h
81*ec63e07aSXin Li  LIBRARY jsonnet_helper
82*ec63e07aSXin Li  LIBRARY_NAME Jsonnet
83*ec63e07aSXin Li  NAMESPACE ""
84*ec63e07aSXin Li)
85*ec63e07aSXin Liadd_library(sapi_contrib::jsonnet ALIAS jsonnet_sapi)
86*ec63e07aSXin Litarget_include_directories(jsonnet_sapi INTERFACE
87*ec63e07aSXin Li  "${PROJECT_BINARY_DIR}"
88*ec63e07aSXin Li)
89*ec63e07aSXin Litarget_link_libraries(jsonnet_sapi PUBLIC
90*ec63e07aSXin Li  sapi_contrib::jsonnet_helper
91*ec63e07aSXin Li)
92*ec63e07aSXin Li
93*ec63e07aSXin Liif(SAPI_BUILD_EXAMPLES)
94*ec63e07aSXin Li  add_subdirectory(examples)
95*ec63e07aSXin Liendif()
96*ec63e07aSXin Li
97*ec63e07aSXin Liif(BUILD_TESTING AND SAPI_BUILD_TESTING)
98*ec63e07aSXin Li  # Create directories so the tests will be able to access them
99*ec63e07aSXin Li  file(MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/tests_input"
100*ec63e07aSXin Li                      "${PROJECT_BINARY_DIR}/tests_output"
101*ec63e07aSXin Li                      "${PROJECT_BINARY_DIR}/tests_expected_output")
102*ec63e07aSXin Li
103*ec63e07aSXin Li  add_custom_target(test_preparation ALL
104*ec63e07aSXin Li    COMMAND cp ${PROJECT_SOURCE_DIR}/examples/jsonnet_codes/*
105*ec63e07aSXin Li              ${PROJECT_BINARY_DIR}/tests_input
106*ec63e07aSXin Li    COMMAND cp ${PROJECT_SOURCE_DIR}/examples/jsonnet_codes_expected_output/*
107*ec63e07aSXin Li              ${PROJECT_BINARY_DIR}/tests_expected_output
108*ec63e07aSXin Li  )
109*ec63e07aSXin Li
110*ec63e07aSXin Li  add_executable(jsonnet_tests
111*ec63e07aSXin Li    jsonnet_tests.cc
112*ec63e07aSXin Li  )
113*ec63e07aSXin Li  target_include_directories(jsonnet_tests PUBLIC
114*ec63e07aSXin Li    "${PROJECT_SOURCE_DIR}"
115*ec63e07aSXin Li  )
116*ec63e07aSXin Li  target_link_libraries(jsonnet_tests
117*ec63e07aSXin Li    sapi_contrib::jsonnet
118*ec63e07aSXin Li    sapi::test_main
119*ec63e07aSXin Li  )
120*ec63e07aSXin Li  gtest_discover_tests(jsonnet_tests)
121*ec63e07aSXin Liendif()
122