Skip to content
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

T1234 : Enable visualiser build in Windows #36

Draft
wants to merge 14 commits into
base: dev
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 20 additions & 6 deletions AXIOM_Remote_Firmware_Visualizer/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,22 @@ set(CMAKE_C_STANDARD 99)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pedantic")

if(WIN32)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/")
find_package(SDL2_image REQUIRED)
include_directories(${SDL2_image_INCLUDE_DIRS})
endif()

find_package(SDL2 REQUIRED)
# Fix for ArchLinux, see https://bbs.archlinux.org/viewtopic.php?id=235931
if("${SDL2_LIBRARIES}" STREQUAL "")
SET(SDL2_LIBRARIES SDL2::SDL2)
ELSE()
string(STRIP "${SDL2_LIBRARIES}" SDL2_LIBRARIES)
ENDIF()
if(UNIX)
if("${SDL2_LIBRARIES}" STREQUAL "")
SET(SDL2_LIBRARIES SDL2::SDL2)
ELSE()
string(STRIP "${SDL2_LIBRARIES}" SDL2_LIBRARIES)
ENDIF()
endif()

include_directories(${SDL2_INCLUDE_DIRS})

INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/..")
Expand Down Expand Up @@ -46,4 +55,9 @@ file(COPY images DESTINATION ${CMAKE_BINARY_DIR})
file(COPY shaders DESTINATION ${CMAKE_BINARY_DIR})

ADD_EXECUTABLE(${PROJECT_NAME} ${FIRMWARE_SOURCES} ${IMGUI_SOURCES} ${GL3W_SOURCES} ${VISUALIZER_SOURCES}) # ${BOOTLOADER_SOURCES})
TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${SDL2_LIBRARIES} SDL2_image GL dl)

if(WIN32)
TARGET_LINK_LIBRARIES(${PROJECT_NAME} -g ${OPENGL_LIBRARIES} ${SDL2_LIBRARIES} ${SDL2_image_LIBRARIES} SDL2 SDL2_image)
elseif(UNIX)
TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${SDL2_LIBRARIES} SDL2_image GL dl)
endif()
7 changes: 4 additions & 3 deletions AXIOM_Remote_Firmware_Visualizer/Main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#include <unistd.h>
#include <memory>

#define SDL_MAIN_HANDLED
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>

Expand Down Expand Up @@ -74,15 +75,15 @@ void Initialization(SDL_Window** window)

void SetupGL(SDL_Window* window, SDL_GLContext& glContext)
{
gl3wInit();

SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, 0);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3);

glContext = SDL_GL_CreateContext(window);
SDL_GL_MakeCurrent(window, glContext);


gl3wInit();

// Set black background
glClearColor(0, 0, 0, 1);

Expand Down
36 changes: 34 additions & 2 deletions AXIOM_Remote_Firmware_Visualizer/README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# AXIOM Remote Firmware Visualizer
<h1 align = "center"> AXIOM Remote Firmware Visualizer </h1>

## About

Expand All @@ -12,17 +12,49 @@ The **imgui** library is embedded as git module, so you need to execute:

to initialize it.

## Building
## Installing Required Packages for Build

### For Linux Build

* Install required packages: **cmake, libsdl2-dev, libsdl2-image-dev**
* Open terminal, usual shortcut under Linux is **Ctrl+Alt+T**

### For Windows Build

* Install cmake on windows <br>
<a href = "https://cmake.org/download/"> Download link of cmake for windows</a><br>
* Install a C++ compiler. <br>
<a href = "https://nchc.dl.sourceforge.net/project/mingw-w64/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/installer/mingw-w64-install.exe"> Download link For Minimalist GNU for Windows </a> <br>
***Note: while installing, select x86_x64 Architecture, not i686***
* Download SDL2 and SDL2_image library for your compiler, and extract the **tar.gz** file. <br>
<a href = "https://www.libsdl.org/release/SDL2-devel-2.0.14-mingw.tar.gz"> Download link of SDL2 for Minimalist GNU for Windows </a> <br>
<a href = "https://www.libsdl.org/projects/SDL_image/release/SDL2_image-devel-2.0.5-mingw.tar.gz"> Download Link of SDL2_image for Minimalist GNU for Windows </a> <br>
* In the extracted folder of ***SDL2***, ***SDL2_image*** search for folder with your compiler name and copy all the content inside it (**include**,**bin** and **lib** folder)<br>
***For the above downloaded Minimalist GNU compiler,the folder name is*** ```x86_64-w64-mingw32``` <br>
* Paste the copied content, into your installed compiler directories (both x86 and x64)<br>
***For the above downloaded Minimalist GNU, compiler directories are as follows,*** <br>
```ProgramFiles\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64```<br>
```ProgramFiles\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\x86_64-w64-mingw32```

## Running the Visualizer

### For Linux Build

* **cd** into **/AXIOM_Remote_Firmware_Visualizer**
* **mkdir build**
* **cd build**
* **cmake ..**
* **make -j4**
* **./AXIOM_Remote_Firmware_Visualizer**

### For Windows Build

* **cd** into **/AXIOM_Remote_Firmware_Visualizer**
* **mkdir build**
* **cd build**
* **cmake -G "MinGW Makefiles" ..**
* **mingw32-make -j4**
* **./AXIOM_Remote_Firmware_Visualizer.exe**

These steps above can be done in one go with the **build.sh** script

Expand Down
175 changes: 175 additions & 0 deletions AXIOM_Remote_Firmware_Visualizer/cmake/FindSDL2.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@

# This module defines
# SDL2_LIBRARY, the name of the library to link against
# SDL2_FOUND, if false, do not try to link to SDL2
# SDL2_INCLUDE_DIR, where to find SDL.h
#
# This module responds to the the flag:
# SDL2_BUILDING_LIBRARY
# If this is defined, then no SDL2main will be linked in because
# only applications need main().
# Otherwise, it is assumed you are building an application and this
# module will attempt to locate and set the the proper link flags
# as part of the returned SDL2_LIBRARY variable.
#
# Don't forget to include SDLmain.h and SDLmain.m your project for the
# OS X framework based version. (Other versions link to -lSDL2main which
# this module will try to find on your behalf.) Also for OS X, this
# module will automatically add the -framework Cocoa on your behalf.
#
#
# Additional Note: If you see an empty SDL2_LIBRARY_TEMP in your configuration
# and no SDL2_LIBRARY, it means CMake did not find your SDL2 library
# (SDL2.dll, libsdl2.so, SDL2.framework, etc).
# Set SDL2_LIBRARY_TEMP to point to your SDL2 library, and configure again.
# Similarly, if you see an empty SDL2MAIN_LIBRARY, you should set this value
# as appropriate. These values are used to generate the final SDL2_LIBRARY
# variable, but when these values are unset, SDL2_LIBRARY does not get created.
#
#
# $SDL2DIR is an environment variable that would
# correspond to the ./configure --prefix=$SDL2DIR
# used in building SDL2.
# l.e.galup 9-20-02
#
# Modified by Eric Wing.
# Added code to assist with automated building by using environmental variables
# and providing a more controlled/consistent search behavior.
# Added new modifications to recognize OS X frameworks and
# additional Unix paths (FreeBSD, etc).
# Also corrected the header search path to follow "proper" SDL guidelines.
# Added a search for SDL2main which is needed by some platforms.
# Added a search for threads which is needed by some platforms.
# Added needed compile switches for MinGW.
#
# On OSX, this will prefer the Framework version (if found) over others.
# People will have to manually change the cache values of
# SDL2_LIBRARY to override this selection or set the CMake environment
# CMAKE_INCLUDE_PATH to modify the search paths.
#
# Note that the header path has changed from SDL2/SDL.h to just SDL.h
# This needed to change because "proper" SDL convention
# is #include "SDL.h", not <SDL2/SDL.h>. This is done for portability
# reasons because not all systems place things in SDL2/ (see FreeBSD).

#=============================================================================
# Copyright 2003-2009 Kitware, Inc.
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file Copyright.txt for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the License for more information.
#=============================================================================
# (To distribute this file outside of CMake, substitute the full
# License text for the above reference.)

# message("<FindSDL2.cmake>")

SET(SDL2_PATH "C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/x86_64-w64-mingw32")

SET(SDL2_SEARCH_PATHS
~/Library/Frameworks
/Library/Frameworks
/usr/local
/usr
/sw # Fink
/opt/local # DarwinPorts
/opt/csw # Blastwave
/opt
${SDL2_PATH}
)

FIND_PATH(SDL2_INCLUDE_DIR SDL.h
HINTS
$ENV{SDL2DIR}
PATH_SUFFIXES include/SDL2 include
PATHS ${SDL2_SEARCH_PATHS}
)

if(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(PATH_SUFFIXES lib64 lib/x64 lib)
else()
set(PATH_SUFFIXES lib/x86 lib)
endif()

FIND_LIBRARY(SDL2_LIBRARY_TEMP
NAMES SDL2
HINTS
$ENV{SDL2DIR}
PATH_SUFFIXES ${PATH_SUFFIXES}
PATHS ${SDL2_SEARCH_PATHS}
)

IF(NOT SDL2_BUILDING_LIBRARY)
IF(NOT ${SDL2_INCLUDE_DIR} MATCHES ".framework")
# Non-OS X framework versions expect you to also dynamically link to
# SDL2main. This is mainly for Windows and OS X. Other (Unix) platforms
# seem to provide SDL2main for compatibility even though they don't
# necessarily need it.
FIND_LIBRARY(SDL2MAIN_LIBRARY
NAMES SDL2main
HINTS
$ENV{SDL2DIR}
PATH_SUFFIXES ${PATH_SUFFIXES}
PATHS ${SDL2_SEARCH_PATHS}
)
ENDIF(NOT ${SDL2_INCLUDE_DIR} MATCHES ".framework")
ENDIF(NOT SDL2_BUILDING_LIBRARY)

# SDL2 may require threads on your system.
# The Apple build may not need an explicit flag because one of the
# frameworks may already provide it.
# But for non-OSX systems, I will use the CMake Threads package.
IF(NOT APPLE)
FIND_PACKAGE(Threads)
ENDIF(NOT APPLE)

# MinGW needs an additional link flag, -mwindows
# It's total link flags should look like -lmingw32 -lSDL2main -lSDL2 -mwindows
IF(MINGW)
SET(MINGW32_LIBRARY mingw32 "-mwindows" CACHE STRING "mwindows for MinGW")
ENDIF(MINGW)

IF(SDL2_LIBRARY_TEMP)
# For SDL2main
IF(NOT SDL2_BUILDING_LIBRARY)
IF(SDL2MAIN_LIBRARY)
SET(SDL2_LIBRARY_TEMP ${SDL2MAIN_LIBRARY} ${SDL2_LIBRARY_TEMP})
ENDIF(SDL2MAIN_LIBRARY)
ENDIF(NOT SDL2_BUILDING_LIBRARY)

# For OS X, SDL2 uses Cocoa as a backend so it must link to Cocoa.
# CMake doesn't display the -framework Cocoa string in the UI even
# though it actually is there if I modify a pre-used variable.
# I think it has something to do with the CACHE STRING.
# So I use a temporary variable until the end so I can set the
# "real" variable in one-shot.
IF(APPLE)
SET(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} "-framework Cocoa")
ENDIF(APPLE)

# For threads, as mentioned Apple doesn't need this.
# In fact, there seems to be a problem if I used the Threads package
# and try using this line, so I'm just skipping it entirely for OS X.
IF(NOT APPLE)
SET(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} ${CMAKE_THREAD_LIBS_INIT})
ENDIF(NOT APPLE)

# For MinGW library
IF(MINGW)
SET(SDL2_LIBRARY_TEMP ${MINGW32_LIBRARY} ${SDL2_LIBRARY_TEMP})
ENDIF(MINGW)

# Set the final string here so the GUI reflects the final state.
SET(SDL2_LIBRARY ${SDL2_LIBRARY_TEMP} CACHE STRING "Where the SDL2 Library can be found")
# Set the temp variable to INTERNAL so it is not seen in the CMake GUI
SET(SDL2_LIBRARY_TEMP "${SDL2_LIBRARY_TEMP}" CACHE INTERNAL "")
ENDIF(SDL2_LIBRARY_TEMP)

# message("</FindSDL2.cmake>")

INCLUDE(FindPackageHandleStandardArgs)

FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2 REQUIRED_VARS SDL2_LIBRARY SDL2_INCLUDE_DIR)
Loading