Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
174 changes: 103 additions & 71 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -53,75 +53,107 @@ endif()
#)

# Add the executable
add_executable(main
src/parser.cpp
src/tokens.cpp
src/main.cpp
src/traverse.cpp
src/generate.cpp
src/interpret.cpp
src/asm.cpp
src/callGraph.cpp
src/test.cpp
src/supress.cpp
src/orchestrator.cpp
src/utils.cpp
src/shared.cpp
src/externs.cpp
)
target_include_directories(main PRIVATE ${CMAKE_SOURCE_DIR}/include)

# Add the compiler executable
add_executable(compiler
res/appicon.rc
src/compiler.cpp
src/asm.cpp
src/callGraph.cpp
src/utils.cpp
src/shared.cpp
src/externs.cpp
src/parser.cpp
src/tokens.cpp
src/traverse.cpp
src/generate.cpp
)
target_include_directories(compiler PRIVATE ${CMAKE_SOURCE_DIR}/include)

# Add the interpreter library
# add_library(${EXE_NAME} SHARED ${EXE_SOURCES})
add_library(cuza SHARED
src/interpret.cpp
src/asm.cpp
src/generate.cpp
src/orchestrator.cpp
src/interface.cpp
src/utils.cpp
src/shared.cpp
src/externs.cpp
)
target_include_directories(cuza PRIVATE ${CMAKE_SOURCE_DIR}/include)
target_compile_definitions(cuza PRIVATE -DCUZALIB_EXPORTS)
#target_link_libraries(cuza PRIVATE "-Wl,--allow-shlib-undefined")
#add_definitions(-DCUZALIB_EXPORTS) # this adds the definitions to ALL targets

option(CUZA_ENABLE_JAVA "Enable Java/JNI support" OFF)

if (CUZA_ENABLE_JAVA)
set(JAVA_AWT_LIBRARY "NotNeeded")
set(JAVA_AWT_INCLUDE_PATH "NotNeeded")

# For this to work, %JAVA_HOME% needs to be set to the jdk's location
find_package(JNI REQUIRED)

target_sources(cuza PRIVATE src/java.cpp)

#target_include_directories(cuza PRIVATE JNI::JNI)
target_include_directories(cuza PRIVATE ${JNI_INCLUDE_DIRS})

#target_link_libraries(cuza PRIVATE JNI::JNI)
target_compile_definitions(cuza PRIVATE CUZA_ENABLE_JAVA)
if (EMSCRIPTEN)
add_executable(cuza_playground
src/parser.cpp
src/tokens.cpp
src/playground.cpp
src/traverse.cpp
src/generate.cpp
src/interpret.cpp
src/asm.cpp
src/callGraph.cpp
src/orchestrator.cpp
src/utils.cpp
src/shared.cpp
src/externs.cpp
)
target_include_directories(cuza_playground PRIVATE ${CMAKE_SOURCE_DIR}/include)
target_compile_options(cuza_playground PRIVATE -Wno-pointer-arith)
target_link_options(cuza_playground PRIVATE
"SHELL:--bind"
"SHELL:-s MODULARIZE=1"
"SHELL:-s EXPORT_NAME=createCuzaRuntime"
"SHELL:-s ENVIRONMENT=web"
"SHELL:-s ALLOW_MEMORY_GROWTH=1"
"SHELL:-s WASM=1"
)
set_target_properties(cuza_playground PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/playground/public
OUTPUT_NAME "cuza-runtime"
SUFFIX ".js"
)
else()
add_executable(main
src/parser.cpp
src/tokens.cpp
src/main.cpp
src/traverse.cpp
src/generate.cpp
src/interpret.cpp
src/asm.cpp
src/callGraph.cpp
src/test.cpp
src/supress.cpp
src/orchestrator.cpp
src/utils.cpp
src/shared.cpp
src/externs.cpp
)
target_include_directories(main PRIVATE ${CMAKE_SOURCE_DIR}/include)

# Add the compiler executable
add_executable(compiler
res/appicon.rc
src/compiler.cpp
src/asm.cpp
src/callGraph.cpp
src/utils.cpp
src/shared.cpp
src/externs.cpp
src/parser.cpp
src/tokens.cpp
src/traverse.cpp
src/generate.cpp
)
target_include_directories(compiler PRIVATE ${CMAKE_SOURCE_DIR}/include)

# Add the interpreter library
# add_library(${EXE_NAME} SHARED ${EXE_SOURCES})
add_library(cuza SHARED
src/interpret.cpp
src/asm.cpp
src/generate.cpp
src/orchestrator.cpp
src/interface.cpp
src/utils.cpp
src/shared.cpp
src/externs.cpp
)
target_include_directories(cuza PRIVATE ${CMAKE_SOURCE_DIR}/include)
target_compile_definitions(cuza PRIVATE -DCUZALIB_EXPORTS)
#target_link_libraries(cuza PRIVATE "-Wl,--allow-shlib-undefined")
#add_definitions(-DCUZALIB_EXPORTS) # this adds the definitions to ALL targets

option(CUZA_ENABLE_JAVA "Enable Java/JNI support" OFF)

if (CUZA_ENABLE_JAVA)
set(JAVA_AWT_LIBRARY "NotNeeded")
set(JAVA_AWT_INCLUDE_PATH "NotNeeded")

# For this to work, %JAVA_HOME% needs to be set to the jdk's location
find_package(JNI REQUIRED)

target_sources(cuza PRIVATE src/java.cpp)

#target_include_directories(cuza PRIVATE JNI::JNI)
target_include_directories(cuza PRIVATE ${JNI_INCLUDE_DIRS})

#target_link_libraries(cuza PRIVATE JNI::JNI)
target_compile_definitions(cuza PRIVATE CUZA_ENABLE_JAVA)
endif()

add_executable(testdll src/test-dll.cpp)
target_include_directories(testdll PRIVATE ${CMAKE_SOURCE_DIR}/include)
target_link_libraries(testdll PRIVATE cuza)
endif()

add_executable(testdll src/test-dll.cpp)
target_include_directories(testdll PRIVATE ${CMAKE_SOURCE_DIR}/include)
target_link_libraries(testdll PRIVATE cuza)
11 changes: 11 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,3 +59,14 @@ It should be as easy as possible to embed into any game.
+ Division-by-zero returns zero
+ Out-of-bounds array reads return zero
+ Out-of-bounds array writes do nothing

## Web playground

The repo includes a browser playground in `playground/`. It compiles the C++ Cuza compiler and VM to WebAssembly with Emscripten, then runs sample programs through a web code editor.

```sh
./web/build-playground.sh
python3 -m http.server 8080 --directory playground/public
```

Open `http://localhost:8080` after the runtime build finishes. A recent Bison is required; macOS `/usr/bin/bison` 2.3 is not new enough for the current grammar.
92 changes: 92 additions & 0 deletions build-web/CMakeFiles/3.29.5/CMakeCXXCompiler.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
set(CMAKE_CXX_COMPILER "/opt/homebrew/Cellar/emscripten/5.0.7/libexec/em++")
set(CMAKE_CXX_COMPILER_ARG1 "")
set(CMAKE_CXX_COMPILER_ID "Clang")
set(CMAKE_CXX_COMPILER_VERSION "23.0.0")
set(CMAKE_CXX_COMPILER_VERSION_INTERNAL "")
set(CMAKE_CXX_COMPILER_WRAPPER "")
set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT "98")
set(CMAKE_CXX_EXTENSIONS_COMPUTED_DEFAULT "")
set(CMAKE_CXX_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters;cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates;cxx_std_17;cxx_std_20;cxx_std_23;cxx_std_26")
set(CMAKE_CXX98_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters")
set(CMAKE_CXX11_COMPILE_FEATURES "cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates")
set(CMAKE_CXX14_COMPILE_FEATURES "cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates")
set(CMAKE_CXX17_COMPILE_FEATURES "cxx_std_17")
set(CMAKE_CXX20_COMPILE_FEATURES "cxx_std_20")
set(CMAKE_CXX23_COMPILE_FEATURES "cxx_std_23")

set(CMAKE_CXX_PLATFORM_ID "emscripten")
set(CMAKE_CXX_SIMULATE_ID "")
set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "GNU")
set(CMAKE_CXX_SIMULATE_VERSION "")




set(CMAKE_AR "/opt/homebrew/Cellar/emscripten/5.0.7/libexec/emar")
set(CMAKE_CXX_COMPILER_AR "/opt/homebrew/Cellar/emscripten/5.0.7/libexec/emar")
set(CMAKE_RANLIB "/opt/homebrew/Cellar/emscripten/5.0.7/libexec/emranlib")
set(CMAKE_CXX_COMPILER_RANLIB "/opt/homebrew/Cellar/emscripten/5.0.7/libexec/emranlib")
set(CMAKE_LINKER "/usr/bin/ld")
set(CMAKE_LINKER_LINK "")
set(CMAKE_LINKER_LLD "")
set(CMAKE_CXX_COMPILER_LINKER "")
set(CMAKE_CXX_COMPILER_LINKER_ID "")
set(CMAKE_CXX_COMPILER_LINKER_VERSION )
set(CMAKE_CXX_COMPILER_LINKER_FRONTEND_VARIANT )
set(CMAKE_MT "")
set(CMAKE_TAPI "CMAKE_TAPI-NOTFOUND")
set(CMAKE_COMPILER_IS_GNUCXX )
set(CMAKE_CXX_COMPILER_LOADED 1)
set(CMAKE_CXX_COMPILER_WORKS TRUE)
set(CMAKE_CXX_ABI_COMPILED )

set(CMAKE_CXX_COMPILER_ENV_VAR "CXX")

set(CMAKE_CXX_COMPILER_ID_RUN 1)
set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;m;mm;mpp;CPP;ixx;cppm;ccm;cxxm;c++m)
set(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC)

foreach (lang IN ITEMS C OBJC OBJCXX)
if (CMAKE_${lang}_COMPILER_ID_RUN)
foreach(extension IN LISTS CMAKE_${lang}_SOURCE_FILE_EXTENSIONS)
list(REMOVE_ITEM CMAKE_CXX_SOURCE_FILE_EXTENSIONS ${extension})
endforeach()
endif()
endforeach()

set(CMAKE_CXX_LINKER_PREFERENCE 30)
set(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1)
set(CMAKE_CXX_LINKER_DEPFILE_SUPPORTED )

# Save compiler ABI information.
set(CMAKE_CXX_SIZEOF_DATA_PTR "4")
set(CMAKE_CXX_COMPILER_ABI "")
set(CMAKE_CXX_BYTE_ORDER "LITTLE_ENDIAN")
set(CMAKE_CXX_LIBRARY_ARCHITECTURE "")

if(CMAKE_CXX_SIZEOF_DATA_PTR)
set(CMAKE_SIZEOF_VOID_P "${CMAKE_CXX_SIZEOF_DATA_PTR}")
endif()

if(CMAKE_CXX_COMPILER_ABI)
set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}")
endif()

if(CMAKE_CXX_LIBRARY_ARCHITECTURE)
set(CMAKE_LIBRARY_ARCHITECTURE "")
endif()

set(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX "")
if(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX)
set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_CXX_CL_SHOWINCLUDES_PREFIX}")
endif()





set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES "/opt/homebrew/Cellar/emscripten/5.0.7/libexec/cache/sysroot/include;/opt/homebrew/Cellar/emscripten/5.0.7/libexec/cache/sysroot/include/c++/v1")
set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "")
set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "")
set(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "")
set(CMAKE_CXX_COMPILER_CLANG_RESOURCE_DIR "")
15 changes: 15 additions & 0 deletions build-web/CMakeFiles/3.29.5/CMakeSystem.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
set(CMAKE_HOST_SYSTEM "Darwin-24.6.0")
set(CMAKE_HOST_SYSTEM_NAME "Darwin")
set(CMAKE_HOST_SYSTEM_VERSION "24.6.0")
set(CMAKE_HOST_SYSTEM_PROCESSOR "arm64")

include("/opt/homebrew/Cellar/emscripten/5.0.7/libexec/cmake/Modules/Platform/Emscripten.cmake")

set(CMAKE_SYSTEM "Emscripten-1")
set(CMAKE_SYSTEM_NAME "Emscripten")
set(CMAKE_SYSTEM_VERSION "1")
set(CMAKE_SYSTEM_PROCESSOR "x86")

set(CMAKE_CROSSCOMPILING "TRUE")

set(CMAKE_SYSTEM_LOADED 1)
12 changes: 12 additions & 0 deletions build-web/CMakeFiles/CMakeConfigureLog.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@

---
events:
-
kind: "message-v1"
backtrace:
- "/opt/homebrew/Cellar/cmake/3.29.5/share/cmake/Modules/CMakeDetermineSystem.cmake:200 (message)"
- "CMakeLists.txt:7 (project)"
message: |
The target system is: Emscripten - 1 - x86
The host system is: Darwin - 24.6.0 - arm64
...
16 changes: 16 additions & 0 deletions build-web/CMakeFiles/CMakeDirectoryInformation.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.29

# Relative path conversion top directories.
set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/Users/alexandruionascu/Workspace/cuza")
set(CMAKE_RELATIVE_PATH_TOP_BINARY "/Users/alexandruionascu/Workspace/cuza/build-web")

# Force unix paths in dependencies.
set(CMAKE_FORCE_UNIX_PATHS 1)


# The C and CXX include file regular expressions for this directory.
set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$")
set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$")
set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN})
set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN})
3 changes: 3 additions & 0 deletions build-web/CMakeFiles/CMakeRuleHashes.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Hashes of file build rules.
37fdac2a75c2b16acc0f1fa2548edbbf /Users/alexandruionascu/Workspace/cuza/src/parser.cpp
07a01d02451785d25ed55b390a77b861 /Users/alexandruionascu/Workspace/cuza/src/tokens.cpp
45 changes: 45 additions & 0 deletions build-web/CMakeFiles/Makefile.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.29

# The generator used is:
set(CMAKE_DEPENDS_GENERATOR "Unix Makefiles")

# The top level Makefile was generated from the following files:
set(CMAKE_MAKEFILE_DEPENDS
"CMakeCache.txt"
"/Users/alexandruionascu/Workspace/cuza/CMakeLists.txt"
"CMakeFiles/3.29.5/CMakeCXXCompiler.cmake"
"CMakeFiles/3.29.5/CMakeSystem.cmake"
"/opt/homebrew/Cellar/cmake/3.29.5/share/cmake/Modules/CMakeCXXInformation.cmake"
"/opt/homebrew/Cellar/cmake/3.29.5/share/cmake/Modules/CMakeCommonLanguageInclude.cmake"
"/opt/homebrew/Cellar/cmake/3.29.5/share/cmake/Modules/CMakeGenericSystem.cmake"
"/opt/homebrew/Cellar/cmake/3.29.5/share/cmake/Modules/CMakeInitializeConfigs.cmake"
"/opt/homebrew/Cellar/cmake/3.29.5/share/cmake/Modules/CMakeLanguageInformation.cmake"
"/opt/homebrew/Cellar/cmake/3.29.5/share/cmake/Modules/CMakeSystemSpecificInformation.cmake"
"/opt/homebrew/Cellar/cmake/3.29.5/share/cmake/Modules/CMakeSystemSpecificInitialize.cmake"
"/opt/homebrew/Cellar/cmake/3.29.5/share/cmake/Modules/Compiler/CMakeCommonCompilerMacros.cmake"
"/opt/homebrew/Cellar/cmake/3.29.5/share/cmake/Modules/Compiler/Clang-CXX.cmake"
"/opt/homebrew/Cellar/cmake/3.29.5/share/cmake/Modules/Compiler/Clang.cmake"
"/opt/homebrew/Cellar/cmake/3.29.5/share/cmake/Modules/Compiler/GNU.cmake"
"/opt/homebrew/Cellar/cmake/3.29.5/share/cmake/Modules/FindBISON.cmake"
"/opt/homebrew/Cellar/cmake/3.29.5/share/cmake/Modules/FindFLEX.cmake"
"/opt/homebrew/Cellar/cmake/3.29.5/share/cmake/Modules/FindPackageHandleStandardArgs.cmake"
"/opt/homebrew/Cellar/cmake/3.29.5/share/cmake/Modules/FindPackageMessage.cmake"
"/opt/homebrew/Cellar/emscripten/5.0.7/libexec/cmake/Modules/Platform/Emscripten.cmake"
)

# The corresponding makefile is:
set(CMAKE_MAKEFILE_OUTPUTS
"Makefile"
"CMakeFiles/cmake.check_cache"
)

# Byproducts of CMake generate step:
set(CMAKE_MAKEFILE_PRODUCTS
"CMakeFiles/CMakeDirectoryInformation.cmake"
)

# Dependency information for all targets:
set(CMAKE_DEPEND_INFO_FILES
"CMakeFiles/cuza_playground.dir/DependInfo.cmake"
)
Loading