# Force Ghidra's Java home instead of trying to figure it out automatically.
# If the provided path does not point to a supported Java home that Ghidra
# supports, this property is ignored.
# NOTE: Ghidra requires a JDK to launch.
JAVA_HOME_OVERRIDE=

# Required Ghidra class loader
VMARGS=-Djava.system.class.loader=ghidra.GhidraClassLoader

# Set default encoding to UTF8
VMARGS=-Dfile.encoding=UTF8

# Set locale (only en_US is supported)
VMARGS=-Duser.country=US
VMARGS=-Duser.language=en
VMARGS=-Duser.variant=

# The following options affect rendering on different platforms.  It may be necessary to play
# with these settings to get Ghidra to display and perform optimally on HiDPI monitors or in VM's.
VMARGS=-Dsun.java2d.opengl=false
VMARGS_LINUX=-Dsun.java2d.pmoffscreen=false
VMARGS_LINUX=-Dsun.java2d.xrender=true
VMARGS_LINUX=-Dsun.java2d.uiScale=1
VMARGS_LINUX=-Dawt.useSystemAAFontSettings=on
VMARGS_WINDOWS=-Dsun.java2d.d3d=false

# The Ghidra application establishes the default SSLContext for all
# secure client connections based upon Java's default TLS protocol enablement.  
# Setting this property will restrict the enabled TLS protocol versions for 
# all secure network connections.  Specifying multiple protocols must be
# comma-separated (e.g., TLSv1.2,TLSv1.3).  See https://java.com/en/configure_crypto.html 
# for details on configuring Java's cryptographic algorithms.
VMARGS=-Djdk.tls.client.protocols=TLSv1.2,TLSv1.3

# Force PKI server authentication of all HTTPS and Ghidra Server connections by
# specifying path to installed CA certificates file.
# VMARGS=-Dghidra.cacerts=

# Enable verbose logging for network SSL/TLS negotiations.
# This can be very useful when troubleshooting SSLHandshakeException failures which can 
# manifest with very cryptic messages.  All Ghidra Server communications rely on secure
# SSL/TLS connections.  This VMARG should only be uncommented while actively troubleshooting
# since it will log a significant amount of data.
#
# See the "Troubleshoting JSSE" section of the following internet hosted document:
#   https://docs.oracle.com/en/java/javase/17/security/java-secure-socket-extension-jsse-reference-guide.html
#  
# NOTE: When this debug logging is enabled be sure to launch Ghidra with debugGhidra instead of
#       ghidraRun since the detailed log output is directed to the console only.  This behavior may 
#       vary with other launch scripts.
#
#VMARGS=-Djavax.net.debug=ssl

# When using Java 21.0.10 or later and connecting to an older Ghidra Server (pre-12.0.3) the following 
# connection error may occur.  
#    ... SSLHandshakeException: (certificate_unknown) No matching <name> found
# If unable to upgrade your Ghidra Server this property setting may be uncommented to disable the 
# hostname check. 
#VMARGS=-Djdk.rmi.ssl.client.enableEndpointIdentification=false

# The following property will limit the number of processor cores that Ghidra
# will use for thread pools. If not specified, it will use the default number 
# of processors returned from Runtime.getRuntime().getAvailableProcessors(). 
# Otherwise, it will use the min of the value returned from Runtime and the 
# value specified by the following property.
VMARGS=-Dcpu.core.limit=

# The following property is a way to exactly specify the number of processor 
# cores that Ghidra will use for thread pools.  Note: this will supersede the 
# above 'cpu.core.limit' value if it is set.
VMARGS=-Dcpu.core.override=

# Default font size for many java swing elements.
VMARGS=-Dfont.size.override=

# Set Jython console encoding (prevents a console error)
VMARGS=-Dpython.console.encoding=UTF-8

# Eclipse on macOS can have file locking issues if the user home directory is networked.  Therefore,
# we will disable file locking by default for macOS. Comment the following line out if Eclipse file 
# locking is needed and known to work.
VMARGS_MACOS=-Declipse.filelock.disable=true

# Where the menu bar is displayed on macOS
VMARGS_MACOS=-Dapple.laf.useScreenMenuBar=false

# Make the title bar adaptable to macOS theme
VMARGS_MACOS=-Dapple.awt.application.appearance=system

# Prevent log4j from using the Jansi DLL on Windows.
VMARGS_WINDOWS=-Dlog4j.skipJansi=true

# Custom class loader usage forces class data sharing to be disabled which produces a warning.  
# Ghidra does not use class data sharing, so explicitly turn it off to avoid the warning.
VMARGS=-Xshare:off

# Restrict XML external access 
VMARGS=-Djavax.xml.accessExternalDTD=
VMARGS=-Djavax.xml.accessExternalSchema=
VMARGS=-Djavax.xml.accessExternalStylesheet=

# Enable native access (required by FlatLaf)
VMARGS=--enable-native-access=ALL-UNNAMED

# Settings directory used by the application to store application settings and data that persist
# between application sessions, system reboots, and periodic system cleanup. Overridden values
# are required to be absolute paths. The current user name may be incorporated into the settings
# directory's name if the settings directory lives outside of the user's home directory.  The
# settings directory will be selected based on the following rules, in order of precedence:
# 1. System.getProperty("application.settingsdir")/[user-]<application>/<application>_<version>
# 2. System.getenv("XDG_CONFIG_HOME")/[user-]<application>/<application>_<version>
# 3. A platform specific default location:
#  - Windows: %APPDATA%\<application>\<application>_<version>
#  - Linux: $HOME/.config/<application>/<application>_<version>
#  - macOS: $HOME/Library/<application>/<application>_<version>
#VMARGS=-Dapplication.settingsdir=

# Cache directory used by the application to store cached application data that ideally will persist
# between application sessions and system reboots, but is not required to do so. Files stored in
# the cache directory may be numerous and/or large. Overridden values are required to be absolute
# paths. The current user name may be incorporated into the cache directory's name if the cache
# directory lives outside of the user's home directory. The cache directory will be selected based
# on the following rules, in order of precedence
# 1. System.getProperty("application.cachedir")/[user-]<application>
# 2. System.getenv("XDG_CACHE_HOME")/[user-]<application>
# 3. A platform specific default location:
#  - Windows: %LOCALAPPDATA%\<application>
#  - Linux: /var/tmp/<user>-<application>
#  - macOS: /var/tmp/<user>-<application>
#VMARGS=-Dapplication.cachedir=

# Temporary directory used by the application to store short-lived files that are not required to
# persist between application sessions. Overridden values are required to be absolute paths. The 
# current user name may be incorporated into the temporary directory's name if the temporary 
# directory lives outside of the user's home directory.  The temporary directory will be selected 
# based on the following rules, in order of precedence:
# 1. System.getProperty("application.tempdir")/[user-]<application>
# 2. System.getProperty("java.io.tmpdir")/[user-]<application>
# Unless overridden below, the "java.io.tmpdir" system property typically defaults to the following
# platform specific locations:
#  - Windows: %TEMP%
#  - Linux: /tmp
#  - macOS: $TMPDIR
#VMARGS=-Dapplication.tempdir=
#VMARGS=-Djava.io.tmpdir=

# Disable alternating row colors in tables
#VMARGS=-Ddisable.alternating.row.colors=true

# Limit on XML parsing. See https://docs.oracle.com/javase/tutorial/jaxp/limits/limits.html
#VMARGS=-Djdk.xml.totalEntitySizeLimit=50000000

# Restrict extensions to their own 'lib' directory for loading non-Ghidra jars.  This may be used
# to fix class resolution if multiple extensions include different versions of the same named class. 
#VMARGS=-Dghidra.extensions.classpath.restricted=true

# Enables PDB debug logging during import and analysis to .ghidra/.ghidra_ver/pdb.analyzer.log
#VMARGS=-Dghidra.pdb.logging=true

# Enables PDB developer mode
#VMARGS=-Dghidra.pdb.developerMode=true

# Disables the loaders echoing their message log to the application.log file
#VMARGS=-Ddisable.loader.logging=true

# Restores sys.modules to its prior state after a PyGhidra script is run so the next time the script
# is run, it freshly reloads all of its imported modules again. This is experimental and should only
# be enabled if necessary.
#VMARGS=-Dpyghidra.sys.modules.restore=true
