use strip and upx to compress executable
This commit is contained in:
parent
b6c4d6bf47
commit
d683587d58
|
@ -0,0 +1,6 @@
|
|||
output
|
||||
compile_flags.txt
|
||||
build
|
||||
xcode-build
|
||||
.cache
|
||||
macos
|
|
@ -16,7 +16,7 @@ aux_source_directory(libs/stb_image ENGINE_SRC)
|
|||
|
||||
add_library(${ENGINE_NAME} STATIC ${ENGINE_SRC})
|
||||
|
||||
set(BUILD_SHARED_LIBS CACHE BOOL OFF "Build shared libraries")
|
||||
set(GLFW_BUILD_SHARED_LIBRARY CACHE BOOL OFF "Build shared libraries")
|
||||
set(GLFW_BUILD_DOCS CACHE BOOL OFF"Build the GLFW documentation")
|
||||
set(GLFW_INSTALL CACHE BOOL OFF "Generate installation target")
|
||||
add_subdirectory(libs/glfw)
|
||||
|
@ -42,6 +42,11 @@ target_compile_definitions(
|
|||
PUBLIC $<$<STREQUAL:$<UPPER_CASE:"${CMAKE_BUILD_TYPE}">,"DEBUG">:GAME_DEBUG>
|
||||
)
|
||||
|
||||
target_compile_options(
|
||||
${ENGINE_NAME}
|
||||
PUBLIC $<$<STREQUAL:$<UPPER_CASE:"${CMAKE_BUILD_TYPE}">,"RELEASE">:-Os> -fno-rtti -fno-exceptions
|
||||
)
|
||||
|
||||
################
|
||||
# space sector
|
||||
################
|
||||
|
@ -63,8 +68,30 @@ target_compile_features(
|
|||
PUBLIC cxx_std_17
|
||||
)
|
||||
|
||||
add_custom_target(
|
||||
CompressExe
|
||||
COMMAND strip ${PROJECT_NAME}
|
||||
COMMAND upx --best --ultra-brute ${PROJECT_NAME}
|
||||
DEPENDS ${PROJECT_NAME}
|
||||
COMMENT "make SpaceSector more small"
|
||||
VERBATIM
|
||||
)
|
||||
|
||||
#############
|
||||
# unit test
|
||||
#############
|
||||
include(CTest)
|
||||
add_subdirectory(tests)
|
||||
|
||||
###############
|
||||
# install game
|
||||
###############
|
||||
install(
|
||||
PROGRAMS ${CMAKE_BINARY_DIR}/SpaceSector
|
||||
DESTINATION ${PROJECT_SOURCE_DIR}/output
|
||||
)
|
||||
|
||||
install(
|
||||
DIRECTORY ${PROJECT_SOURCE_DIR}/assets
|
||||
DESTINATION ${PROJECT_SOURCE_DIR}/output
|
||||
)
|
||||
|
|
22
ReadMe.md
22
ReadMe.md
|
@ -2,3 +2,25 @@
|
|||
|
||||
为1MGames游戏开发大赛制作的游戏。
|
||||
|
||||
## 编译方法
|
||||
|
||||
使用CMake 3.20及以上进行编译。
|
||||
|
||||
```bash
|
||||
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
|
||||
cmake --build build
|
||||
```
|
||||
|
||||
如果想要压缩文件至1M以下,你需要有`strip`程序和`upx`程序,并执行:
|
||||
|
||||
```bash
|
||||
cmake --build build --target CompressExe
|
||||
```
|
||||
|
||||
编译好后执行pack程序打包:
|
||||
|
||||
```bash
|
||||
pack.sh
|
||||
```
|
||||
|
||||
最终的结果在`output`文件夹下。
|
||||
|
|
|
@ -4,6 +4,8 @@
|
|||
#include "renderer.hpp"
|
||||
#include "scence.hpp"
|
||||
#include "inner_bmpfont.hpp"
|
||||
#include "event.hpp"
|
||||
#include "tool.hpp"
|
||||
|
||||
class Engine final {
|
||||
public:
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
#include "GLFW/glfw3.h"
|
||||
#include "stb_image.h"
|
||||
#include <string>
|
||||
#include <exception>
|
||||
#include <vector>
|
||||
#include <iostream>
|
||||
#include <memory>
|
||||
|
@ -20,6 +19,7 @@
|
|||
#include <stack>
|
||||
#include <utility>
|
||||
#include <limits>
|
||||
#include <cassert>
|
||||
|
||||
#ifdef USE_GLM
|
||||
#include "glm/glm.hpp"
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
#pragma once
|
||||
|
||||
#include "pch.hpp"
|
||||
|
||||
template <typename T>
|
||||
|
@ -6,3 +7,9 @@ using Unique = std::unique_ptr<T>;
|
|||
|
||||
template <typename T>
|
||||
using Ref = std::shared_ptr<T>;
|
||||
|
||||
#ifdef GAME_DEBUG
|
||||
#define FATAL_ERROR(msg) assert((void(msg), false))
|
||||
#else
|
||||
#define FATAL_ERROR(msg)
|
||||
#endif
|
||||
|
|
|
@ -1,2 +1,3 @@
|
|||
#define STB_IMAGE_IMPLEMENTATION
|
||||
#define STBI_ONLY_PNG
|
||||
#include "stb_image.h"
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
#!/bin/bash
|
||||
|
||||
if [ -d "./output" ]; then
|
||||
rm -r ./output
|
||||
fi
|
||||
|
||||
mkdir output
|
||||
cp ./build/SpaceSector output
|
||||
cp -r ./assets output
|
|
@ -1,5 +1,4 @@
|
|||
#include "engine.hpp"
|
||||
#include "event.hpp"
|
||||
|
||||
void error_callback(int error, const char* description) {
|
||||
fprintf(stderr, "Error: %s\n", description);
|
||||
|
@ -7,7 +6,7 @@ void error_callback(int error, const char* description) {
|
|||
|
||||
void Engine::Init(const std::string& title, const Size& size, Scence* scence) {
|
||||
if (!glfwInit()) {
|
||||
throw std::runtime_error("glfw init failed");
|
||||
FATAL_ERROR("glfw init failed");
|
||||
}
|
||||
glfwSetErrorCallback(error_callback);
|
||||
|
||||
|
@ -23,7 +22,7 @@ void Engine::Init(const std::string& title, const Size& size, Scence* scence) {
|
|||
|
||||
if (!window_) {
|
||||
glfwTerminate();
|
||||
throw std::runtime_error("glfw window create failed");
|
||||
FATAL_ERROR("glfw window create failed");
|
||||
}
|
||||
|
||||
glfwMakeContextCurrent(window_);
|
||||
|
@ -32,7 +31,7 @@ void Engine::Init(const std::string& title, const Size& size, Scence* scence) {
|
|||
|
||||
if (!gladLoadGL(glfwGetProcAddress)) {
|
||||
glfwTerminate();
|
||||
throw std::runtime_error("glad load failed");
|
||||
FATAL_ERROR("glad load failed");
|
||||
}
|
||||
|
||||
int width, height;
|
||||
|
|
|
@ -59,7 +59,7 @@ void initShader(const std::string& vertex, const std::string& fragment) {
|
|||
std::ifstream file(vertex);
|
||||
if (file.fail()) {
|
||||
Log("vertex shader %s load failed", vertex.c_str());
|
||||
throw std::runtime_error("vertex shader load failed");
|
||||
FATAL_ERROR("vertex shader load failed");
|
||||
}
|
||||
std::string vertexCode((std::istreambuf_iterator<char>(file)),
|
||||
std::istreambuf_iterator<char>());
|
||||
|
@ -68,7 +68,7 @@ void initShader(const std::string& vertex, const std::string& fragment) {
|
|||
file.open(fragment);
|
||||
if (file.fail()) {
|
||||
Log("fragment shader %s load failed", fragment.c_str());
|
||||
throw std::runtime_error("fragment shader load failed");
|
||||
FATAL_ERROR("fragment shader load failed");
|
||||
}
|
||||
std::string fragmentCode((std::istreambuf_iterator<char>(file)),
|
||||
std::istreambuf_iterator<char>());
|
||||
|
@ -88,8 +88,8 @@ void setShaderOrtho() {
|
|||
void Renderer::Init() {
|
||||
createWhiteTexture();
|
||||
initRenderContext();
|
||||
initShader("./assets/shaders/vertex.shader",
|
||||
"./assets/shaders/fragment.shader");
|
||||
initShader("assets/shaders/vertex.shader",
|
||||
"assets/shaders/fragment.shader");
|
||||
setShaderOrtho();
|
||||
}
|
||||
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
#pragma once
|
||||
|
||||
#include "tinyengine/libmath.hpp"
|
||||
#include "tinyengine/tool.hpp"
|
||||
|
||||
#define TEST_TRUE(condition) do { \
|
||||
if (!(condition)) { \
|
||||
std::cout << "[TEST_TRUE] " << #condition << " test failed!" << std::endl; \
|
||||
throw std::runtime_error("TEST TRUE failed"); \
|
||||
FATAL_ERROR("TEST TRUE failed"); \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
#define TEST_FALSE(condition) do { \
|
||||
if (condition) { \
|
||||
std::cout << "[TEST FALSE] " << #condition << " test failed!" << std::endl; \
|
||||
throw std::runtime_error("TEST FALSE failed"); \
|
||||
FATAL_ERROR("TEST FALSE failed"); \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
|
|
Reference in New Issue