Add initial cross-build support for OpenBSD - #125088

Merged
akoeplinger merged 19 commits into
dotnet:mainfrom
am11:feature/openbsd-port
Mar 4, 2026
Merged

Add initial cross-build support for OpenBSD#125088
akoeplinger merged 19 commits into
dotnet:mainfrom
am11:feature/openbsd-port

Conversation

@am11

@am11am11 commented Mar 3, 2026

Copy link
Copy Markdown
Member

Contributes to #124911
eng/common mirror dir's upstream PR dotnet/arcade#16561

@dotnet-policy-servicedotnet-policy-serviceBot added the community-contribution Indicates that the PR has been added by a community member label Mar 3, 2026
@am11am11 added os-openbsd OpenBSD OS, currently not officially supported and removed community-contribution Indicates that the PR has been added by a community member labels Mar 3, 2026
@am11
am11 requested review from akoeplinger and janvorliMarch 3, 2026 00:08
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/runtime-infrastructure
See info in area-owners.md if you want to be subscribed.

@am11

am11 commented Mar 3, 2026

Copy link
Copy Markdown
MemberAuthor

cc @sethjackson this is an incremental step. Currently failing at:

-- Performing Test HAVE_UDAT_STANDALONE_SHORTER_WEEKDAYS - Success
-- Looking for ucol_clone
-- Looking for ucol_clone - found
CMake Error at System.Net.Security.Native/extra_libs.cmake:11 (message):
Cannot find libgssapi and System.Net.Security.Native cannot build without
it. Try installing heimdal (or the appropriate package for your platform)
Call Stack (most recent call first):
System.Net.Security.Native/CMakeLists.txt:12 (append_extra_security_libs)

Probably needs an include directory reference etc. but this is to get cross-build rolling and give you an idea how it went with other platform ports.

@sethjackson

Copy link
Copy Markdown
Contributor

I got stuck on the Heimdal stuff natively too. Am a bit unsure how to fix it properly.

I have to pass this stuff to CMake to get it to "work":

-DHeimdalGssApi=ON -DCMAKE_HAVE_HEIMDAL_HEADERS=true -DCMAKE_C_FLAGS=-I/usr/local/heimdal/include

I've tried so many different combos of CMAKE_PREFIX_PATH, CMAKE_INCLUDE_PATH, etc. and nothing works.

@am11

am11 commented Mar 3, 2026

Copy link
Copy Markdown
MemberAuthor

Yes, it's a bit tricky. Usually cmake stuff can be figured out by looking in cmake log files; in this case, it's at: artifacts/obj/native/openbsd-x64-Debug/CMakeFiles/CMakeConfigureLog.yaml

We will eventually figure it out step by step. I'll have some time over the weekend, will take a look.

@sethjackson

Copy link
Copy Markdown
Contributor

So that's where the log is at! Thanks! I was struggling trying to figure out where to look so I could debug. I was mostly looking at the .txt files heh 😬 I should also have some time this week/weekend and will look as well but I will admit to not having deep CMake knowledge.

Comment threadeng/native/configurecompiler.cmake Outdated
Comment threadeng/native/configurecompiler.cmake Outdated
Comment threadsrc/native/libs/configure.cmake Outdated
@am11
am11 requested a review from sethjacksonMarch 3, 2026 13:17
Comment threadsrc/native/libs/CMakeLists.txt Outdated
Comment threadsrc/coreclr/pal/src/CMakeLists.txt
Comment threadsrc/coreclr/pal/src/configure.cmake Outdated
@am11

am11 commented Mar 3, 2026

Copy link
Copy Markdown
MemberAuthor

I haven’t tested -lunwind backtracking (OS-level unwinding) yet, but I plan to try it tonight.

On OpenBSD, there appears to be a system-provided unwinder via libunwind.h, though there is no libunwind.so. Hopefully the necessary functionality is available through libc. In the worst case, we may need to port HP libunwind (https://github.com/libunwind/libunwind) and update the shadow copy in this repository at src/native/external/libunwind which would be an entire project on its own.

That said, we are also working to reduce our reliance on OS-level unwinding. If that effort succeeds, the requirement to port libunwind to new platforms should eventually become unnecessary.

@sethjackson

Copy link
Copy Markdown
Contributor

I will also pull in the changes tonight and try as well. The only thing I wasn't super sure about here is the register patterns. I'm hoping they are the same as FreeBSD. I know the ptrace() definition will work though.

Comment threadsrc/native/corehost/apphost/static/configure.cmake
Comment threadsrc/coreclr/pal/src/CMakeLists.txt
@sethjackson

Copy link
Copy Markdown
Contributor

One other thing I had to do in my host build is:

-DOPENSSL_CRYPTO_LIBRARY=/usr/local/lib/eopenssl35/libcrypto.so.37.0 -DOPENSSL_SSL_LIBRARY=/usr/local/lib/eopenssl35/libssl.so.37.0 -DOPENSSL_INCLUDE_DIR=/usr/local/include/eopenssl35

Not entirely sure how to get this working with cross builds because we'd have to hardcode eopenssl35 and the so names...

The above will use the OpenSSL library from ports which is API compatible with what is needed to build. The build doesn't work with LibreSSL which is what is found by default.

@am11

am11 commented Mar 4, 2026

Copy link
Copy Markdown
MemberAuthor

@sethjackson, it turned out OpenBSD doesn't have unwinding APIs we require (unw_step) and it needs https://github.com/libunwind/libunwind port. It's a non-trivial amount of work.

@akoeplinger, lets merge this initial patch, still many incomplete pieces but PR's intention is to set the course.

@am11
am11 requested a review from janvorliMarch 4, 2026 07:35
@akoeplinger

Copy link
Copy Markdown
Member

/ba-g unrelated infra timeout

@akoeplinger
akoeplinger merged commit 4417a32 into dotnet:mainMar 4, 2026
170 of 173 checks passed
@am11
am11 deleted the feature/openbsd-port branch March 4, 2026 16:40
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Apr 4, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Infrastructureos-openbsdOpenBSD OS, currently not officially supported

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants

@am11@sethjackson@akoeplinger@janvorli
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Add initial cross-build support for OpenBSD - #125088

Merged
akoeplinger merged 19 commits into
dotnet:mainfrom
am11:feature/openbsd-port
Mar 4, 2026
Merged

Add initial cross-build support for OpenBSD#125088
akoeplinger merged 19 commits into
dotnet:mainfrom
am11:feature/openbsd-port

Conversation

@am11

@am11am11 commented Mar 3, 2026

Copy link
Copy Markdown
Member

Contributes to #124911
eng/common mirror dir's upstream PR dotnet/arcade#16561

@dotnet-policy-servicedotnet-policy-serviceBot added the community-contribution Indicates that the PR has been added by a community member label Mar 3, 2026
@am11am11 added os-openbsd OpenBSD OS, currently not officially supported and removed community-contribution Indicates that the PR has been added by a community member labels Mar 3, 2026
@am11
am11 requested review from akoeplinger and janvorliMarch 3, 2026 00:08
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/runtime-infrastructure
See info in area-owners.md if you want to be subscribed.

@am11

am11 commented Mar 3, 2026

Copy link
Copy Markdown
MemberAuthor

cc @sethjackson this is an incremental step. Currently failing at:

-- Performing Test HAVE_UDAT_STANDALONE_SHORTER_WEEKDAYS - Success
-- Looking for ucol_clone
-- Looking for ucol_clone - found
CMake Error at System.Net.Security.Native/extra_libs.cmake:11 (message):
Cannot find libgssapi and System.Net.Security.Native cannot build without
it. Try installing heimdal (or the appropriate package for your platform)
Call Stack (most recent call first):
System.Net.Security.Native/CMakeLists.txt:12 (append_extra_security_libs)

Probably needs an include directory reference etc. but this is to get cross-build rolling and give you an idea how it went with other platform ports.

@sethjackson

Copy link
Copy Markdown
Contributor

I got stuck on the Heimdal stuff natively too. Am a bit unsure how to fix it properly.

I have to pass this stuff to CMake to get it to "work":

-DHeimdalGssApi=ON -DCMAKE_HAVE_HEIMDAL_HEADERS=true -DCMAKE_C_FLAGS=-I/usr/local/heimdal/include

I've tried so many different combos of CMAKE_PREFIX_PATH, CMAKE_INCLUDE_PATH, etc. and nothing works.

@am11

am11 commented Mar 3, 2026

Copy link
Copy Markdown
MemberAuthor

Yes, it's a bit tricky. Usually cmake stuff can be figured out by looking in cmake log files; in this case, it's at: artifacts/obj/native/openbsd-x64-Debug/CMakeFiles/CMakeConfigureLog.yaml

We will eventually figure it out step by step. I'll have some time over the weekend, will take a look.

@sethjackson

Copy link
Copy Markdown
Contributor

So that's where the log is at! Thanks! I was struggling trying to figure out where to look so I could debug. I was mostly looking at the .txt files heh 😬 I should also have some time this week/weekend and will look as well but I will admit to not having deep CMake knowledge.

Comment threadeng/native/configurecompiler.cmake Outdated
Comment threadeng/native/configurecompiler.cmake Outdated
Comment threadsrc/native/libs/configure.cmake Outdated
@am11
am11 requested a review from sethjacksonMarch 3, 2026 13:17
Comment threadsrc/native/libs/CMakeLists.txt Outdated
Comment threadsrc/coreclr/pal/src/CMakeLists.txt
Comment threadsrc/coreclr/pal/src/configure.cmake Outdated
@am11

am11 commented Mar 3, 2026

Copy link
Copy Markdown
MemberAuthor

I haven’t tested -lunwind backtracking (OS-level unwinding) yet, but I plan to try it tonight.

On OpenBSD, there appears to be a system-provided unwinder via libunwind.h, though there is no libunwind.so. Hopefully the necessary functionality is available through libc. In the worst case, we may need to port HP libunwind (https://github.com/libunwind/libunwind) and update the shadow copy in this repository at src/native/external/libunwind which would be an entire project on its own.

That said, we are also working to reduce our reliance on OS-level unwinding. If that effort succeeds, the requirement to port libunwind to new platforms should eventually become unnecessary.

@sethjackson

Copy link
Copy Markdown
Contributor

I will also pull in the changes tonight and try as well. The only thing I wasn't super sure about here is the register patterns. I'm hoping they are the same as FreeBSD. I know the ptrace() definition will work though.

Comment threadsrc/native/corehost/apphost/static/configure.cmake
Comment threadsrc/coreclr/pal/src/CMakeLists.txt
@sethjackson

Copy link
Copy Markdown
Contributor

One other thing I had to do in my host build is:

-DOPENSSL_CRYPTO_LIBRARY=/usr/local/lib/eopenssl35/libcrypto.so.37.0 -DOPENSSL_SSL_LIBRARY=/usr/local/lib/eopenssl35/libssl.so.37.0 -DOPENSSL_INCLUDE_DIR=/usr/local/include/eopenssl35

Not entirely sure how to get this working with cross builds because we'd have to hardcode eopenssl35 and the so names...

The above will use the OpenSSL library from ports which is API compatible with what is needed to build. The build doesn't work with LibreSSL which is what is found by default.

@am11

am11 commented Mar 4, 2026

Copy link
Copy Markdown
MemberAuthor

@sethjackson, it turned out OpenBSD doesn't have unwinding APIs we require (unw_step) and it needs https://github.com/libunwind/libunwind port. It's a non-trivial amount of work.

@akoeplinger, lets merge this initial patch, still many incomplete pieces but PR's intention is to set the course.

@am11
am11 requested a review from janvorliMarch 4, 2026 07:35
@akoeplinger

Copy link
Copy Markdown
Member

/ba-g unrelated infra timeout

@akoeplinger
akoeplinger merged commit 4417a32 into dotnet:mainMar 4, 2026
170 of 173 checks passed
@am11
am11 deleted the feature/openbsd-port branch March 4, 2026 16:40
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Apr 4, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Infrastructureos-openbsdOpenBSD OS, currently not officially supported

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants

@am11@sethjackson@akoeplinger@janvorli
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add initial cross-build support for OpenBSD - #125088

Merged
akoeplinger merged 19 commits into
dotnet:mainfrom
am11:feature/openbsd-port
Mar 4, 2026
Merged

Add initial cross-build support for OpenBSD#125088
akoeplinger merged 19 commits into
dotnet:mainfrom
am11:feature/openbsd-port

Conversation

@am11

@am11am11 commented Mar 3, 2026

Copy link
Copy Markdown
Member

Contributes to #124911
eng/common mirror dir's upstream PR dotnet/arcade#16561

@dotnet-policy-servicedotnet-policy-serviceBot added the community-contribution Indicates that the PR has been added by a community member label Mar 3, 2026
@am11am11 added os-openbsd OpenBSD OS, currently not officially supported and removed community-contribution Indicates that the PR has been added by a community member labels Mar 3, 2026
@am11
am11 requested review from akoeplinger and janvorliMarch 3, 2026 00:08
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/runtime-infrastructure
See info in area-owners.md if you want to be subscribed.

@am11

am11 commented Mar 3, 2026

Copy link
Copy Markdown
MemberAuthor

cc @sethjackson this is an incremental step. Currently failing at:

-- Performing Test HAVE_UDAT_STANDALONE_SHORTER_WEEKDAYS - Success
-- Looking for ucol_clone
-- Looking for ucol_clone - found
CMake Error at System.Net.Security.Native/extra_libs.cmake:11 (message):
Cannot find libgssapi and System.Net.Security.Native cannot build without
it. Try installing heimdal (or the appropriate package for your platform)
Call Stack (most recent call first):
System.Net.Security.Native/CMakeLists.txt:12 (append_extra_security_libs)

Probably needs an include directory reference etc. but this is to get cross-build rolling and give you an idea how it went with other platform ports.

@sethjackson

Copy link
Copy Markdown
Contributor

I got stuck on the Heimdal stuff natively too. Am a bit unsure how to fix it properly.

I have to pass this stuff to CMake to get it to "work":

-DHeimdalGssApi=ON -DCMAKE_HAVE_HEIMDAL_HEADERS=true -DCMAKE_C_FLAGS=-I/usr/local/heimdal/include

I've tried so many different combos of CMAKE_PREFIX_PATH, CMAKE_INCLUDE_PATH, etc. and nothing works.

@am11

am11 commented Mar 3, 2026

Copy link
Copy Markdown
MemberAuthor

Yes, it's a bit tricky. Usually cmake stuff can be figured out by looking in cmake log files; in this case, it's at: artifacts/obj/native/openbsd-x64-Debug/CMakeFiles/CMakeConfigureLog.yaml

We will eventually figure it out step by step. I'll have some time over the weekend, will take a look.

@sethjackson

Copy link
Copy Markdown
Contributor

So that's where the log is at! Thanks! I was struggling trying to figure out where to look so I could debug. I was mostly looking at the .txt files heh 😬 I should also have some time this week/weekend and will look as well but I will admit to not having deep CMake knowledge.

Comment threadeng/native/configurecompiler.cmake Outdated
Comment threadeng/native/configurecompiler.cmake Outdated
Comment threadsrc/native/libs/configure.cmake Outdated
@am11
am11 requested a review from sethjacksonMarch 3, 2026 13:17
Comment threadsrc/native/libs/CMakeLists.txt Outdated
Comment threadsrc/coreclr/pal/src/CMakeLists.txt
Comment threadsrc/coreclr/pal/src/configure.cmake Outdated
@am11

am11 commented Mar 3, 2026

Copy link
Copy Markdown
MemberAuthor

I haven’t tested -lunwind backtracking (OS-level unwinding) yet, but I plan to try it tonight.

On OpenBSD, there appears to be a system-provided unwinder via libunwind.h, though there is no libunwind.so. Hopefully the necessary functionality is available through libc. In the worst case, we may need to port HP libunwind (https://github.com/libunwind/libunwind) and update the shadow copy in this repository at src/native/external/libunwind which would be an entire project on its own.

That said, we are also working to reduce our reliance on OS-level unwinding. If that effort succeeds, the requirement to port libunwind to new platforms should eventually become unnecessary.

@sethjackson

Copy link
Copy Markdown
Contributor

I will also pull in the changes tonight and try as well. The only thing I wasn't super sure about here is the register patterns. I'm hoping they are the same as FreeBSD. I know the ptrace() definition will work though.

Comment threadsrc/native/corehost/apphost/static/configure.cmake
Comment threadsrc/coreclr/pal/src/CMakeLists.txt
@sethjackson

Copy link
Copy Markdown
Contributor

One other thing I had to do in my host build is:

-DOPENSSL_CRYPTO_LIBRARY=/usr/local/lib/eopenssl35/libcrypto.so.37.0 -DOPENSSL_SSL_LIBRARY=/usr/local/lib/eopenssl35/libssl.so.37.0 -DOPENSSL_INCLUDE_DIR=/usr/local/include/eopenssl35

Not entirely sure how to get this working with cross builds because we'd have to hardcode eopenssl35 and the so names...

The above will use the OpenSSL library from ports which is API compatible with what is needed to build. The build doesn't work with LibreSSL which is what is found by default.

@am11

am11 commented Mar 4, 2026

Copy link
Copy Markdown
MemberAuthor

@sethjackson, it turned out OpenBSD doesn't have unwinding APIs we require (unw_step) and it needs https://github.com/libunwind/libunwind port. It's a non-trivial amount of work.

@akoeplinger, lets merge this initial patch, still many incomplete pieces but PR's intention is to set the course.

@am11
am11 requested a review from janvorliMarch 4, 2026 07:35
@akoeplinger

Copy link
Copy Markdown
Member

/ba-g unrelated infra timeout

@akoeplinger
akoeplinger merged commit 4417a32 into dotnet:mainMar 4, 2026
170 of 173 checks passed
@am11
am11 deleted the feature/openbsd-port branch March 4, 2026 16:40
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Apr 4, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Infrastructureos-openbsdOpenBSD OS, currently not officially supported

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants

@am11@sethjackson@akoeplinger@janvorli
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add initial cross-build support for OpenBSD - #125088

Merged
akoeplinger merged 19 commits into
dotnet:mainfrom
am11:feature/openbsd-port
Mar 4, 2026
Merged

Add initial cross-build support for OpenBSD#125088
akoeplinger merged 19 commits into
dotnet:mainfrom
am11:feature/openbsd-port

Conversation

@am11

@am11am11 commented Mar 3, 2026

Copy link
Copy Markdown
Member

Contributes to #124911
eng/common mirror dir's upstream PR dotnet/arcade#16561

@dotnet-policy-servicedotnet-policy-serviceBot added the community-contribution Indicates that the PR has been added by a community member label Mar 3, 2026
@am11am11 added os-openbsd OpenBSD OS, currently not officially supported and removed community-contribution Indicates that the PR has been added by a community member labels Mar 3, 2026
@am11
am11 requested review from akoeplinger and janvorliMarch 3, 2026 00:08
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/runtime-infrastructure
See info in area-owners.md if you want to be subscribed.

@am11

am11 commented Mar 3, 2026

Copy link
Copy Markdown
MemberAuthor

cc @sethjackson this is an incremental step. Currently failing at:

-- Performing Test HAVE_UDAT_STANDALONE_SHORTER_WEEKDAYS - Success
-- Looking for ucol_clone
-- Looking for ucol_clone - found
CMake Error at System.Net.Security.Native/extra_libs.cmake:11 (message):
Cannot find libgssapi and System.Net.Security.Native cannot build without
it. Try installing heimdal (or the appropriate package for your platform)
Call Stack (most recent call first):
System.Net.Security.Native/CMakeLists.txt:12 (append_extra_security_libs)

Probably needs an include directory reference etc. but this is to get cross-build rolling and give you an idea how it went with other platform ports.

@sethjackson

Copy link
Copy Markdown
Contributor

I got stuck on the Heimdal stuff natively too. Am a bit unsure how to fix it properly.

I have to pass this stuff to CMake to get it to "work":

-DHeimdalGssApi=ON -DCMAKE_HAVE_HEIMDAL_HEADERS=true -DCMAKE_C_FLAGS=-I/usr/local/heimdal/include

I've tried so many different combos of CMAKE_PREFIX_PATH, CMAKE_INCLUDE_PATH, etc. and nothing works.

@am11

am11 commented Mar 3, 2026

Copy link
Copy Markdown
MemberAuthor

Yes, it's a bit tricky. Usually cmake stuff can be figured out by looking in cmake log files; in this case, it's at: artifacts/obj/native/openbsd-x64-Debug/CMakeFiles/CMakeConfigureLog.yaml

We will eventually figure it out step by step. I'll have some time over the weekend, will take a look.

@sethjackson

Copy link
Copy Markdown
Contributor

So that's where the log is at! Thanks! I was struggling trying to figure out where to look so I could debug. I was mostly looking at the .txt files heh 😬 I should also have some time this week/weekend and will look as well but I will admit to not having deep CMake knowledge.

Comment threadeng/native/configurecompiler.cmake Outdated
Comment threadeng/native/configurecompiler.cmake Outdated
Comment threadsrc/native/libs/configure.cmake Outdated
@am11
am11 requested a review from sethjacksonMarch 3, 2026 13:17
Comment threadsrc/native/libs/CMakeLists.txt Outdated
Comment threadsrc/coreclr/pal/src/CMakeLists.txt
Comment threadsrc/coreclr/pal/src/configure.cmake Outdated
@am11

am11 commented Mar 3, 2026

Copy link
Copy Markdown
MemberAuthor

I haven’t tested -lunwind backtracking (OS-level unwinding) yet, but I plan to try it tonight.

On OpenBSD, there appears to be a system-provided unwinder via libunwind.h, though there is no libunwind.so. Hopefully the necessary functionality is available through libc. In the worst case, we may need to port HP libunwind (https://github.com/libunwind/libunwind) and update the shadow copy in this repository at src/native/external/libunwind which would be an entire project on its own.

That said, we are also working to reduce our reliance on OS-level unwinding. If that effort succeeds, the requirement to port libunwind to new platforms should eventually become unnecessary.

@sethjackson

Copy link
Copy Markdown
Contributor

I will also pull in the changes tonight and try as well. The only thing I wasn't super sure about here is the register patterns. I'm hoping they are the same as FreeBSD. I know the ptrace() definition will work though.

Comment threadsrc/native/corehost/apphost/static/configure.cmake
Comment threadsrc/coreclr/pal/src/CMakeLists.txt
@sethjackson

Copy link
Copy Markdown
Contributor

One other thing I had to do in my host build is:

-DOPENSSL_CRYPTO_LIBRARY=/usr/local/lib/eopenssl35/libcrypto.so.37.0 -DOPENSSL_SSL_LIBRARY=/usr/local/lib/eopenssl35/libssl.so.37.0 -DOPENSSL_INCLUDE_DIR=/usr/local/include/eopenssl35

Not entirely sure how to get this working with cross builds because we'd have to hardcode eopenssl35 and the so names...

The above will use the OpenSSL library from ports which is API compatible with what is needed to build. The build doesn't work with LibreSSL which is what is found by default.

@am11

am11 commented Mar 4, 2026

Copy link
Copy Markdown
MemberAuthor

@sethjackson, it turned out OpenBSD doesn't have unwinding APIs we require (unw_step) and it needs https://github.com/libunwind/libunwind port. It's a non-trivial amount of work.

@akoeplinger, lets merge this initial patch, still many incomplete pieces but PR's intention is to set the course.

@am11
am11 requested a review from janvorliMarch 4, 2026 07:35
@akoeplinger

Copy link
Copy Markdown
Member

/ba-g unrelated infra timeout

@akoeplinger
akoeplinger merged commit 4417a32 into dotnet:mainMar 4, 2026
170 of 173 checks passed
@am11
am11 deleted the feature/openbsd-port branch March 4, 2026 16:40
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Apr 4, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Infrastructureos-openbsdOpenBSD OS, currently not officially supported

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants

@am11@sethjackson@akoeplinger@janvorli
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Add initial cross-build support for OpenBSD - #125088

Merged
akoeplinger merged 19 commits into
dotnet:mainfrom
am11:feature/openbsd-port
Mar 4, 2026
Merged

Add initial cross-build support for OpenBSD#125088
akoeplinger merged 19 commits into
dotnet:mainfrom
am11:feature/openbsd-port

Conversation

@am11

@am11am11 commented Mar 3, 2026

Copy link
Copy Markdown
Member

Contributes to #124911
eng/common mirror dir's upstream PR dotnet/arcade#16561

@dotnet-policy-servicedotnet-policy-serviceBot added the community-contribution Indicates that the PR has been added by a community member label Mar 3, 2026
@am11am11 added os-openbsd OpenBSD OS, currently not officially supported and removed community-contribution Indicates that the PR has been added by a community member labels Mar 3, 2026
@am11
am11 requested review from akoeplinger and janvorliMarch 3, 2026 00:08
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/runtime-infrastructure
See info in area-owners.md if you want to be subscribed.

@am11

am11 commented Mar 3, 2026

Copy link
Copy Markdown
MemberAuthor

cc @sethjackson this is an incremental step. Currently failing at:

-- Performing Test HAVE_UDAT_STANDALONE_SHORTER_WEEKDAYS - Success
-- Looking for ucol_clone
-- Looking for ucol_clone - found
CMake Error at System.Net.Security.Native/extra_libs.cmake:11 (message):
Cannot find libgssapi and System.Net.Security.Native cannot build without
it. Try installing heimdal (or the appropriate package for your platform)
Call Stack (most recent call first):
System.Net.Security.Native/CMakeLists.txt:12 (append_extra_security_libs)

Probably needs an include directory reference etc. but this is to get cross-build rolling and give you an idea how it went with other platform ports.

@sethjackson

Copy link
Copy Markdown
Contributor

I got stuck on the Heimdal stuff natively too. Am a bit unsure how to fix it properly.

I have to pass this stuff to CMake to get it to "work":

-DHeimdalGssApi=ON -DCMAKE_HAVE_HEIMDAL_HEADERS=true -DCMAKE_C_FLAGS=-I/usr/local/heimdal/include

I've tried so many different combos of CMAKE_PREFIX_PATH, CMAKE_INCLUDE_PATH, etc. and nothing works.

@am11

am11 commented Mar 3, 2026

Copy link
Copy Markdown
MemberAuthor

Yes, it's a bit tricky. Usually cmake stuff can be figured out by looking in cmake log files; in this case, it's at: artifacts/obj/native/openbsd-x64-Debug/CMakeFiles/CMakeConfigureLog.yaml

We will eventually figure it out step by step. I'll have some time over the weekend, will take a look.

@sethjackson

Copy link
Copy Markdown
Contributor

So that's where the log is at! Thanks! I was struggling trying to figure out where to look so I could debug. I was mostly looking at the .txt files heh 😬 I should also have some time this week/weekend and will look as well but I will admit to not having deep CMake knowledge.

Comment threadeng/native/configurecompiler.cmake Outdated
Comment threadeng/native/configurecompiler.cmake Outdated
Comment threadsrc/native/libs/configure.cmake Outdated
@am11
am11 requested a review from sethjacksonMarch 3, 2026 13:17
Comment threadsrc/native/libs/CMakeLists.txt Outdated
Comment threadsrc/coreclr/pal/src/CMakeLists.txt
Comment threadsrc/coreclr/pal/src/configure.cmake Outdated
@am11

am11 commented Mar 3, 2026

Copy link
Copy Markdown
MemberAuthor

I haven’t tested -lunwind backtracking (OS-level unwinding) yet, but I plan to try it tonight.

On OpenBSD, there appears to be a system-provided unwinder via libunwind.h, though there is no libunwind.so. Hopefully the necessary functionality is available through libc. In the worst case, we may need to port HP libunwind (https://github.com/libunwind/libunwind) and update the shadow copy in this repository at src/native/external/libunwind which would be an entire project on its own.

That said, we are also working to reduce our reliance on OS-level unwinding. If that effort succeeds, the requirement to port libunwind to new platforms should eventually become unnecessary.

@sethjackson

Copy link
Copy Markdown
Contributor

I will also pull in the changes tonight and try as well. The only thing I wasn't super sure about here is the register patterns. I'm hoping they are the same as FreeBSD. I know the ptrace() definition will work though.

Comment threadsrc/native/corehost/apphost/static/configure.cmake
Comment threadsrc/coreclr/pal/src/CMakeLists.txt
@sethjackson

Copy link
Copy Markdown
Contributor

One other thing I had to do in my host build is:

-DOPENSSL_CRYPTO_LIBRARY=/usr/local/lib/eopenssl35/libcrypto.so.37.0 -DOPENSSL_SSL_LIBRARY=/usr/local/lib/eopenssl35/libssl.so.37.0 -DOPENSSL_INCLUDE_DIR=/usr/local/include/eopenssl35

Not entirely sure how to get this working with cross builds because we'd have to hardcode eopenssl35 and the so names...

The above will use the OpenSSL library from ports which is API compatible with what is needed to build. The build doesn't work with LibreSSL which is what is found by default.

@am11

am11 commented Mar 4, 2026

Copy link
Copy Markdown
MemberAuthor

@sethjackson, it turned out OpenBSD doesn't have unwinding APIs we require (unw_step) and it needs https://github.com/libunwind/libunwind port. It's a non-trivial amount of work.

@akoeplinger, lets merge this initial patch, still many incomplete pieces but PR's intention is to set the course.

@am11
am11 requested a review from janvorliMarch 4, 2026 07:35
@akoeplinger

Copy link
Copy Markdown
Member

/ba-g unrelated infra timeout

@akoeplinger
akoeplinger merged commit 4417a32 into dotnet:mainMar 4, 2026
170 of 173 checks passed
@am11
am11 deleted the feature/openbsd-port branch March 4, 2026 16:40
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Apr 4, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Infrastructureos-openbsdOpenBSD OS, currently not officially supported

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants

@am11@sethjackson@akoeplinger@janvorli
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add initial cross-build support for OpenBSD - #125088

Merged
akoeplinger merged 19 commits into
dotnet:mainfrom
am11:feature/openbsd-port
Mar 4, 2026
Merged

Add initial cross-build support for OpenBSD#125088
akoeplinger merged 19 commits into
dotnet:mainfrom
am11:feature/openbsd-port

Conversation

@am11

@am11am11 commented Mar 3, 2026

Copy link
Copy Markdown
Member

Contributes to #124911
eng/common mirror dir's upstream PR dotnet/arcade#16561

@dotnet-policy-servicedotnet-policy-serviceBot added the community-contribution Indicates that the PR has been added by a community member label Mar 3, 2026
@am11am11 added os-openbsd OpenBSD OS, currently not officially supported and removed community-contribution Indicates that the PR has been added by a community member labels Mar 3, 2026
@am11
am11 requested review from akoeplinger and janvorliMarch 3, 2026 00:08
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/runtime-infrastructure
See info in area-owners.md if you want to be subscribed.

@am11

am11 commented Mar 3, 2026

Copy link
Copy Markdown
MemberAuthor

cc @sethjackson this is an incremental step. Currently failing at:

-- Performing Test HAVE_UDAT_STANDALONE_SHORTER_WEEKDAYS - Success
-- Looking for ucol_clone
-- Looking for ucol_clone - found
CMake Error at System.Net.Security.Native/extra_libs.cmake:11 (message):
Cannot find libgssapi and System.Net.Security.Native cannot build without
it. Try installing heimdal (or the appropriate package for your platform)
Call Stack (most recent call first):
System.Net.Security.Native/CMakeLists.txt:12 (append_extra_security_libs)

Probably needs an include directory reference etc. but this is to get cross-build rolling and give you an idea how it went with other platform ports.

@sethjackson

Copy link
Copy Markdown
Contributor

I got stuck on the Heimdal stuff natively too. Am a bit unsure how to fix it properly.

I have to pass this stuff to CMake to get it to "work":

-DHeimdalGssApi=ON -DCMAKE_HAVE_HEIMDAL_HEADERS=true -DCMAKE_C_FLAGS=-I/usr/local/heimdal/include

I've tried so many different combos of CMAKE_PREFIX_PATH, CMAKE_INCLUDE_PATH, etc. and nothing works.

@am11

am11 commented Mar 3, 2026

Copy link
Copy Markdown
MemberAuthor

Yes, it's a bit tricky. Usually cmake stuff can be figured out by looking in cmake log files; in this case, it's at: artifacts/obj/native/openbsd-x64-Debug/CMakeFiles/CMakeConfigureLog.yaml

We will eventually figure it out step by step. I'll have some time over the weekend, will take a look.

@sethjackson

Copy link
Copy Markdown
Contributor

So that's where the log is at! Thanks! I was struggling trying to figure out where to look so I could debug. I was mostly looking at the .txt files heh 😬 I should also have some time this week/weekend and will look as well but I will admit to not having deep CMake knowledge.

Comment threadeng/native/configurecompiler.cmake Outdated
Comment threadeng/native/configurecompiler.cmake Outdated
Comment threadsrc/native/libs/configure.cmake Outdated
@am11
am11 requested a review from sethjacksonMarch 3, 2026 13:17
Comment threadsrc/native/libs/CMakeLists.txt Outdated
Comment threadsrc/coreclr/pal/src/CMakeLists.txt
Comment threadsrc/coreclr/pal/src/configure.cmake Outdated
@am11

am11 commented Mar 3, 2026

Copy link
Copy Markdown
MemberAuthor

I haven’t tested -lunwind backtracking (OS-level unwinding) yet, but I plan to try it tonight.

On OpenBSD, there appears to be a system-provided unwinder via libunwind.h, though there is no libunwind.so. Hopefully the necessary functionality is available through libc. In the worst case, we may need to port HP libunwind (https://github.com/libunwind/libunwind) and update the shadow copy in this repository at src/native/external/libunwind which would be an entire project on its own.

That said, we are also working to reduce our reliance on OS-level unwinding. If that effort succeeds, the requirement to port libunwind to new platforms should eventually become unnecessary.

@sethjackson

Copy link
Copy Markdown
Contributor

I will also pull in the changes tonight and try as well. The only thing I wasn't super sure about here is the register patterns. I'm hoping they are the same as FreeBSD. I know the ptrace() definition will work though.

Comment threadsrc/native/corehost/apphost/static/configure.cmake
Comment threadsrc/coreclr/pal/src/CMakeLists.txt
@sethjackson

Copy link
Copy Markdown
Contributor

One other thing I had to do in my host build is:

-DOPENSSL_CRYPTO_LIBRARY=/usr/local/lib/eopenssl35/libcrypto.so.37.0 -DOPENSSL_SSL_LIBRARY=/usr/local/lib/eopenssl35/libssl.so.37.0 -DOPENSSL_INCLUDE_DIR=/usr/local/include/eopenssl35

Not entirely sure how to get this working with cross builds because we'd have to hardcode eopenssl35 and the so names...

The above will use the OpenSSL library from ports which is API compatible with what is needed to build. The build doesn't work with LibreSSL which is what is found by default.

@am11

am11 commented Mar 4, 2026

Copy link
Copy Markdown
MemberAuthor

@sethjackson, it turned out OpenBSD doesn't have unwinding APIs we require (unw_step) and it needs https://github.com/libunwind/libunwind port. It's a non-trivial amount of work.

@akoeplinger, lets merge this initial patch, still many incomplete pieces but PR's intention is to set the course.

@am11
am11 requested a review from janvorliMarch 4, 2026 07:35
@akoeplinger

Copy link
Copy Markdown
Member

/ba-g unrelated infra timeout

@akoeplinger
akoeplinger merged commit 4417a32 into dotnet:mainMar 4, 2026
170 of 173 checks passed
@am11
am11 deleted the feature/openbsd-port branch March 4, 2026 16:40
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Apr 4, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Infrastructureos-openbsdOpenBSD OS, currently not officially supported

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants

@am11@sethjackson@akoeplinger@janvorli
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add initial cross-build support for OpenBSD - #125088

Merged
akoeplinger merged 19 commits into
dotnet:mainfrom
am11:feature/openbsd-port
Mar 4, 2026
Merged

Add initial cross-build support for OpenBSD#125088
akoeplinger merged 19 commits into
dotnet:mainfrom
am11:feature/openbsd-port

Conversation

@am11

@am11am11 commented Mar 3, 2026

Copy link
Copy Markdown
Member

Contributes to #124911
eng/common mirror dir's upstream PR dotnet/arcade#16561

@dotnet-policy-servicedotnet-policy-serviceBot added the community-contribution Indicates that the PR has been added by a community member label Mar 3, 2026
@am11am11 added os-openbsd OpenBSD OS, currently not officially supported and removed community-contribution Indicates that the PR has been added by a community member labels Mar 3, 2026
@am11
am11 requested review from akoeplinger and janvorliMarch 3, 2026 00:08
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/runtime-infrastructure
See info in area-owners.md if you want to be subscribed.

@am11

am11 commented Mar 3, 2026

Copy link
Copy Markdown
MemberAuthor

cc @sethjackson this is an incremental step. Currently failing at:

-- Performing Test HAVE_UDAT_STANDALONE_SHORTER_WEEKDAYS - Success
-- Looking for ucol_clone
-- Looking for ucol_clone - found
CMake Error at System.Net.Security.Native/extra_libs.cmake:11 (message):
Cannot find libgssapi and System.Net.Security.Native cannot build without
it. Try installing heimdal (or the appropriate package for your platform)
Call Stack (most recent call first):
System.Net.Security.Native/CMakeLists.txt:12 (append_extra_security_libs)

Probably needs an include directory reference etc. but this is to get cross-build rolling and give you an idea how it went with other platform ports.

@sethjackson

Copy link
Copy Markdown
Contributor

I got stuck on the Heimdal stuff natively too. Am a bit unsure how to fix it properly.

I have to pass this stuff to CMake to get it to "work":

-DHeimdalGssApi=ON -DCMAKE_HAVE_HEIMDAL_HEADERS=true -DCMAKE_C_FLAGS=-I/usr/local/heimdal/include

I've tried so many different combos of CMAKE_PREFIX_PATH, CMAKE_INCLUDE_PATH, etc. and nothing works.

@am11

am11 commented Mar 3, 2026

Copy link
Copy Markdown
MemberAuthor

Yes, it's a bit tricky. Usually cmake stuff can be figured out by looking in cmake log files; in this case, it's at: artifacts/obj/native/openbsd-x64-Debug/CMakeFiles/CMakeConfigureLog.yaml

We will eventually figure it out step by step. I'll have some time over the weekend, will take a look.

@sethjackson

Copy link
Copy Markdown
Contributor

So that's where the log is at! Thanks! I was struggling trying to figure out where to look so I could debug. I was mostly looking at the .txt files heh 😬 I should also have some time this week/weekend and will look as well but I will admit to not having deep CMake knowledge.

Comment threadeng/native/configurecompiler.cmake Outdated
Comment threadeng/native/configurecompiler.cmake Outdated
Comment threadsrc/native/libs/configure.cmake Outdated
@am11
am11 requested a review from sethjacksonMarch 3, 2026 13:17
Comment threadsrc/native/libs/CMakeLists.txt Outdated
Comment threadsrc/coreclr/pal/src/CMakeLists.txt
Comment threadsrc/coreclr/pal/src/configure.cmake Outdated
@am11

am11 commented Mar 3, 2026

Copy link
Copy Markdown
MemberAuthor

I haven’t tested -lunwind backtracking (OS-level unwinding) yet, but I plan to try it tonight.

On OpenBSD, there appears to be a system-provided unwinder via libunwind.h, though there is no libunwind.so. Hopefully the necessary functionality is available through libc. In the worst case, we may need to port HP libunwind (https://github.com/libunwind/libunwind) and update the shadow copy in this repository at src/native/external/libunwind which would be an entire project on its own.

That said, we are also working to reduce our reliance on OS-level unwinding. If that effort succeeds, the requirement to port libunwind to new platforms should eventually become unnecessary.

@sethjackson

Copy link
Copy Markdown
Contributor

I will also pull in the changes tonight and try as well. The only thing I wasn't super sure about here is the register patterns. I'm hoping they are the same as FreeBSD. I know the ptrace() definition will work though.

Comment threadsrc/native/corehost/apphost/static/configure.cmake
Comment threadsrc/coreclr/pal/src/CMakeLists.txt
@sethjackson

Copy link
Copy Markdown
Contributor

One other thing I had to do in my host build is:

-DOPENSSL_CRYPTO_LIBRARY=/usr/local/lib/eopenssl35/libcrypto.so.37.0 -DOPENSSL_SSL_LIBRARY=/usr/local/lib/eopenssl35/libssl.so.37.0 -DOPENSSL_INCLUDE_DIR=/usr/local/include/eopenssl35

Not entirely sure how to get this working with cross builds because we'd have to hardcode eopenssl35 and the so names...

The above will use the OpenSSL library from ports which is API compatible with what is needed to build. The build doesn't work with LibreSSL which is what is found by default.

@am11

am11 commented Mar 4, 2026

Copy link
Copy Markdown
MemberAuthor

@sethjackson, it turned out OpenBSD doesn't have unwinding APIs we require (unw_step) and it needs https://github.com/libunwind/libunwind port. It's a non-trivial amount of work.

@akoeplinger, lets merge this initial patch, still many incomplete pieces but PR's intention is to set the course.

@am11
am11 requested a review from janvorliMarch 4, 2026 07:35
@akoeplinger

Copy link
Copy Markdown
Member

/ba-g unrelated infra timeout

@akoeplinger
akoeplinger merged commit 4417a32 into dotnet:mainMar 4, 2026
170 of 173 checks passed
@am11
am11 deleted the feature/openbsd-port branch March 4, 2026 16:40
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Apr 4, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Infrastructureos-openbsdOpenBSD OS, currently not officially supported

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants

@am11@sethjackson@akoeplinger@janvorli
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Add initial cross-build support for OpenBSD - #125088

Merged
akoeplinger merged 19 commits into
dotnet:mainfrom
am11:feature/openbsd-port
Mar 4, 2026
Merged

Add initial cross-build support for OpenBSD#125088
akoeplinger merged 19 commits into
dotnet:mainfrom
am11:feature/openbsd-port

Conversation

@am11

@am11am11 commented Mar 3, 2026

Copy link
Copy Markdown
Member

Contributes to #124911
eng/common mirror dir's upstream PR dotnet/arcade#16561

@dotnet-policy-servicedotnet-policy-serviceBot added the community-contribution Indicates that the PR has been added by a community member label Mar 3, 2026
@am11am11 added os-openbsd OpenBSD OS, currently not officially supported and removed community-contribution Indicates that the PR has been added by a community member labels Mar 3, 2026
@am11
am11 requested review from akoeplinger and janvorliMarch 3, 2026 00:08
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/runtime-infrastructure
See info in area-owners.md if you want to be subscribed.

@am11

am11 commented Mar 3, 2026

Copy link
Copy Markdown
MemberAuthor

cc @sethjackson this is an incremental step. Currently failing at:

-- Performing Test HAVE_UDAT_STANDALONE_SHORTER_WEEKDAYS - Success
-- Looking for ucol_clone
-- Looking for ucol_clone - found
CMake Error at System.Net.Security.Native/extra_libs.cmake:11 (message):
Cannot find libgssapi and System.Net.Security.Native cannot build without
it. Try installing heimdal (or the appropriate package for your platform)
Call Stack (most recent call first):
System.Net.Security.Native/CMakeLists.txt:12 (append_extra_security_libs)

Probably needs an include directory reference etc. but this is to get cross-build rolling and give you an idea how it went with other platform ports.

@sethjackson

Copy link
Copy Markdown
Contributor

I got stuck on the Heimdal stuff natively too. Am a bit unsure how to fix it properly.

I have to pass this stuff to CMake to get it to "work":

-DHeimdalGssApi=ON -DCMAKE_HAVE_HEIMDAL_HEADERS=true -DCMAKE_C_FLAGS=-I/usr/local/heimdal/include

I've tried so many different combos of CMAKE_PREFIX_PATH, CMAKE_INCLUDE_PATH, etc. and nothing works.

@am11

am11 commented Mar 3, 2026

Copy link
Copy Markdown
MemberAuthor

Yes, it's a bit tricky. Usually cmake stuff can be figured out by looking in cmake log files; in this case, it's at: artifacts/obj/native/openbsd-x64-Debug/CMakeFiles/CMakeConfigureLog.yaml

We will eventually figure it out step by step. I'll have some time over the weekend, will take a look.

@sethjackson

Copy link
Copy Markdown
Contributor

So that's where the log is at! Thanks! I was struggling trying to figure out where to look so I could debug. I was mostly looking at the .txt files heh 😬 I should also have some time this week/weekend and will look as well but I will admit to not having deep CMake knowledge.

Comment threadeng/native/configurecompiler.cmake Outdated
Comment threadeng/native/configurecompiler.cmake Outdated
Comment threadsrc/native/libs/configure.cmake Outdated
@am11
am11 requested a review from sethjacksonMarch 3, 2026 13:17
Comment threadsrc/native/libs/CMakeLists.txt Outdated
Comment threadsrc/coreclr/pal/src/CMakeLists.txt
Comment threadsrc/coreclr/pal/src/configure.cmake Outdated
@am11

am11 commented Mar 3, 2026

Copy link
Copy Markdown
MemberAuthor

I haven’t tested -lunwind backtracking (OS-level unwinding) yet, but I plan to try it tonight.

On OpenBSD, there appears to be a system-provided unwinder via libunwind.h, though there is no libunwind.so. Hopefully the necessary functionality is available through libc. In the worst case, we may need to port HP libunwind (https://github.com/libunwind/libunwind) and update the shadow copy in this repository at src/native/external/libunwind which would be an entire project on its own.

That said, we are also working to reduce our reliance on OS-level unwinding. If that effort succeeds, the requirement to port libunwind to new platforms should eventually become unnecessary.

@sethjackson

Copy link
Copy Markdown
Contributor

I will also pull in the changes tonight and try as well. The only thing I wasn't super sure about here is the register patterns. I'm hoping they are the same as FreeBSD. I know the ptrace() definition will work though.

Comment threadsrc/native/corehost/apphost/static/configure.cmake
Comment threadsrc/coreclr/pal/src/CMakeLists.txt
@sethjackson

Copy link
Copy Markdown
Contributor

One other thing I had to do in my host build is:

-DOPENSSL_CRYPTO_LIBRARY=/usr/local/lib/eopenssl35/libcrypto.so.37.0 -DOPENSSL_SSL_LIBRARY=/usr/local/lib/eopenssl35/libssl.so.37.0 -DOPENSSL_INCLUDE_DIR=/usr/local/include/eopenssl35

Not entirely sure how to get this working with cross builds because we'd have to hardcode eopenssl35 and the so names...

The above will use the OpenSSL library from ports which is API compatible with what is needed to build. The build doesn't work with LibreSSL which is what is found by default.

@am11

am11 commented Mar 4, 2026

Copy link
Copy Markdown
MemberAuthor

@sethjackson, it turned out OpenBSD doesn't have unwinding APIs we require (unw_step) and it needs https://github.com/libunwind/libunwind port. It's a non-trivial amount of work.

@akoeplinger, lets merge this initial patch, still many incomplete pieces but PR's intention is to set the course.

@am11
am11 requested a review from janvorliMarch 4, 2026 07:35
@akoeplinger

Copy link
Copy Markdown
Member

/ba-g unrelated infra timeout

@akoeplinger
akoeplinger merged commit 4417a32 into dotnet:mainMar 4, 2026
170 of 173 checks passed
@am11
am11 deleted the feature/openbsd-port branch March 4, 2026 16:40
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Apr 4, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Infrastructureos-openbsdOpenBSD OS, currently not officially supported

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants

@am11@sethjackson@akoeplinger@janvorli