Skip to content

Commit

Permalink
nesbox#2257: build languages as shared libs (nesbox#2519)
Browse files Browse the repository at this point in the history
* added BUILD_STATIC=OFF option to split scripts to shared libs

* rpi build fix

* rpi build fix

* macos build fix

* rpi baremetal build fix

* build fix

* call api without macro

* wren build fix

* clang build fix

* baremetal fix

* fixed python and janet shared libs
  • Loading branch information
nesbox authored Apr 21, 2024
1 parent 562c8ab commit 4ffa300
Show file tree
Hide file tree
Showing 36 changed files with 1,446 additions and 1,221 deletions.
18 changes: 14 additions & 4 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ endif()

set(BUILD_TOUCH_INPUT_DEFAULT ${ANDROID})

option(BUILD_STATIC "Static runtime" ON)
option(BUILD_SDL "SDL Enabled" ON)
option(BUILD_SDLGPU "SDL GPU Enabled" OFF)
option(BUILD_SOKOL "Sokol Enabled" OFF)
Expand All @@ -40,6 +41,13 @@ if(NOT BUILD_SDL)
set(BUILD_SDLGPU OFF)
endif()

if(BUILD_STATIC)
set(TIC_RUNTIME STATIC)
else()
set(TIC_RUNTIME SHARED)
endif()

message("BUILD_STATIC: ${BUILD_STATIC}")
message("BUILD_SDLGPU: ${BUILD_SDLGPU}")
message("BUILD_TOUCH_INPUT: ${BUILD_TOUCH_INPUT}")
message("BUILD_STUB: ${BUILD_STUB}")
Expand All @@ -62,7 +70,7 @@ if(UNIX AND NOT APPLE AND NOT EMSCRIPTEN AND NOT ANDROID AND NOT N3DS)
endif()

set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
if (NOT DEFINED CMAKE_POSITION_INDEPENDENT_CODE)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
Expand Down Expand Up @@ -100,9 +108,13 @@ if(RPI)
endif()

set(THIRDPARTY_DIR ${CMAKE_SOURCE_DIR}/vendor)
set(DEMO_CARTS_IN ${CMAKE_SOURCE_DIR}/demos)

include(cmake/gif.cmake)
include(cmake/blipbuf.cmake)
include(cmake/zlib.cmake)
include(cmake/zip.cmake)
include(cmake/tools.cmake)

include(cmake/lua.cmake)
include(cmake/wren.cmake)
Expand All @@ -114,11 +126,9 @@ include(cmake/pocketpy.cmake)
include(cmake/quickjs.cmake)
include(cmake/janet.cmake)

include(cmake/demos.cmake)
include(cmake/core.cmake)

include(cmake/zlib.cmake)
include(cmake/zip.cmake)
include(cmake/tools.cmake)
include(cmake/wave.cmake)
include(cmake/argparse.cmake)
include(cmake/naett.cmake)
Expand Down
1 change: 0 additions & 1 deletion build/assets/gamecontrollerdb.txt.dat

This file was deleted.

3 changes: 3 additions & 0 deletions build/baremetalpi/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -32,15 +32,18 @@ LIBS := \
$(TIC80LIB)/libblipbuf.a \
$(TIC80LIB)/libsquirrel.a \
$(TIC80LIB)/libpython.a \
$(TIC80LIB)/libpocketpy.a \
$(TIC80LIB)/libscheme.a \
$(TIC80LIB)/libwren.a \
$(TIC80LIB)/libwasm.a \
$(TIC80LIB)/libjanet.a \
$(TIC80LIB)/libargparse.a \
$(TIC80LIB)/libwave_writer.a \
$(TIC80LIB)/libjs.a \
$(TIC80LIB)/libquickjs.a \
$(TIC80LIB)/libzlib.a \
$(TIC80LIB)/libpng.a \
$(TIC80LIB)/libruby.a \
$(MRUBYDIR)/build/target/lib/libmruby.a \
$(NEWLIBDIR)/lib/libc.a \
$(NEWLIBDIR)/lib/libcirclenewlib.a \
Expand Down
48 changes: 2 additions & 46 deletions cmake/core.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -18,50 +18,6 @@ macro(MACRO_CORE SCRIPT DEFINE BUILD_DEPRECATED)
${TIC80CORE_DIR}/tilesheet.c
)

if(BUILD_WITH_LUA)
list(APPEND TIC80CORE_SRC ${TIC80CORE_DIR}/api/lua.c)
endif()

if(BUILD_WITH_MOON)
list(APPEND TIC80CORE_SRC ${TIC80CORE_DIR}/api/moonscript.c)
endif()

if(BUILD_WITH_FENNEL)
list(APPEND TIC80CORE_SRC ${TIC80CORE_DIR}/api/fennel.c)
endif()

if(BUILD_WITH_JS)
list(APPEND TIC80CORE_SRC ${TIC80CORE_DIR}/api/js.c)
endif()

if(BUILD_WITH_SCHEME)
list(APPEND TIC80CORE_SRC ${TIC80CORE_DIR}/api/scheme.c)
endif()

if(BUILD_WITH_SQUIRREL)
list(APPEND TIC80CORE_SRC ${TIC80CORE_DIR}/api/squirrel.c)
endif()

if(BUILD_WITH_PYTHON)
list(APPEND TIC80CORE_SRC ${TIC80CORE_DIR}/api/python.c)
endif()

if(BUILD_WITH_WREN)
list(APPEND TIC80CORE_SRC ${TIC80CORE_DIR}/api/wren.c)
endif()

if(BUILD_WITH_MRUBY)
list(APPEND TIC80CORE_SRC ${TIC80CORE_DIR}/api/mruby.c)
endif()

if(BUILD_WITH_JANET)
list(APPEND TIC80CORE_SRC ${TIC80CORE_DIR}/api/janet.c)
endif()

if(BUILD_WITH_WASM)
list(APPEND TIC80CORE_SRC ${TIC80CORE_DIR}/api/wasm.c)
endif()

if(${BUILD_DEPRECATED})
set(TIC80CORE_SRC ${TIC80CORE_SRC} ${TIC80CORE_DIR}/ext/gif.c)
endif()
Expand Down Expand Up @@ -89,7 +45,7 @@ macro(MACRO_CORE SCRIPT DEFINE BUILD_DEPRECATED)
endif()

if(BUILD_WITH_JS)
target_link_libraries(tic80core${SCRIPT} quickjs)
target_link_libraries(tic80core${SCRIPT} js)
endif()

if(BUILD_WITH_SCHEME)
Expand All @@ -109,7 +65,7 @@ macro(MACRO_CORE SCRIPT DEFINE BUILD_DEPRECATED)
endif()

if(BUILD_WITH_MRUBY)
target_link_libraries(tic80core${SCRIPT} mruby)
target_link_libraries(tic80core${SCRIPT} ruby)
endif()

if(BUILD_WITH_JANET)
Expand Down
19 changes: 19 additions & 0 deletions cmake/demos.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
if(BUILD_DEMO_CARTS)

foreach(CART_FILE ${DEMO_CARTS})

get_filename_component(CART_NAME ${CART_FILE} NAME_WE)

set(OUTNAME ${CMAKE_SOURCE_DIR}/build/assets/${CART_NAME}.tic.dat)
set(OUTPRJ ${CMAKE_SOURCE_DIR}/build/${CART_NAME}.tic)

list(APPEND DEMO_CARTS_OUT ${OUTNAME})

add_custom_command(OUTPUT ${OUTNAME}
COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/prj2cart ${CART_FILE} ${OUTPRJ} && ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/bin2txt ${OUTPRJ} ${OUTNAME} -z
DEPENDS bin2txt prj2cart ${CART_FILE}
)

endforeach(CART_FILE)

endif()
28 changes: 25 additions & 3 deletions cmake/janet.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,31 @@ if(BUILD_WITH_JANET)
)
endif()

add_library(janet ${THIRDPARTY_DIR}/janet/build/c/janet.c)
target_include_directories(janet PUBLIC ${THIRDPARTY_DIR}/janet/src/include)
target_include_directories(janet PUBLIC ${CMAKE_SOURCE_DIR}/build/janet/)
set(JANET_SRC
${THIRDPARTY_DIR}/janet/build/c/janet.c
${CMAKE_SOURCE_DIR}/src/api/janet.c
${CMAKE_SOURCE_DIR}/src/api/parse_note.c
)

add_library(janet ${TIC_RUNTIME} ${JANET_SRC})

if(NOT BUILD_STATIC)
set_target_properties(janet PROPERTIES PREFIX "")
endif()

target_include_directories(janet
PRIVATE
${THIRDPARTY_DIR}/janet/src/include
${CMAKE_SOURCE_DIR}/build/janet
${CMAKE_SOURCE_DIR}/include
${CMAKE_SOURCE_DIR}/src
)

target_compile_definitions(janet INTERFACE TIC_BUILD_WITH_JANET=1)

if(BUILD_DEMO_CARTS)
list(APPEND DEMO_CARTS ${DEMO_CARTS_IN}/janetdemo.janet)
list(APPEND DEMO_CARTS ${DEMO_CARTS_IN}/bunny/janetmark.janet)
endif()

endif()
60 changes: 55 additions & 5 deletions cmake/lua.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -55,25 +55,75 @@ if(BUILD_WITH_LUA)
${LUA_DIR}/lutf8lib.c
${LUA_DIR}/loadlib.c
${LUA_DIR}/linit.c
${LUA_DIR}/lbitlib.c
)

add_library(lua STATIC ${LUA_SRC})
list(APPEND LUA_SRC ${CMAKE_SOURCE_DIR}/src/api/lua.c)
list(APPEND LUA_SRC ${CMAKE_SOURCE_DIR}/src/api/parse_note.c)

if(BUILD_WITH_MOON)
list(APPEND LUA_SRC ${CMAKE_SOURCE_DIR}/src/api/moonscript.c)
endif()

if(BUILD_WITH_FENNEL)
list(APPEND LUA_SRC ${CMAKE_SOURCE_DIR}/src/api/fennel.c)
endif()

add_library(lua ${TIC_RUNTIME} ${LUA_SRC})

if(NOT BUILD_STATIC)
set_target_properties(lua PROPERTIES PREFIX "")
endif()

target_compile_definitions(lua PRIVATE LUA_COMPAT_5_2)
target_include_directories(lua INTERFACE ${THIRDPARTY_DIR}/lua)
target_include_directories(lua
PUBLIC ${THIRDPARTY_DIR}/lua
PRIVATE
${CMAKE_SOURCE_DIR}/include
${CMAKE_SOURCE_DIR}/src
)

if(N3DS)
target_compile_definitions(lua PUBLIC LUA_32BITS)
endif()

target_compile_definitions(lua INTERFACE TIC_BUILD_WITH_LUA=1)
target_compile_definitions(lua INTERFACE TIC_BUILD_WITH_LUA)

if(BUILD_WITH_MOON)
target_compile_definitions(lua INTERFACE TIC_BUILD_WITH_MOON=1)
target_include_directories(lua PRIVATE ${THIRDPARTY_DIR}/moonscript)
target_compile_definitions(lua INTERFACE TIC_BUILD_WITH_MOON)
endif()

if(BUILD_WITH_FENNEL)
target_compile_definitions(lua INTERFACE TIC_BUILD_WITH_FENNEL=1)
target_include_directories(lua PRIVATE ${THIRDPARTY_DIR}/fennel)
target_compile_definitions(lua INTERFACE TIC_BUILD_WITH_FENNEL)
endif()

if(BUILD_DEMO_CARTS)
list(APPEND DEMO_CARTS ${CMAKE_SOURCE_DIR}/config.lua)

list(APPEND DEMO_CARTS ${DEMO_CARTS_IN}/quest.lua)
list(APPEND DEMO_CARTS ${DEMO_CARTS_IN}/car.lua)
list(APPEND DEMO_CARTS ${DEMO_CARTS_IN}/music.lua)
list(APPEND DEMO_CARTS ${DEMO_CARTS_IN}/sfx.lua)
list(APPEND DEMO_CARTS ${DEMO_CARTS_IN}/palette.lua)
list(APPEND DEMO_CARTS ${DEMO_CARTS_IN}/bpp.lua)
list(APPEND DEMO_CARTS ${DEMO_CARTS_IN}/tetris.lua)
list(APPEND DEMO_CARTS ${DEMO_CARTS_IN}/font.lua)
list(APPEND DEMO_CARTS ${DEMO_CARTS_IN}/fire.lua)
list(APPEND DEMO_CARTS ${DEMO_CARTS_IN}/benchmark.lua)
list(APPEND DEMO_CARTS ${DEMO_CARTS_IN}/p3d.lua)
list(APPEND DEMO_CARTS ${DEMO_CARTS_IN}/luademo.lua)
list(APPEND DEMO_CARTS ${DEMO_CARTS_IN}/bunny/luamark.lua)

if(BUILD_WITH_MOON)
list(APPEND DEMO_CARTS ${DEMO_CARTS_IN}/moondemo.moon)
list(APPEND DEMO_CARTS ${DEMO_CARTS_IN}/bunny/moonmark.moon)
endif()

if(BUILD_WITH_FENNEL)
list(APPEND DEMO_CARTS ${DEMO_CARTS_IN}/fenneldemo.fnl)
endif()
endif()
endif()

Expand Down
35 changes: 27 additions & 8 deletions cmake/mruby.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,15 @@ message("BUILD_WITH_MRUBY: ${BUILD_WITH_MRUBY}")

if(BUILD_WITH_MRUBY)

list(APPEND RUBY_SRC ${CMAKE_SOURCE_DIR}/src/api/mruby.c)
list(APPEND RUBY_SRC ${CMAKE_SOURCE_DIR}/src/api/parse_note.c)

add_library(ruby ${TIC_RUNTIME} ${RUBY_SRC})

if(NOT BUILD_STATIC)
set_target_properties(ruby PROPERTIES PREFIX "")
endif()

if(CMAKE_BUILD_TYPE)
string(TOUPPER ${CMAKE_BUILD_TYPE} BUILD_TYPE_UC)
endif()
Expand All @@ -27,6 +36,13 @@ if(BUILD_WITH_MRUBY)
endif()
set(MRUBY_LIB ${MRUBY_DIR}/build/target/lib/libmruby.a)

target_include_directories(ruby
PUBLIC ${MRUBY_DIR}/include
PRIVATE
${CMAKE_SOURCE_DIR}/include
${CMAKE_SOURCE_DIR}/src
)

if(MSVC)
set(MRUBY_TOOLCHAIN visualcpp)
elseif(APPLE OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
Expand Down Expand Up @@ -65,15 +81,18 @@ if(BUILD_WITH_MRUBY)
BUILD_BYPRODUCTS ${MRUBY_LIB}
)

add_library(mruby STATIC IMPORTED GLOBAL)
set_property(TARGET mruby APPEND
PROPERTY IMPORTED_LOCATION ${MRUBY_LIB}
)
set_property(TARGET mruby APPEND
PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${MRUBY_DIR}/include
set_property(TARGET ruby APPEND
PROPERTY IMPORTED_LOCATION ${MRUBY_LIB}
)
add_dependencies(mruby mruby_vendor)

target_compile_definitions(mruby INTERFACE TIC_BUILD_WITH_MRUBY=1)
add_dependencies(ruby mruby_vendor)
target_link_libraries(ruby PRIVATE ${MRUBY_LIB})

target_compile_definitions(ruby INTERFACE TIC_BUILD_WITH_MRUBY=1)

if(BUILD_DEMO_CARTS)
list(APPEND DEMO_CARTS ${DEMO_CARTS_IN}/rubydemo.rb)
list(APPEND DEMO_CARTS ${DEMO_CARTS_IN}/bunny/rubymark.rb)
endif()

endif()
3 changes: 3 additions & 0 deletions cmake/naett.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -23,5 +23,8 @@ if(USE_NAETT)
elseif(LINUX)
target_include_directories(naett PRIVATE ${CURL_INCLUDE_DIRS})
target_link_libraries(naett ${CURL_LIBRARIES})
elseif(APPLE)
target_link_libraries(naett
"-framework Cocoa")
endif()
endif()
31 changes: 26 additions & 5 deletions cmake/pocketpy.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,41 @@ message("BUILD_WITH_PYTHON: ${BUILD_WITH_PYTHON}")
if(BUILD_WITH_PYTHON)

add_subdirectory(${THIRDPARTY_DIR}/pocketpy)
include_directories(${THIRDPARTY_DIR}/pocketpy/include)

if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
target_compile_options(pocketpy PRIVATE -Wno-psabi)
endif()

# alias pocketpy to python for next steps
set_target_properties(pocketpy PROPERTIES OUTPUT_NAME python)
add_library(python ALIAS pocketpy)
set(PYTHON_SRC
${CMAKE_SOURCE_DIR}/src/api/python.c
${CMAKE_SOURCE_DIR}/src/api/parse_note.c
)

add_library(python ${TIC_RUNTIME} ${PYTHON_SRC})

if(NOT BUILD_STATIC)
set_target_properties(python PROPERTIES PREFIX "")
endif()

target_include_directories(python
PRIVATE
${THIRDPARTY_DIR}/pocketpy/include
${CMAKE_SOURCE_DIR}/include
${CMAKE_SOURCE_DIR}/src
)

target_link_libraries(python PRIVATE pocketpy)

if(EMSCRIPTEN)
# exceptions must be enabled for emscripten
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fexceptions")
endif()

target_compile_definitions(pocketpy INTERFACE TIC_BUILD_WITH_PYTHON=1)
target_compile_definitions(python INTERFACE TIC_BUILD_WITH_PYTHON=1)

if(BUILD_DEMO_CARTS)
list(APPEND DEMO_CARTS ${DEMO_CARTS_IN}/pythondemo.py)
list(APPEND DEMO_CARTS ${DEMO_CARTS_IN}/bunny/pythonmark.py)
endif()

endif()
Loading

0 comments on commit 4ffa300

Please sign in to comment.