|
| 1 | +cmake_minimum_required(VERSION 3.6.0) |
| 2 | + |
| 3 | +set(CMAKE_CXX_STANDARD 17) |
| 4 | + |
| 5 | +if(APPLE) |
| 6 | + set(MACOSX_RPATH TRUE) |
| 7 | + set(CMAKE_MACOSX_RPATH ${CMAKE_CURRENT_BINARY_DIR}) |
| 8 | +endif() |
| 9 | + |
| 10 | +enable_testing() |
| 11 | + |
| 12 | +add_djinni_target(DjinniTextSort |
| 13 | + IDL "example.djinni" |
| 14 | +# IDL_INCLUDE_PATH "djinni/vendor" |
| 15 | + CPP_OUT "${CMAKE_CURRENT_BINARY_DIR}/generated-src/cpp" |
| 16 | + CPP_NAMESPACE "textsort" |
| 17 | + IDENT_CPP_ENUM_TYPE "foo_bar" |
| 18 | + CPP_EXTENDED_RECORD_INCLUDE_PREFIX "handwritten-src/cpp/" |
| 19 | + CPP_ENUM_HASH_WORKAROUND |
| 20 | + JAVA_OUT "${CMAKE_CURRENT_BINARY_DIR}/generated-src/java" |
| 21 | + JAVA_PACKAGE "com.dropbox.textsort" |
| 22 | + JAVA_GENERATE_INTERFACES |
| 23 | + JAVA_IMPLEMENT_ANDROID_OS_PARCELABLE |
| 24 | + JAVA_NULLABLE_ANNOTATION "javax.annotation.CheckForNull" |
| 25 | + JAVA_NONNULL_ANNOTATION "javax.annotation.Nonnull" |
| 26 | + IDENT_JAVA_FIELD "mFooBar" |
| 27 | + JNI_OUT "${CMAKE_CURRENT_BINARY_DIR}/generated-src/jni" |
| 28 | + IDENT_JNI_CLASS "NativeFooBar" |
| 29 | + IDENT_JNI_FILE "NativeFooBar" |
| 30 | + OBJC_OUT "${CMAKE_CURRENT_BINARY_DIR}/generated-src/objc" |
| 31 | + OBJC_TYPE_PREFIX "DB" |
| 32 | + OBJCPP_OUT "${CMAKE_CURRENT_BINARY_DIR}/generated-src/objc" |
| 33 | + CPPCLI_OUT "${CMAKE_CURRENT_BINARY_DIR}/generated-src/cppcli" |
| 34 | + CPPCLI_NAMESPACE "Djinni::TestSuite" |
| 35 | + CPPCLI_INCLUDE_CPP_PREFIX "cpp/" |
| 36 | + WASM_OUT "${CMAKE_CURRENT_BINARY_DIR}/generated-src/wasm" |
| 37 | + TS_OUT "${CMAKE_CURRENT_BINARY_DIR}/generated-src/ts" |
| 38 | + TS_MODULE "example" |
| 39 | + YAML_OUT "${CMAKE_CURRENT_BINARY_DIR}/generated-src/yaml" |
| 40 | + YAML_PREFIX "test_" |
| 41 | + |
| 42 | + CPP_OUT_FILES CPP_GENERATED_SRCS |
| 43 | + JAVA_OUT_FILES JAVA_GENERATED_SRCS |
| 44 | + JNI_OUT_FILES JNI_GENERATED_SRCS |
| 45 | + OBJC_OUT_FILES OBJC_GENERATED_SRCS |
| 46 | + OBJCPP_OUT_FILES OBJCPP_GENERATED_SRCS |
| 47 | + CPPCLI_OUT_FILES CPPCLI_GENERATED_SRCS |
| 48 | + WASM_OUT_FILES WASM_GENERATED_SRCS |
| 49 | + TS_OUT_FILES TS_GENERATED_SRCS |
| 50 | + YAML_OUT_FILE YAML_GENERATED_SRCS |
| 51 | +) |
| 52 | + |
| 53 | +if(DJINNI_WITH_WASM) |
| 54 | + set(DjinniTextsortWasm "textsort-wasm") |
| 55 | + |
| 56 | + set(CPP_HANDWRITTEN_SRCS |
| 57 | + ${CMAKE_CURRENT_SOURCE_DIR}/handwritten-src/cpp/sort_items_impl.cpp |
| 58 | + ) |
| 59 | + |
| 60 | + add_executable(${DjinniTextsortWasm} |
| 61 | + ${CPP_HANDWRITTEN_SRCS} |
| 62 | + ${CPP_GENERATED_SRCS} |
| 63 | + ${WASM_GENERATED_SRCS} |
| 64 | + ${TS_GENERATED_SRCS} |
| 65 | + ) |
| 66 | + target_include_directories(${DjinniTextsortWasm} PUBLIC |
| 67 | + ${CMAKE_SOURCE_DIR} |
| 68 | + ${CMAKE_CURRENT_SOURCE_DIR}/handwritten-src/cpp |
| 69 | + ${CMAKE_CURRENT_BINARY_DIR}/generated-src/cpp |
| 70 | + ${CMAKE_CURRENT_BINARY_DIR}/generated-src/wasm |
| 71 | + ) |
| 72 | + |
| 73 | + set(WASM_CC_FLAGS "-s MAIN_MODULE=1 -fexceptions") |
| 74 | + message(WARNING ${WASM_CC_FLAGS}) |
| 75 | + set_target_properties(${DjinniTextsortWasm} PROPERTIES COMPILE_FLAGS ${WASM_CC_FLAGS}) |
| 76 | + |
| 77 | + string(JOIN " " EMSCRIPTEN_LINK_OPTIONS |
| 78 | + "-s WASM=1" |
| 79 | + "--bind" # Compiles the source code using the Embind bindings to connect C/C++ and JavaScript |
| 80 | + "-s MALLOC=emmalloc" # Switch to using the much smaller implementation |
| 81 | + "-s MODULARIZE=1" # Allows us to manually invoke the initialization of wasm |
| 82 | + "-s WASM_BIGINT=1" # We need to pass int64_t |
| 83 | + ) |
| 84 | + |
| 85 | + set(WASM_LINK_FLAGS "${EMSCRIPTEN_LINK_OPTIONS} -fexceptions") |
| 86 | + message(WARNING ${WASM_LINK_FLAGS}) |
| 87 | + set_target_properties(${DjinniTextsortWasm} PROPERTIES LINK_FLAGS ${WASM_LINK_FLAGS}) |
| 88 | + set(CMAKE_EXECUTABLE_SUFFIX ".js") |
| 89 | + |
| 90 | + target_link_libraries(${DjinniTextsortWasm} PUBLIC djinni-support-lib::djinni-support-lib embind) |
| 91 | + |
| 92 | + add_custom_target(DjinniTextsortWasmCopy) |
| 93 | + file(GLOB DjinniTextsortWasmResources ${CMAKE_CURRENT_SOURCE_DIR}/ts/*) |
| 94 | + foreach(ResourceFile ${DjinniTextsortWasmResources}) |
| 95 | + add_custom_command(TARGET ${DjinniTextsortWasm} PRE_BUILD |
| 96 | + COMMAND ${CMAKE_COMMAND} -E |
| 97 | + copy ${ResourceFile} $<TARGET_FILE_DIR:${DjinniTextsortWasm}>) |
| 98 | + endforeach() |
| 99 | + add_dependencies(${DjinniTextsortWasm} DjinniTextsortWasmCopy) |
| 100 | + |
| 101 | + # add_test(NAME DjinniWasmTestTests COMMAND bash -c "${CMAKE_CURRENT_BINARY_DIR}/run.sh") |
| 102 | + |
| 103 | +endif() |
0 commit comments