mame/3rdparty/portmidi/pm_java/CMakeLists.txt
2025-04-20 08:16:03 +10:00

87 lines
4.1 KiB
CMake

# pm_java/CMakeLists.txt -- builds pmjni and pmdefaults program
find_package(Java)
message(STATUS "Java_JAVA_EXECUTABLE is " ${Java_JAVA_EXECUTABLE})
if(BUILD_PMDEFAULTS)
# Since pmdefaults and pmdefaults.bat are in the source tree and look
# for libpmjni in the same tree, out-of-source build will not create
# a working pmdefaults (without more work):
if(NOT (${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}))
message(WARNING "PmDefaults only works when run in the pm_java/pmdefaults directory after an in-source build. This is an out-of-source build, so [probably] libpmjni will be built out-of-source, pmdefaults.jar will be built in-source, and the pmdefaults[.bat] script remains in-source. Rebuild in-source to use PmDefaults or adjust the file locations and scripts to suit yourself.")
endif()
set(JPORTMIDICLASS JPortMidi.class JPortMidiException.class
JPortMidiApi.class)
set(PMDEFAULTSCLASS PmDefaultsFrame.class PmDefaults.class)
prepend_path(JPORTMIDIPATH jportmidi/ ${JPORTMIDICLASS})
prepend_path(PMDEFAULTSPATH pmdefaults/ ${PMDEFAULTSCLASS})
set(PMDEFAULTS_ALL ${JPORTMIDIPATH} ${PMDEFAULTSPATH})
project(pmdefaults NONE)
include(UseJava)
add_jar(pmdefaults
SOURCES pmdefaults/PmDefaults.java pmdefaults/PmDefaultsFrame.java
jportmidi/JPortMidi.java jportmidi/JPortMidiApi.java
jportmidi/JPortMidiException.java
RESOURCES NAMESPACE "." pmdefaults/portmusic_logo.png
MANIFEST pmdefaults/manifest.txt
OUTPUT_DIR pmdefaults)
if(WIN32)
set(JAVAVM_LIB ${JAVA_INCLUDE_PATH}/../jre/lib/i386/client/libjvm.so)
endif()
add_dependencies(pmdefaults pmjni)
endif(BUILD_PMDEFAULTS)
# Build pmjni
# this CMakeLists.txt is only loaded if BUILD_JAVA_NATIVE_INTERFACE
# This jni library includes portmidi sources to give just
# one library for JPortMidi users to manage rather than two.
if(UNIX)
include(FindJNI)
# message(STATUS "JAVA_JVM_LIB_PATH is " ${JAVA_JVM_LIB_PATH})
# message(STATUS "JAVA_INCLUDE_PATH is " ${JAVA_INCLUDE_PATH})
# note: should use JAVA_JVM_LIB_PATH, but it is not set properly
# note: user might need to set JAVA_INCLUDE_PATH manually
#
# this will probably break on BSD and other Unix systems; the fix
# depends on whether FindJNI can find Java or not. If yes, then
# we should try to rely on automatically set JAVA_INCLUDE_PATH and
# JAVA_INCLUDE_PATH2; if no, then we need to make both JAVA_INCLUDE_PATH
# and JAVA_INCLUDE_PATH2 set by user (will need clear documentation
# because JAVA_INCLUDE_PATH2 is pretty obscure)
set(JAVA_INCLUDE_PATH ${JAVA_INCLUDE_PATH-UNKNOWN}
CACHE STRING "where to find Java SDK include directory")
# libjvm.so is found relative to JAVA_INCLUDE_PATH:
if (HAIKU)
set(JAVA_INCLUDE_PATHS ${JAVA_INCLUDE_PATH} ${JAVA_INCLUDE_PATH}/haiku)
else()
set(JAVA_INCLUDE_PATHS ${JAVA_INCLUDE_PATH} ${JAVA_INCLUDE_PATH}/linux)
endif()
elseif(WIN32)
include(FindJNI)
# note: should use JAVA_JVM_LIB_PATH, but it is not set properly
set(JAVAVM_LIB ${JAVA_INCLUDE_PATH}/../lib/jvm.lib)
set(JAVA_INCLUDE_PATHS ${JAVA_INCLUDE_PATH} ${JAVA_INCLUDE_PATH2})
# message(STATUS "JAVA_INCLUDE_PATHS: " ${JAVA_INCLUDE_PATHS})
# message(STATUS "JAVAVM_LIB: " ${JAVAVM_LIB})
endif()
add_library(pmjni SHARED pmjni/pmjni.c)
target_sources(pmjni PRIVATE ${PM_LIB_PUBLIC_SRC} ${PM_LIB_PRIVATE_SRC})
message(STATUS "Java paths ${JAVA_INCLUDE_PATHS}")
# message(STATUS "Java pmjni src: pmjni/pmjni.c ${PM_LIB_SHARED_SRC} "
# "${PM_LIB_PRIVATE_SRC}")
target_include_directories(pmjni PUBLIC ${JAVA_INCLUDE_PATHS})
target_link_libraries(pmjni ${PM_NEEDED_LIBS})
set_target_properties(pmjni PROPERTIES
VERSION ${LIBRARY_VERSION}
SOVERSION ${LIBRARY_SOVERSION}
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
EXECUTABLE_EXTENSION "jnilib"
MACOSX_RPATH ON)