-
Notifications
You must be signed in to change notification settings - Fork 141
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Adding FreeBSD build support. #460
base: master
Are you sure you want to change the base?
Conversation
BuildTools/FormatValidation/validate_format_freebsd_implementation.sh
Outdated
Show resolved
Hide resolved
@@ -342,7 +342,9 @@ | |||
#define __stdcall | |||
#define __vectorcall | |||
#define __thiscall | |||
#ifndef PLATFORM_FREEBSD | |||
#define __fastcall |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is __fastcall
a recognized keyword when compiling on FreeBSD?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Which compiler are you using?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I updated DXC headers, so this should work now - please try the latest version
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The __fastcall
macro is already defined in /usr/include/sys/cdefs.h
on line 365.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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
@@ -342,7 +342,9 @@ | |||
#define __stdcall | |||
#define __vectorcall | |||
#define __thiscall | |||
#ifndef PLATFORM_FREEBSD | |||
#define __fastcall |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Which compiler are you using?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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
@@ -342,7 +342,9 @@ | |||
#define __stdcall | |||
#define __vectorcall | |||
#define __thiscall | |||
#ifndef PLATFORM_FREEBSD | |||
#define __fastcall |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I updated DXC headers, so this should work now - please try the latest version
CMakeLists.txt
Outdated
@@ -513,6 +522,9 @@ else() | |||
set(DILIGENT_INSTALL_PDB OFF) | |||
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What errors do you get without this include?
This change does not seem right
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It is quite correct. Without this, anything that isn't part of base will not be found.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What base?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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
@@ -520,6 +528,10 @@ else() | |||
set(DILIGENT_INSTALL_PDB OFF) | |||
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Did you try setting the CMAKE_REQUIRED_INCLUDES
in your project CMake?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sorry for a long delay with response.
@@ -342,7 +342,9 @@ | |||
#define __stdcall | |||
#define __vectorcall | |||
#define __thiscall | |||
#ifndef PLATFORM_FREEBSD | |||
#define __fastcall |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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
@@ -342,7 +342,9 @@ | |||
#define __stdcall | |||
#define __vectorcall | |||
#define __thiscall | |||
#ifndef PLATFORM_FREEBSD | |||
#define __fastcall |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
@@ -520,6 +528,10 @@ else() | |||
set(DILIGENT_INSTALL_PDB OFF) | |||
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.