Merge branch 'GP-6929_ryanmkurtz_PR-8981_bsdkurt_openbsd' (Closes #8981)

This commit is contained in:
Ryan Kurtz
2026-06-08 06:21:02 -04:00
13 changed files with 111 additions and 7 deletions

View File

@@ -84,6 +84,8 @@ model {
targetPlatform "mac_arm_64"
targetPlatform "freebsd_x86_64"
targetPlatform "freebsd_arm_64"
targetPlatform "openbsd_x86_64"
targetPlatform "openbsd_arm_64"
sources {
c {
source {
@@ -108,6 +110,8 @@ model {
targetPlatform "mac_arm_64"
targetPlatform "freebsd_x86_64"
targetPlatform "freebsd_arm_64"
targetPlatform "openbsd_x86_64"
targetPlatform "openbsd_arm_64"
sources {
c {
source {

View File

@@ -49,6 +49,10 @@ model {
gcc(Gcc).target(current)
clang(Clang).target(current)
}
if (isOpenBSD(current)) {
gcc(Gcc).target(current)
clang(Clang).target(current)
}
if (isWindows(current) && VISUAL_STUDIO_INSTALL_DIR) {
// https://github.com/gradle/gradle-native/issues/617#issuecomment-575735288
visualCpp(VisualCpp) {

View File

@@ -27,7 +27,9 @@ project.ext.PLATFORMS = [
[name: "mac_x86_64", os: "osx", arch: "x86_64"],
[name: "mac_arm_64", os: "osx", arch: "arm64"],
[name: "freebsd_x86_64", os: "freebsd", arch: "x86_64"],
[name: "freebsd_arm_64", os: "freebsd", arch: "arm64"]
[name: "freebsd_arm_64", os: "freebsd", arch: "arm64"],
[name: "openbsd_x86_64", os: "openbsd", arch: "x86_64"],
[name: "openbsd_arm_64", os: "openbsd", arch: "arm64"]
]
/*********************************************************************************
@@ -57,6 +59,9 @@ ext.getCurrentPlatformName = {
case ~/FreeBSD.*/:
os = "freebsd"
break
case ~/OpenBSD.*/:
os = "openbsd"
break
default:
throw new GradleException("Unrecognized platform operating system: $os")
}
@@ -132,6 +137,20 @@ ext.isCurrentFreeBSD = {
return isFreeBSD(getCurrentPlatformName())
}
/*********************************************************************************
* Returns true if the given platform is OpenBSD.
*********************************************************************************/
ext.isOpenBSD = { platform_name ->
return platform_name.startsWith("openbsd")
}
/*********************************************************************************
* Returns true if the current platform is OpenBSD.
*********************************************************************************/
ext.isCurrentOpenBSD = {
return isOpenBSD(getCurrentPlatformName())
}
/*********************************************************************************
* Returns true if the given platform is Windows.
*********************************************************************************/

View File

@@ -45,6 +45,8 @@ model {
targetPlatform "mac_arm_64"
targetPlatform "freebsd_x86_64"
targetPlatform "freebsd_arm_64"
targetPlatform "openbsd_x86_64"
targetPlatform "openbsd_arm_64"
sources {
cpp {
// NOTE: The bison/flex generated files are assumed to be up-to-date.
@@ -157,6 +159,8 @@ model {
targetPlatform "mac_arm_64"
targetPlatform "freebsd_x86_64"
targetPlatform "freebsd_arm_64"
targetPlatform "openbsd_x86_64"
targetPlatform "openbsd_arm_64"
sources {
cpp {
// NOTE: The bison/flex generated files are assumed to be up-to-date.

View File

@@ -35,6 +35,13 @@ ifeq ($(OS),Darwin)
OSDIR=mac_x86_64
endif
ifeq ($(OS),OpenBSD)
ifeq ($(ARCH),amd64)
ARCH_TYPE=-m64
OSDIR=openbsd_x86_64
endif
endif
CXX=g++ -std=c++11
# Debug flags

View File

@@ -36,6 +36,8 @@ model {
targetPlatform "mac_arm_64"
targetPlatform "freebsd_x86_64"
targetPlatform "freebsd_arm_64"
targetPlatform "openbsd_x86_64"
targetPlatform "openbsd_arm_64"
sources {
c {

View File

@@ -4,9 +4,9 @@
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*
* http://www.apache.org/licenses/LICENSE-2.0
*
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -80,6 +80,16 @@ public enum Platform {
*/
FREEBSD_ARM_64(OperatingSystem.FREE_BSD, Architecture.ARM_64, "freebsd_arm_64", ".so", ""),
/**
* Identifies a OpenBSD x86 64-bit OS.
*/
OPENBSD_X86_64(OperatingSystem.OPEN_BSD, Architecture.X86_64, "openbsd_x86_64", ".so", ""),
/**
* Identifies a OpenBSD ARM 64-bit OS.
*/
OPENBSD_ARM_64(OperatingSystem.OPEN_BSD, Architecture.ARM_64, "openbsd_arm_64", ".so", ""),
/**
* Identifies an unsupported OS.
*/
@@ -234,6 +244,11 @@ public enum Platform {
paths.add("/System/Cryptexes/OS/System/Library/dyld/dyld_shared_cache_x86_64");
paths.add("/System/Cryptexes/OS/System/Library/dyld/dyld_shared_cache_x86_64h");
}
else if (operatingSystem == OperatingSystem.OPEN_BSD) {
paths.add("/usr/lib");
paths.add("/usr/X11R6/lib");
paths.add("/usr/local/lib");
}
else if (CURRENT_PLATFORM == WIN_X86_64) {
String windir = System.getenv("SystemRoot");
if (windir != null) {

View File

@@ -4,9 +4,9 @@
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*
* http://www.apache.org/licenses/LICENSE-2.0
*
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -20,6 +20,7 @@ public enum OperatingSystem {
LINUX("Linux"),
MAC_OS_X("Mac OS X"),
FREE_BSD("FreeBSD"),
OPEN_BSD("OpenBSD"),
UNSUPPORTED("Unsupported Operating System");
/**

View File

@@ -218,6 +218,7 @@ public class ApplicationUtilities {
case WINDOWS -> new File(getEnvFile("LOCALAPPDATA", true), appName);
case LINUX -> new File("/var/tmp/" + userDirName);
case FREE_BSD -> new File("/var/tmp/" + userDirName);
case OPEN_BSD -> new File("/var/tmp/" + userDirName);
case MAC_OS_X -> new File("/var/tmp/" + userDirName);
default -> throw new FileNotFoundException(
"Failed to find the user cache directory: Unsupported operating system.");
@@ -275,6 +276,7 @@ public class ApplicationUtilities {
case WINDOWS -> new File(getEnvFile("APPDATA", true), versionedSubdir);
case LINUX -> new File(userHomeDir, ".config/" + versionedSubdir);
case FREE_BSD -> new File(userHomeDir, ".config/" + versionedSubdir);
case OPEN_BSD -> new File(userHomeDir, ".config/" + versionedSubdir);
case MAC_OS_X -> new File(userHomeDir, "Library/" + versionedSubdir);
default -> throw new FileNotFoundException(
"Failed to find the user settings directory: Unsupported operating system.");

View File

@@ -453,6 +453,7 @@ public class AppConfig {
new File(localAppDataDirPath, appName + "/" + userSettingsDirName);
break;
case LINUX:
case OPEN_BSD:
userSettingsDir =
new File(userHomeDir, ".config/" + appName + "/" + userSettingsDirName);
break;

View File

@@ -36,7 +36,7 @@ public abstract class JavaFinder {
* The different supported platforms (operating systems).
*/
public enum Platform {
WINDOWS, MACOS, LINUX;
WINDOWS, MACOS, LINUX, OPEN_BSD;
}
/**
@@ -54,6 +54,9 @@ public abstract class JavaFinder {
if (os.contains("mac")) {
return Platform.MACOS;
}
if (os.contains("openbsd")) {
return Platform.OPEN_BSD;
}
}
return Platform.LINUX;
}
@@ -69,6 +72,8 @@ public abstract class JavaFinder {
return new WindowsJavaFinder();
case MACOS:
return new MacJavaFinder();
case OPEN_BSD:
return new OpenBSDJavaFinder();
case LINUX:
default:
return new LinuxJavaFinder();

View File

@@ -0,0 +1,38 @@
/* ###
* IP: GHIDRA
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ghidra.launch;
import java.io.File;
import java.util.*;
/**
* Class responsible for finding Java installations on an OpenBSD system.
*/
public class OpenBSDJavaFinder extends LinuxJavaFinder {
@Override
protected List<File> getJavaRootInstallDirs() {
File localdir = new File("/usr/local");
File[] filteredFiles = localdir.listFiles((dir, name) ->
name.toLowerCase().startsWith("jdk-")
);
return filteredFiles != null
? new ArrayList<>(Arrays.asList(filteredFiles))
: new ArrayList<>();
}
}

View File

@@ -203,6 +203,8 @@ Ghidra supports running on the following additional platforms with user-built na
* Linux ARM 64-bit
* FreeBSD x86 64-bit (no debugger support)
* FreeBSD ARM 64-bit (no debugger support)
* OpenBSD x86 64-bit (no debugger support)
* OpenBSD ARM 64-bit (no debugger support)
For supported systems where native binaries have not been supplied, or those that are supplied fail
to run properly, it may be necessary to build the native Ghidra binaries. In order to build native
@@ -214,7 +216,7 @@ binaries for your platform, you will need the following installed on your system
to the Internet, _Xcode_ (which includes the command tools) may be installed directly from the
App Store while _Command Line Tools for Xcode_ may be installed using the command:
`xcode-select --install`.
* __Linux/FreeBSD:__ the 64-bit versions of the following packages should installed:
* __Linux/FreeBSD/OpenBSD:__ the 64-bit versions of the following packages should installed:
* GCC or Clang
* make
* __Windows:__