Adding FreeBSD build support.#460
Adding FreeBSD build support.#460LadySerenaKitty wants to merge 1 commit intoDiligentGraphics:masterfrom
Conversation
BuildTools/FormatValidation/validate_format_freebsd_implementation.sh
Outdated
Show resolved
Hide resolved
| #define __vectorcall | ||
| #define __thiscall | ||
| #ifndef PLATFORM_FREEBSD | ||
| #define __fastcall |
There was a problem hiding this comment.
Is __fastcall a recognized keyword when compiling on FreeBSD?
There was a problem hiding this comment.
On this one, the compiler was complaining about fastcall being redefined, as FreeBSD's headers already define fastcall.
There was a problem hiding this comment.
Which compiler are you using?
There was a problem hiding this comment.
It is actually strange why it only complains about __fastcall. It also recognized all other attributes
https://clang.llvm.org/docs/AttributeReference.html#target-version
Can you post the error that the compiler produces?
There was a problem hiding this comment.
This is what happens without skipping __fastcall:
[ 35%] Building CXX object DiligentCore/Graphics/ShaderTools/CMakeFiles/Diligent-ShaderTools.dir/src/DXCompiler.cpp.o
In file included from /usr/home/jlhawkwell/Projects/DiligentEngine/DiligentCore/Graphics/ShaderTools/src/DXCompiler.cpp:42:
In file included from /usr/home/jlhawkwell/Projects/DiligentEngine/DiligentCore/Graphics/ShaderTools/include/DXCompilerBaseLinux.hpp:31:
In file included from /usr/home/jlhawkwell/Projects/DiligentEngine/DiligentCore/Graphics/ShaderTools/../../ThirdParty/DirectXShaderCompiler/dxc/dxcapi.h:37:
/usr/home/jlhawkwell/Projects/DiligentEngine/DiligentCore/Graphics/ShaderTools/../../ThirdParty/DirectXShaderCompiler/dxc/WinAdapter.h:345:9: error: '__fastcall' macro redefined [-Werror,-Wmacro-redefined]
#define __fastcall
^
/usr/include/sys/cdefs.h:365:9: note: previous definition is here
#define __fastcall __attribute__((__fastcall__))
^
1 error generated.
gmake[2]: *** [DiligentCore/Graphics/ShaderTools/CMakeFiles/Diligent-ShaderTools.dir/build.make:122: DiligentCore/Graphics/ShaderTools/CMakeFiles/Diligent-ShaderTools.dir/src/DXCompiler.cpp.o] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:3521: DiligentCore/Graphics/ShaderTools/CMakeFiles/Diligent-ShaderTools.dir/all] Error 2
gmake: *** [Makefile:156: all] Error 2
There was a problem hiding this comment.
I updated DXC headers, so this should work now - please try the latest version
There was a problem hiding this comment.
A better way to fix this is to check
#ifndef __fastcall
Though I do really not understand why it only complains about __fastcall. All other macros are defined in the same way.
There was a problem hiding this comment.
The __fastcall macro is already defined in /usr/include/sys/cdefs.h on line 365.
There was a problem hiding this comment.
What I suggested is to use the #ifndef __fastcall guard instead of #ifndef PLATFORM_FREEBSD.
Also note that this file is a third-party header so with the next update, it may break again.
BuildTools/FormatValidation/validate_format_freebsd_implementation.sh
Outdated
Show resolved
Hide resolved
| #define __vectorcall | ||
| #define __thiscall | ||
| #ifndef PLATFORM_FREEBSD | ||
| #define __fastcall |
There was a problem hiding this comment.
Which compiler are you using?
TheMostDiligent
left a comment
There was a problem hiding this comment.
I updated core module, so that format validation will be disabled on platforms that don't have the script.
Can you update to the latest version and try it?
Format validation is successfully skipped (tested after deleting the scripts I added). Would you like a new push with the scripts removed? |
You can force-push to the same branch - the PR will be updated. |
d41441e to
73ac8e7
Compare
| #define __vectorcall | ||
| #define __thiscall | ||
| #ifndef PLATFORM_FREEBSD | ||
| #define __fastcall |
There was a problem hiding this comment.
I updated DXC headers, so this should work now - please try the latest version
CMakeLists.txt
Outdated
| endif() | ||
|
|
||
| if(PLATFORM_FREEBSD AND EXISTS /usr/local/include) | ||
| target_include_directories(Diligent-BuildSettings SYSTEM AFTER INTERFACE /usr/local/include) |
There was a problem hiding this comment.
What errors do you get without this include?
This change does not seem right
There was a problem hiding this comment.
It is quite correct. Without this, anything that isn't part of base will not be found.
There was a problem hiding this comment.
FreeBSD! "base" is short for "base operating system" and is the stuff that's made by the FreeBSD Project - kernel and world. This includes everything outside of /usr/home and /usr/local, which isn't much.
A mirror of the source repo is available here, so you can see what all is part of FreeBSD's base: https://github.com/freebsd/freebsd-src
f526296 to
12cdfe3
Compare
| endif() | ||
|
|
||
| if(PLATFORM_FREEBSD AND EXISTS /usr/local/include) | ||
| target_include_directories(Diligent-BuildSettings SYSTEM AFTER INTERFACE /usr/local/include) |
There was a problem hiding this comment.
I tried to find some info about this problem, and I think that the right way to fix this is to set CMAKE_REQUIRED_INCLUDES at your project's CMake level:
There was a problem hiding this comment.
Did you try setting the CMAKE_REQUIRED_INCLUDES in your project CMake?
TheMostDiligent
left a comment
There was a problem hiding this comment.
Sorry for a long delay with response.
| #define __vectorcall | ||
| #define __thiscall | ||
| #ifndef PLATFORM_FREEBSD | ||
| #define __fastcall |
There was a problem hiding this comment.
A better way to fix this is to check
#ifndef __fastcall
Though I do really not understand why it only complains about __fastcall. All other macros are defined in the same way.
12cdfe3 to
f72ae4c
Compare
| #define __vectorcall | ||
| #define __thiscall | ||
| #ifndef PLATFORM_FREEBSD | ||
| #define __fastcall |
There was a problem hiding this comment.
What I suggested is to use the #ifndef __fastcall guard instead of #ifndef PLATFORM_FREEBSD.
Also note that this file is a third-party header so with the next update, it may break again.
| endif() | ||
|
|
||
| if(PLATFORM_FREEBSD AND EXISTS /usr/local/include) | ||
| target_include_directories(Diligent-BuildSettings SYSTEM AFTER INTERFACE /usr/local/include) |
There was a problem hiding this comment.
Did you try setting the CMAKE_REQUIRED_INCLUDES in your project CMake?

Making all changes required to build on FreeBSD. Some CMake entries for Linux may have changed, but their functionality remains unchanged.