mirror of
https://github.com/ton-blockchain/ton
synced 2025-02-13 03:32:22 +00:00
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.
68 lines
2.4 KiB
CMake
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)
|