1
0
Fork 0
mirror of https://github.com/ton-blockchain/ton synced 2025-02-13 03:32:22 +00:00
ton/tolk/CMakeLists.txt
tolk-vm 5a3e3595d6
[Tolk] Compilation pipeline, register global symbols in advance
Since I've implemented AST, now I can drop forward declarations.
Instead, I traverse AST of all files and register global symbols
(functions, constants, global vars) as a separate step, in advance.

That's why, while converting AST to Expr/Op, all available symbols are
already registered.
This greatly simplifies "intermediate state" of yet unknown functions
and checking them afterward.

Redeclaration of local variables (inside the same scope)
is now also prohibited.
2024-11-02 01:33:09 +04:00

68 lines
2.4 KiB
CMake

cmake_minimum_required(VERSION 3.5 FATAL_ERROR)
set(TOLK_SOURCE
src-file.cpp
lexer.cpp
symtable.cpp
compiler-state.cpp
ast.cpp
ast-from-tokens.cpp
pipe-discover-parse-sources.cpp
pipe-handle-pragmas.cpp
pipe-register-symbols.cpp
pipe-ast-to-legacy.cpp
pipe-find-unused-symbols.cpp
pipe-generate-fif-output.cpp
unify-types.cpp
abscode.cpp
gen-abscode.cpp
analyzer.cpp
asmops.cpp
builtins.cpp
stack-transform.cpp
optimize.cpp
codegen.cpp
tolk.cpp
)
add_executable(tolk tolk-main.cpp ${TOLK_SOURCE})
target_include_directories(tolk PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
target_link_libraries(tolk PUBLIC git ton_crypto) # todo replace with ton_crypto_core in the future
if (WINGETOPT_FOUND)
target_link_libraries_system(tolk wingetopt)
endif ()
if (${TOLK_DEBUG}) # -DTOLK_DEBUG=1 in CMake options => #define TOLK_DEBUG (for development purposes)
message(STATUS "TOLK_DEBUG is ON")
target_compile_definitions(tolk PRIVATE TOLK_DEBUG=1)
endif()
if (NOT USE_EMSCRIPTEN)
get_filename_component(STDLIB_TOLK_IF_BUILD_FROM_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/../crypto/smartcont/stdlib.tolk" REALPATH)
target_compile_definitions(tolk PRIVATE STDLIB_TOLK_IF_BUILD_FROM_SOURCES="${STDLIB_TOLK_IF_BUILD_FROM_SOURCES}")
endif()
if (USE_EMSCRIPTEN)
add_executable(tolkfiftlib tolk-wasm.cpp ${TOLK_SOURCE})
target_include_directories(tolkfiftlib PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
target_link_libraries(tolkfiftlib PUBLIC fift-lib git)
target_link_options(tolkfiftlib PRIVATE
-sEXPORTED_RUNTIME_METHODS=FS,ccall,cwrap,UTF8ToString,stringToUTF8,lengthBytesUTF8,addFunction,removeFunction,setValue
-sEXPORTED_FUNCTIONS=_tolk_compile,_version,_malloc,_free,_setThrew
-sEXPORT_NAME=CompilerModule
-sERROR_ON_UNDEFINED_SYMBOLS=0
-sFILESYSTEM=1 -lnodefs.js
-Oz
-sIGNORE_MISSING_MAIN=1
-sAUTO_NATIVE_LIBRARIES=0
-sMODULARIZE=1
-sTOTAL_MEMORY=33554432
-sALLOW_MEMORY_GROWTH=1
-sALLOW_TABLE_GROWTH=1
--embed-file ${CMAKE_CURRENT_SOURCE_DIR}/../crypto/fift/lib@/fiftlib
-fexceptions
)
target_compile_options(tolkfiftlib PRIVATE -fexceptions -fno-stack-protector)
endif ()
install(TARGETS tolk RUNTIME DESTINATION bin)