mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-08 03:28:20 +02:00
Improved SDL platform support, 'ar' lib reworking
This commit is contained in:
parent
258a6653f9
commit
d20b53b187
16 changed files with 488 additions and 385 deletions
|
@ -45,6 +45,10 @@ if (HAVE_BACKTRACE_HEADERS)
|
|||
add_definitions(-DBFP_HAS_BACKTRACE)
|
||||
endif ()
|
||||
|
||||
if (DEFINED BF_DISABLE_FFI)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DBF_DISABLE_FFI")
|
||||
endif()
|
||||
|
||||
if (${IOS})
|
||||
include_directories(
|
||||
.
|
||||
|
@ -255,7 +259,7 @@ elseif (${ANDROID})
|
|||
../BeefySysLib/platform/android/BFPlatform.cpp
|
||||
../BeefySysLib/platform/android/AndroidCommon.cpp
|
||||
)
|
||||
else()
|
||||
elseif ((${CMAKE_HOST_SYSTEM_PROCESSOR} STREQUAL "x86_64") AND (NOT DEFINED BF_DISABLE_FFI))
|
||||
file(GLOB SRC_FILES_OS
|
||||
../BeefySysLib/platform/linux/BFPlatform.cpp
|
||||
../BeefySysLib/platform/linux/LinuxCommon.cpp
|
||||
|
@ -268,6 +272,11 @@ else()
|
|||
../BeefySysLib/third_party/libffi/x86_64-unknown-linux-gnu/src/x86/unix64.o
|
||||
../BeefySysLib/third_party/libffi/x86_64-unknown-linux-gnu/src/x86/ffiw64.o
|
||||
)
|
||||
else()
|
||||
file(GLOB SRC_FILES_OS
|
||||
../BeefySysLib/platform/linux/BFPlatform.cpp
|
||||
../BeefySysLib/platform/linux/LinuxCommon.cpp
|
||||
)
|
||||
endif()
|
||||
|
||||
# Add library to build.
|
||||
|
|
|
@ -106,6 +106,10 @@ if(NOT MSVC)
|
|||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wno-multichar")
|
||||
endif(NOT MSVC)
|
||||
|
||||
if (DEFINED BF_ENABLE_SDL)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DBF_ENABLE_SDL")
|
||||
endif()
|
||||
|
||||
################ Files ################
|
||||
# -- Add files to project. -- #
|
||||
#######################################
|
||||
|
@ -118,7 +122,6 @@ file(GLOB SRC_FILES
|
|||
Common.cpp
|
||||
DataStream.cpp
|
||||
FileStream.cpp
|
||||
HeadlessApp.cpp
|
||||
MemStream.cpp
|
||||
ResLib.cpp
|
||||
Startup.cpp
|
||||
|
@ -308,11 +311,20 @@ if (${APPLE})
|
|||
file(GLOB SRC_FILES_OS
|
||||
platform/darwin/BFPlatform.cpp
|
||||
platform/darwin/DarwinCommon.cpp
|
||||
HeadlessApp.cpp
|
||||
)
|
||||
else()
|
||||
file(GLOB SRC_FILES_OS
|
||||
platform/linux/BFPlatform.cpp
|
||||
platform/linux/LinuxCommon.cpp
|
||||
HeadlessApp.cpp
|
||||
)
|
||||
endif()
|
||||
|
||||
if (DEFINED BF_ENABLE_SDL)
|
||||
file(GLOB SRC_FILES_OS
|
||||
platform/sdl/SdlBFApp.cpp
|
||||
platform/sdl/GLRenderDevice.cpp
|
||||
)
|
||||
endif()
|
||||
|
||||
|
|
|
@ -28,6 +28,10 @@
|
|||
|
||||
//#define offsetof(type, member) __builtin_offsetof (type, member)
|
||||
|
||||
#ifdef __arm__
|
||||
#define BF_PLATFORM_OPENGL_ES2
|
||||
#endif
|
||||
|
||||
extern "C"
|
||||
{
|
||||
//#define FFI_BUILDING
|
||||
|
|
|
@ -1,9 +1,14 @@
|
|||
#pragma once
|
||||
|
||||
#include "../../HeadlessApp.h"
|
||||
#include "../sdl/SdlBFApp.h"
|
||||
#include "../HeadlessApp.h"
|
||||
|
||||
NS_BF_BEGIN;
|
||||
|
||||
#ifdef BF_ENABLE_SDL
|
||||
typedef SdlBFApp PlatformBFApp;
|
||||
#else
|
||||
typedef HeadlessApp PlatformBFApp;
|
||||
#endif
|
||||
|
||||
NS_BF_END;
|
|
@ -559,6 +559,9 @@ BFP_EXPORT void BFP_CALLTYPE BfpSystem_Init(int version, BfpSystemInitFlags flag
|
|||
BfpSystem_FatalError(StrFormat("Bfp build version '%d' does not match requested version '%d'", BFP_VERSION, version).c_str(), "BFP FATAL ERROR");
|
||||
}
|
||||
|
||||
struct sigaction ignoreAction = { SIG_IGN };
|
||||
sigaction(SIGPIPE, &ignoreAction, NULL);
|
||||
|
||||
//if (ptrace(PTRACE_TRACEME, 0, 1, 0) != -1)
|
||||
{
|
||||
//ptrace(PTRACE_DETACH, 0, 1, 0);
|
||||
|
|
|
@ -7,7 +7,9 @@
|
|||
|
||||
USING_NS_BF;
|
||||
|
||||
#ifndef NOT_IMPL
|
||||
#define NOT_IMPL throw "Not implemented"
|
||||
#endif
|
||||
|
||||
#pragma comment(lib, "SDL2.lib")
|
||||
|
||||
|
@ -138,7 +140,7 @@ static void CreateOrthographicOffCenter(float left, float right, float bottom, f
|
|||
|
||||
GLShaderParam::GLShaderParam()
|
||||
{
|
||||
mGLVariable = NULL;
|
||||
mGLVariable = 0;
|
||||
}
|
||||
|
||||
GLShaderParam::~GLShaderParam()
|
||||
|
@ -229,9 +231,6 @@ GLDrawBatch::GLDrawBatch() : DrawBatch()
|
|||
|
||||
GLDrawBatch::~GLDrawBatch()
|
||||
{
|
||||
delete mVertices;
|
||||
delete mIndices;
|
||||
//mGLBuffer->Release();
|
||||
}
|
||||
|
||||
extern int gBFDrawBatchCount;
|
||||
|
@ -311,60 +310,6 @@ void GLDrawLayer::SetShaderConstantData(int usageIdx, int slotIdx, void* constDa
|
|||
{
|
||||
}
|
||||
|
||||
|
||||
/*void GLDrawLayer::FreeBatch(DrawBatch* drawBatch)
|
||||
{
|
||||
//delete drawBatch;
|
||||
|
||||
GLDrawBatch* batch = (GLDrawBatch*) drawBatch;
|
||||
batch->Clear();
|
||||
|
||||
//GLDrawBatchVector* pool = &((GLRenderDevice*) gBFApp->mRenderDevice)->mDrawBatchPool;
|
||||
//pool->push_back(batch);
|
||||
GLRenderDevice* glRenderDevice = (GLRenderDevice*)gBFApp->mRenderDevice;
|
||||
drawBatch->mNext = glRenderDevice->mFreeBatchHead;
|
||||
glRenderDevice->mFreeBatchHead = batch;
|
||||
}*/
|
||||
|
||||
//void GLRenderDevice::PhysSetShader(Shader* shader)
|
||||
//{
|
||||
// GLRenderDevice* aRenderDevice = (GLRenderDevice*) gBFApp->mRenderDevice;
|
||||
//
|
||||
// //TODO: Cache more
|
||||
//
|
||||
// GLShader* glShader = (GLShader*)shader;
|
||||
//
|
||||
// GLfloat matrix[4][4];
|
||||
// CreateOrthographicOffCenter(0.0f, (float)mPhysRenderWindow->mWidth, (float)mPhysRenderWindow->mHeight, 0.0f, -100.0f, 100.0f, matrix);
|
||||
// GLint matrixLoc = bf_glGetUniformLocation(glShader->mGLProgram, "screenMatrix");
|
||||
// //BF_ASSERT(matrixLoc >= 0);
|
||||
// if (matrixLoc >= 0)
|
||||
// bf_glUniformMatrix4fv(matrixLoc, 1, false, (float*)matrix);
|
||||
//
|
||||
// /*mPhysShaderPass = shaderPass;
|
||||
// GLShaderPass* dXShaderPass = (GLShaderPass*) mPhysShaderPass;
|
||||
// mGLDevice->IASetInputLayout(dXShaderPass->mGLLayout);
|
||||
//
|
||||
// if (mCurShader->mLastResizeCount != mCurRenderTarget->mResizeNum)
|
||||
// {
|
||||
// ShaderParam* shaderParam = mCurShader->GetShaderParam(L"WindowSize");
|
||||
// if (shaderParam != NULL)
|
||||
// {
|
||||
// shaderParam->SetFloat2((float) mCurRenderTarget->mWidth, (float) mCurRenderTarget->mHeight);
|
||||
// }
|
||||
//
|
||||
// mCurShader->mLastResizeCount = mCurRenderTarget->mResizeNum;
|
||||
// }
|
||||
//
|
||||
// GLCHECK(dXShaderPass->mGLEffectPass->Apply(0));*/
|
||||
//
|
||||
// /*GLfloat matrix[4][4];
|
||||
// CreateOrthographicOffCenter(0.0f, (float)mPhysRenderWindow->mWidth, (float)mPhysRenderWindow->mHeight, 0.0f, -100.0f, 100.0f, matrix);
|
||||
// GLint uniformLocation = bf_glGetUniformLocation(((GLShader*)shaderPass->mTechnique->mShader)->mGLProgram, "screenMatrix");
|
||||
// if (uniformLocation != -1)
|
||||
// bf_glUniformMatrix4fv(uniformLocation, 1, false, (GLfloat*)matrix);*/
|
||||
//}
|
||||
|
||||
void GLRenderDevice::PhysSetRenderWindow(RenderWindow* renderWindow)
|
||||
{
|
||||
mCurRenderTarget = renderWindow;
|
||||
|
|
|
@ -117,9 +117,6 @@ class GLRenderWindow : public RenderWindow
|
|||
public:
|
||||
SDL_Window* mSDLWindow;
|
||||
GLRenderDevice* mRenderDevice;
|
||||
//IGLGISwapChain* mGLSwapChain;
|
||||
//IGL10Texture2D* mGLBackBuffer;
|
||||
//IGL10RenderTargetView* mGLRenderTargetView;
|
||||
bool mResizePending;
|
||||
int mPendingWidth;
|
||||
int mPendingHeight;
|
||||
|
@ -138,18 +135,9 @@ public:
|
|||
void CopyBitsTo(uint32* dest, int width, int height);
|
||||
};
|
||||
|
||||
typedef std::vector<GLDrawBatch*> GLDrawBatchVector;
|
||||
|
||||
class GLRenderDevice : public RenderDevice
|
||||
{
|
||||
public:
|
||||
//IGLGIFactory* mGLGIFactory;
|
||||
//IGL10Device* mGLDevice;
|
||||
//IGL10BlendState* mGLNormalBlendState;
|
||||
//IGL10BlendState* mGLAdditiveBlendState;
|
||||
//IGL10RasterizerState* mGLRasterizerStateClipped;
|
||||
//IGL10RasterizerState* mGLRasterizerStateUnclipped;
|
||||
|
||||
GLuint mGLVAO;
|
||||
GLuint mGLVertexBuffer;
|
||||
GLuint mGLIndexBuffer;
|
||||
|
@ -158,7 +146,6 @@ public:
|
|||
|
||||
bool mHasVSync;
|
||||
|
||||
GLDrawBatchVector mDrawBatchPool;
|
||||
GLDrawBatch* mFreeBatchHead;
|
||||
|
||||
public:
|
||||
|
|
|
@ -24,13 +24,21 @@ SdlBFWindow::SdlBFWindow(BFWindow* parent, const StringImpl& title, int x, int y
|
|||
|
||||
mSDLWindow = SDL_CreateWindow(title.c_str(), x, y, width, height, sdlWindowFlags);
|
||||
|
||||
#ifndef BF_PLATFORM_OPENGL_ES2
|
||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
|
||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);
|
||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
|
||||
#endif
|
||||
|
||||
if (!SDL_GL_CreateContext(mSDLWindow))
|
||||
{
|
||||
BF_FATAL(StrFormat("Unable to create OpenGL context: %s", SDL_GetError()).c_str());
|
||||
BF_FATAL(StrFormat(
|
||||
#ifdef BF_PLATFORM_OPENGL_ES2
|
||||
"Unable to create OpenGLES context: %s"
|
||||
#else
|
||||
"Unable to create OpenGL context: %s"
|
||||
#endif
|
||||
, SDL_GetError()).c_str());
|
||||
SDL_Quit();
|
||||
exit(2);
|
||||
}
|
||||
|
@ -324,7 +332,7 @@ void SdlBFWindow::SetAlpha(float alpha, uint32 destAlphaSrcMask, bool isMouseVis
|
|||
|
||||
uint32 SdlBFApp::GetClipboardFormat(const StringImpl& format)
|
||||
{
|
||||
return CF_TEXT;
|
||||
return /*CF_TEXT*/1;
|
||||
}
|
||||
|
||||
void* SdlBFApp::GetClipboardData(const StringImpl& format, int* size)
|
||||
|
|
|
@ -6,8 +6,8 @@ if(NOT CMAKE_BUILD_TYPE)
|
|||
message(STATUS "Build type not specified: Use Debug by default.")
|
||||
endif(NOT CMAKE_BUILD_TYPE)
|
||||
|
||||
add_subdirectory(extern/hunspell)
|
||||
add_subdirectory(BeefRT)
|
||||
add_subdirectory(BeefySysLib)
|
||||
add_subdirectory(extern/hunspell)
|
||||
add_subdirectory(IDEHelper)
|
||||
add_subdirectory(BeefBoot)
|
||||
add_subdirectory(BeefRT)
|
||||
|
|
|
@ -195,9 +195,16 @@ namespace IDE
|
|||
gApp.GetProjectBuildDir(project, projectBuildDir);
|
||||
File.WriteAll(scope $"{projectBuildDir}/ObjectArgs.txt", .((.)objectsArg.Ptr, objectsArg.Length)).IgnoreError();
|
||||
|
||||
String arCmds = scope String(""); //-O2 -Rpass=inline
|
||||
String arCmds = null; //-O2 -Rpass=inline
|
||||
//(doClangCPP ? "-lc++abi " : "") +
|
||||
|
||||
String arArgs = scope .();
|
||||
|
||||
bool useArCmds = false;
|
||||
|
||||
if (useArCmds)
|
||||
{
|
||||
arCmds = scope:: String("");
|
||||
arCmds.AppendF("CREATE {}\n", targetPath);
|
||||
|
||||
void AddObject(StringView obj)
|
||||
|
@ -239,6 +246,40 @@ namespace IDE
|
|||
}
|
||||
}
|
||||
arCmds.AppendF("SAVE\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
arArgs.AppendF($"-qc {targetPath}");
|
||||
|
||||
void AddObject(StringView obj)
|
||||
{
|
||||
if (obj.IsEmpty)
|
||||
return;
|
||||
|
||||
arArgs.Append(" ");
|
||||
arArgs.Append(obj);
|
||||
}
|
||||
|
||||
bool inQuote = false;
|
||||
int lastEnd = -1;
|
||||
for (int i < objectsArg.Length)
|
||||
{
|
||||
var c = objectsArg[i];
|
||||
if (c == '"')
|
||||
{
|
||||
if (inQuote)
|
||||
AddObject(objectsArg.Substring(lastEnd + 1, i - lastEnd - 1));
|
||||
inQuote = !inQuote;
|
||||
lastEnd = i;
|
||||
}
|
||||
else if ((c == ' ') && (!inQuote))
|
||||
{
|
||||
AddObject(objectsArg.Substring(lastEnd + 1, i - lastEnd - 1));
|
||||
lastEnd = i;
|
||||
}
|
||||
}
|
||||
AddObject(objectsArg.Substring(lastEnd + 1));
|
||||
}
|
||||
|
||||
UpdateCacheStr(project, "", workspaceOptions, options, null, null);
|
||||
|
||||
|
@ -275,12 +316,14 @@ namespace IDE
|
|||
return false;
|
||||
}
|
||||
|
||||
String cmdLine = scope .();
|
||||
cmdLine.AppendF("-M");
|
||||
|
||||
var runCmd = gApp.QueueRun(arPath, cmdLine, workingDir, .UTF8);
|
||||
if (arCmds != null)
|
||||
arArgs.Append("-M");
|
||||
|
||||
var runCmd = gApp.QueueRun(arPath, arArgs, workingDir, .UTF8);
|
||||
runCmd.mReference = new String(project.mProjectName);
|
||||
runCmd.mOnlyIfNotFailed = true;
|
||||
if (arCmds != null)
|
||||
runCmd.mStdInData = new .(arCmds);
|
||||
var tagetCompletedCmd = new IDEApp.TargetCompletedCmd(project);
|
||||
tagetCompletedCmd.mOnlyIfNotFailed = true;
|
||||
|
|
|
@ -8547,14 +8547,14 @@ namespace IDE
|
|||
if (executionInstance.mProcess.AttachStandardInput(fileStream) case .Err)
|
||||
return;
|
||||
|
||||
while (!executionInstance.mStdInData.IsEmpty)
|
||||
WriteLoop: while (!executionInstance.mStdInData.IsEmpty)
|
||||
{
|
||||
switch (fileStream.TryWrite(.((.)executionInstance.mStdInData.Ptr, executionInstance.mStdInData.Length)))
|
||||
{
|
||||
case .Ok(int len):
|
||||
executionInstance.mStdInData.Remove(0, len);
|
||||
case .Err:
|
||||
break;
|
||||
break WriteLoop;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -8712,6 +8712,8 @@ namespace IDE
|
|||
|
||||
if ((mVerbosity >= .Diagnostic) && (useArgsFile != .None))
|
||||
OutputLine("Arg file contents: {0}", args);
|
||||
if ((mVerbosity >= .Diagnostic) && (stdInData != null))
|
||||
OutputLine("StdIn data: {0}", stdInData);
|
||||
}
|
||||
else
|
||||
OutputLine("Executing: {0}", showArgs);
|
||||
|
|
|
@ -523,7 +523,7 @@ namespace Tests
|
|||
iSer.Serialize(serCtx);
|
||||
Test.Assert(serCtx.mStr == "x 10\ny 2\n");
|
||||
|
||||
Test.Assert(cTest0 == "Test\n0");
|
||||
Test.Assert(cTest0 == "Test\n0" || cTest0 == "Test\r\n0");
|
||||
Test.Assert(cTest1 == "AAAAAAAAAAAA");
|
||||
Test.Assert((Object)cTest1 == (Object)"AAAAAAAAAAAA");
|
||||
Test.Assert((cTest0Binary[0] == (.)'T') && ((cTest0Binary.Count == 6) || (cTest0Binary.Count == 7)));
|
||||
|
|
27
bin/build.sh
27
bin/build.sh
|
@ -7,10 +7,25 @@ ROOTPATH="$(dirname "$SCRIPTPATH")"
|
|||
echo Building from $SCRIPTPATH
|
||||
cd $SCRIPTPATH
|
||||
|
||||
if [[ $1 == "clean" ]]; then
|
||||
for i in "$@"
|
||||
do
|
||||
if [[ $i == "clean" ]]; then
|
||||
echo "Cleaning..."
|
||||
rm -rf ../jbuild
|
||||
rm -rf ../jbuild_d
|
||||
fi
|
||||
exit
|
||||
fi
|
||||
|
||||
if [[ $i == "sdl" ]]; then
|
||||
echo "Using SDL"
|
||||
USE_SDL="-DBF_ENABLE_SDL=1"
|
||||
fi
|
||||
|
||||
if [[ $i == "no_ffi" ]]; then
|
||||
echo "Disabling FFI"
|
||||
USE_FFI="-DBF_DISABLE_FFI=1"
|
||||
fi
|
||||
done
|
||||
|
||||
if command -v ninja >/dev/null 2>&1 ; then
|
||||
CAN_USE_NINJA=1
|
||||
|
@ -55,11 +70,15 @@ if [ ! -d jbuild_d ]; then
|
|||
mkdir jbuild_d
|
||||
mkdir jbuild
|
||||
fi
|
||||
|
||||
cd jbuild_d
|
||||
cmake $USE_NINJA -DCMAKE_BUILD_TYPE=Debug ../
|
||||
|
||||
echo cmake $USE_NINJA $USE_SDL -DCMAKE_BUILD_TYPE=Debug ../
|
||||
|
||||
cmake $USE_NINJA $USE_SDL $USE_FFI -DCMAKE_BUILD_TYPE=Debug ../
|
||||
cmake --build .
|
||||
cd ../jbuild
|
||||
cmake $USE_NINJA -DCMAKE_BUILD_TYPE=RelWithDebInfo ../
|
||||
cmake $USE_NINJA $USE_SDL $USE_FFI -DCMAKE_BUILD_TYPE=RelWithDebInfo ../
|
||||
cmake --build .
|
||||
|
||||
cd ../IDE/dist
|
||||
|
|
66
bin/build_sdl.sh
Normal file
66
bin/build_sdl.sh
Normal file
|
@ -0,0 +1,66 @@
|
|||
#!/bin/bash
|
||||
echo Starting build.sh
|
||||
|
||||
PATH=/usr/local/bin:$PATH:$HOME/bin
|
||||
SCRIPTPATH=$(cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)
|
||||
ROOTPATH="$(dirname "$SCRIPTPATH")"
|
||||
echo Building from $SCRIPTPATH
|
||||
cd $SCRIPTPATH
|
||||
|
||||
if [[ $1 == "clean" ]]; then
|
||||
rm -rf ../jbuild_sdl
|
||||
rm -rf ../jbuild_sdl_d
|
||||
exit
|
||||
fi
|
||||
|
||||
if [[ $1 == "sdl" ]]; then
|
||||
echo "Using SDL"
|
||||
USE_SDL="-DBF_ENABLE_SDL=1"
|
||||
fi
|
||||
|
||||
if command -v ninja >/dev/null 2>&1 ; then
|
||||
CAN_USE_NINJA=1
|
||||
if [ -d ../jbuild_sdl_d ] && [ ! -f ../jbuild_sdl_d/build.ninja ]; then
|
||||
CAN_USE_NINJA=0
|
||||
fi
|
||||
|
||||
if [ $CAN_USE_NINJA == 1 ]; then
|
||||
echo "Ninja is enabled for this build."
|
||||
USE_NINJA="-GNinja"
|
||||
else
|
||||
echo "Ninja couldn't be enabled for this build, consider doing a clean build to start using Ninja for faster build speeds."
|
||||
fi
|
||||
else
|
||||
echo "Ninja isn't installed, consider installing it for faster build speeds."
|
||||
fi
|
||||
|
||||
# exit when any command fails
|
||||
set -e
|
||||
|
||||
### Dependencies ###
|
||||
|
||||
if [ ! -f ../BeefySysLib/third_party/libffi/Makefile ]; then
|
||||
echo Building libffi...
|
||||
cd ../BeefySysLib/third_party/libffi
|
||||
./configure
|
||||
make
|
||||
cd $SCRIPTPATH
|
||||
fi
|
||||
|
||||
### LIBS ###
|
||||
|
||||
cd ..
|
||||
if [ ! -d jbuild_sdl_d ]; then
|
||||
mkdir jbuild_sdl_d
|
||||
mkdir jbuild_sdl
|
||||
fi
|
||||
|
||||
cd jbuild_sdl_d
|
||||
|
||||
echo cmake $USE_NINJA $USE_SDL -DCMAKE_BUILD_TYPE=Debug ../
|
||||
|
||||
cmake $USE_NINJA -DBF_ENABLE_SDL=1 -DCMAKE_BUILD_TYPE=Debug ../
|
||||
cmake --build .
|
||||
cd ../jbuild_sdl
|
||||
cmake $USE_NINJA -DBF_ENABLE_SDL=1 -DCMAKE_BUILD_TYPE=RelWithDebInfo ../
|
||||
cmake --build .
|
Loading…
Add table
Add a link
Reference in a new issue