From 1f1b4be24aaae0cb7bfa344febeef3e3ca9477f9 Mon Sep 17 00:00:00 2001 From: Wohlstand Date: Mon, 7 Aug 2023 14:18:40 +0300 Subject: [PATCH] CMake: Added some build support for DevkitPro and VitaSDK --- src/CMakeLists.txt | 57 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 44 insertions(+), 13 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 54b7e373fd..5e52ca872d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -11,6 +11,7 @@ set(CMAKE_CROSSCOMPILING ${LJ_CROSSCOMPILING} CACHE BOOL "Cross-compiling") set(LUAJIT_DISABLE_FFI OFF CACHE BOOL "Permanently disable the FFI extension") set(LUAJIT_DISABLE_JIT OFF CACHE BOOL "Disable the JIT compiler") set(LUAJIT_NO_UNWIND OFF CACHE BOOL "Disable the UNWIND") +set(LUAJIT_BUILD_TOOL ON CACHE BOOL "Build the executable of LuaJIT") set(LUAJIT_NUMMODE 0 CACHE STRING "Specify the number mode to use. Possible values: 0 - Default mode @@ -32,6 +33,14 @@ if (MSVC) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY $<1:${CMAKE_CURRENT_BINARY_DIR}>) endif() +if (NINTENDO_DS OR NINTENDO_3DS OR NINTENDO_WII OR NINTENDO_WII_U OR NINTENDO_SWITCH OR VITA) + unset(LUAJIT_DISABLE_FFI) + unset(LUAJIT_DISABLE_JIT) + set(LUAJIT_DISABLE_FFI ON CACHE BOOL "" FORCE) + set(LUAJIT_DISABLE_JIT ON CACHE BOOL "" FORCE) + set(LUAJIT_BUILD_TOOL OFF CACHE BOOL "" FORCE) +endif() + # Build the minilua for host platform if (NOT CMAKE_CROSSCOMPILING) add_subdirectory(host/cmake/minilua) @@ -63,6 +72,11 @@ include(DetectFPUApi) detect_fpu_mode(LJ_DETECTED_FPU_MODE) detect_fpu_abi(LJ_DETECTED_FPU_ABI) +include(CheckIncludeFile) +if(NOT WIN32) + check_include_file("sys/mman.h" LJ_DETECTED_SYS_MMAN_H) +endif() + find_library(LIBM_LIBRARIES NAMES m) find_library(LIBDL_LIBRARIES NAMES dl) @@ -258,6 +272,10 @@ elseif ("${CMAKE_SYSTEM_NAME}" STREQUAL "Haiku") set(TARGET_OS_FLAGS ${TARGET_OS_FLAGS} -DLUAJIT_OS=LUAJIT_OS_POSIX) elseif ("${CMAKE_SYSTEM_NAME}" MATCHES "(Open|Free|Net)BSD") set(TARGET_OS_FLAGS ${TARGET_OS_FLAGS} -DLUAJIT_OS=LUAJIT_OS_BSD) +elseif (VITA) + set(TARGET_OS_FLAGS ${TARGET_OS_FLAGS} -DLUAJIT_OS=LUAJIT_OS_OTHER -DLJ_TARGET_PSVITA=1) +elseif ("${CMAKE_SYSTEM_NAME}" MATCHES "Nintendo(DS|3DS|Wii|WiiU|Switch)") + set(TARGET_OS_FLAGS ${TARGET_OS_FLAGS} -DLJ_TARGET_NX -DLUAJIT_OS=LUAJIT_OS_OTHER -DLUAJIT_SECURITY_PRNG=0) else() set(TARGET_OS_FLAGS ${TARGET_OS_FLAGS} -DLUAJIT_OS=LUAJIT_OS_OTHER) endif() @@ -303,6 +321,10 @@ if (LUAJIT_ENABLE_GDBJIT) set(TARGET_ARCH ${TARGET_ARCH} -DLUAJIT_ENABLE_GDBJIT) endif() +if (NOT WIN32 AND NOT LJ_DETECTED_SYS_MMAN_H) + set(LJ_DEFINITIONS ${LJ_DEFINITIONS} -DLUAJIT_USE_SYSMALLOC) +endif() + set(VM_DASC_PATH ${CMAKE_CURRENT_SOURCE_DIR}/vm_${DASM_ARCH}.dasc) add_custom_command(OUTPUT ${BUILDVM_ARCH_H} @@ -533,6 +555,11 @@ if (LIBDL_LIBRARIES) target_link_libraries(libluajit ${LIBDL_LIBRARIES}) endif() +if (VITA) + target_compile_definitions(libluajit PRIVATE -DsceRandomGetRandomNumber=sceKernelGetRandomNumber) + target_link_libraries(libluajit SceLibKernel_stub) +endif() + set(LJ_DEFINITIONS ${LJ_DEFINITIONS} -DLUA_MULTILIB="${LUA_MULTILIB}") target_compile_definitions(libluajit PRIVATE ${LJ_DEFINITIONS}) @@ -553,19 +580,21 @@ endif() target_compile_options(libluajit PRIVATE ${LJ_COMPILE_OPTIONS}) -# Build the luajit binary -add_executable(luajit luajit.c) -target_link_libraries(luajit libluajit) -if (APPLE AND LJ_64 AND NOT LUAJIT_ENABLE_GC64) - target_link_libraries(luajit "-pagezero_size 10000" "-image_base 100000000") -endif() -if ("${CMAKE_SYSTEM_NAME}" MATCHES "(Open|Free|Net)BSD") - target_link_libraries(luajit c++abi pthread) -endif() -target_compile_definitions(luajit PRIVATE ${LJ_DEFINITIONS}) +if (LUAJIT_BUILD_TOOL) + # Build the luajit binary + add_executable(luajit luajit.c) + target_link_libraries(luajit libluajit) + if (APPLE AND LJ_64 AND NOT LUAJIT_ENABLE_GC64) + target_link_libraries(luajit "-pagezero_size 10000" "-image_base 100000000") + endif() + if ("${CMAKE_SYSTEM_NAME}" MATCHES "(Open|Free|Net)BSD") + target_link_libraries(luajit c++abi pthread) + endif() + target_compile_definitions(luajit PRIVATE ${LJ_DEFINITIONS}) -if (MSVC) - set_target_properties(luajit PROPERTIES RUNTIME_OUTPUT_DIRECTORY $<1:${CMAKE_CURRENT_BINARY_DIR}>) + if (MSVC) + set_target_properties(luajit PROPERTIES RUNTIME_OUTPUT_DIRECTORY $<1:${CMAKE_CURRENT_BINARY_DIR}>) + endif() endif() set(luajit_headers lauxlib.h lua.h luaconf.h luajit.h lualib.h) @@ -574,4 +603,6 @@ install(TARGETS libluajit LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) -install(TARGETS luajit DESTINATION "${CMAKE_INSTALL_BINDIR}") +if (LUAJIT_BUILD_TOOL) + install(TARGETS luajit DESTINATION "${CMAKE_INSTALL_BINDIR}") +endif()