Skip to content

Commit 230060f

Browse files
committed
SDL: added cmake build scripts for use with clion (free version)
1 parent bd05aac commit 230060f

File tree

2 files changed

+222
-0
lines changed

2 files changed

+222
-0
lines changed

CMakeLists.txt

Lines changed: 191 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,191 @@
1+
# SmallBASIC
2+
# Copyright(C) 2025 Chris Warren-Smith.
3+
#
4+
# This program is distributed under the terms of the GPL v2.0 or later
5+
# Download the GNU Public License (GPL) from www.gnu.org
6+
#
7+
8+
set(VERSION "12.29")
9+
cmake_minimum_required(VERSION 3.10)
10+
project(SmallBASIC_SDL VERSION ${VERSION} LANGUAGES C CXX)
11+
12+
set(CMAKE_CXX_STANDARD 14)
13+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
14+
15+
find_package(SDL3 REQUIRED)
16+
17+
function(writeConfig)
18+
execute_process(
19+
COMMAND date +"%a, %d %b %Y"
20+
OUTPUT_VARIABLE BUILD_DATE
21+
OUTPUT_STRIP_TRAILING_WHITESPACE
22+
)
23+
set(BUILD_DATE "${BUILD_DATE}")
24+
25+
execute_process(
26+
COMMAND bash -c "awk -F '.' '{printf \"0x%02d%02d%02d\", \$1, \$2, \$3}' <<< \"${VERSION}\""
27+
OUTPUT_VARIABLE SB_DWORD_VER
28+
OUTPUT_STRIP_TRAILING_WHITESPACE
29+
)
30+
set(SB_DWORD_VER "${SB_DWORD_VER}")
31+
32+
configure_file(
33+
${CMAKE_SOURCE_DIR}/ide/config.h.in
34+
${CMAKE_BINARY_DIR}/config.h
35+
)
36+
endfunction()
37+
38+
function(buildSDL)
39+
# Initialize variables
40+
set(TARGET "Building SDL version.")
41+
set(PACKAGE_CFLAGS "")
42+
set(PACKAGE_LIBS "")
43+
44+
# check dependencies using pkg-config
45+
find_package(PkgConfig REQUIRED)
46+
47+
pkg_check_modules(SDL3 REQUIRED sdl3)
48+
include_directories(${SDL3_INCLUDE_DIRS})
49+
add_compile_options(${SDL3_CFLAGS_OTHER})
50+
51+
pkg_check_modules(FREETYPE2 REQUIRED freetype2)
52+
include_directories(${FREETYPE2_INCLUDE_DIRS})
53+
add_compile_options(${FREETYPE2_CFLAGS_OTHER})
54+
55+
# check for xxd command
56+
find_program(XXD_EXECUTABLE xxd)
57+
if(NOT XXD_EXECUTABLE)
58+
message(FATAL_ERROR "xxd command not installed: configure failed.")
59+
endif()
60+
61+
# platform-specific configurations
62+
if(WIN32)
63+
set(PACKAGE_CFLAGS "${PACKAGE_CFLAGS} -D__USE_MINGW_ANSI_STDIO")
64+
add_compile_definitions(_USE_MATH_DEFINES)
65+
add_compile_definitions(_Win32)
66+
set(PACKAGE_LIBS "${PACKAGE_LIBS} -lwsock32 -lws2_32 -static-libgcc -static-libstdc++")
67+
elseif(APPLE)
68+
pkg_check_modules(FONTCONFIG REQUIRED fontconfig>=2.2)
69+
set(PACKAGE_CFLAGS "${PACKAGE_CFLAGS} ${FONTCONFIG_CFLAGS}")
70+
set(PACKAGE_LIBS "${PACKAGE_LIBS} -ldl ${FONTCONFIG_LIBS}")
71+
else()
72+
pkg_check_modules(FONTCONFIG REQUIRED fontconfig>=2.2)
73+
include_directories(${FONTCONFIG_INCLUDE_DIRS})
74+
add_compile_options(${FONTCONFIG_CFLAGS_OTHER})
75+
execute_process(
76+
COMMAND ${XXD_EXECUTABLE} -i images/sb-desktop-128x128.png
77+
OUTPUT_FILE ${CMAKE_BINARY_DIR}/src/platform/sdl/icon.h
78+
)
79+
endif()
80+
81+
# Set compiler flags
82+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${PACKAGE_CFLAGS}")
83+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti -std=c++14")
84+
85+
# Define SDL version
86+
execute_process(
87+
COMMAND pkg-config --modversion sdl3
88+
OUTPUT_VARIABLE _SDL_VERSION
89+
OUTPUT_STRIP_TRAILING_WHITESPACE
90+
)
91+
92+
# message("SDL version: ${_SDL_VERSION}")
93+
set(BUILD_DATE `date +"%a, %d %b %Y"`)
94+
set(_SDL_VERSION ${_SDL_VERSION})
95+
set(_SDL ON)
96+
set(_UnixOS ON)
97+
set(IMPL_DEV_READ ON)
98+
set(IMPL_LOG_WRITE ON)
99+
100+
# Process assets
101+
execute_process(
102+
COMMAND ${XXD_EXECUTABLE} -i src/platform/android/app/src/main/assets/main.bas
103+
OUTPUT_FILE ${CMAKE_BINARY_DIR}/src/platform/sdl/main_bas.h
104+
)
105+
writeConfig()
106+
endfunction()
107+
108+
buildSDL()
109+
110+
set(COMMON_DIR ${CMAKE_SOURCE_DIR}/src/common)
111+
set(LIB_DIR ${CMAKE_SOURCE_DIR}/src/lib)
112+
set(UI_DIR ${CMAKE_SOURCE_DIR}/src/ui)
113+
set(SDL_DIR ${CMAKE_SOURCE_DIR}/src/platform/sdl)
114+
115+
set(SOURCES
116+
${LIB_DIR}/match.c
117+
${LIB_DIR}/str.c
118+
${LIB_DIR}/matrix.c
119+
${LIB_DIR}/xpm.c
120+
${LIB_DIR}/lodepng/lodepng.cpp
121+
${COMMON_DIR}/bc.c
122+
${COMMON_DIR}/blib.c
123+
${COMMON_DIR}/blib_func.c
124+
${COMMON_DIR}/blib_math.c
125+
${COMMON_DIR}/brun.c
126+
${COMMON_DIR}/ceval.c
127+
${COMMON_DIR}/random.c
128+
${COMMON_DIR}/eval.c
129+
${COMMON_DIR}/plugins.c
130+
${COMMON_DIR}/fmt.c
131+
${COMMON_DIR}/kw.c
132+
${COMMON_DIR}/proc.c
133+
${COMMON_DIR}/sberr.c
134+
${COMMON_DIR}/scan.c
135+
${COMMON_DIR}/str.c
136+
${COMMON_DIR}/tasks.c
137+
${COMMON_DIR}/hashmap.c
138+
${COMMON_DIR}/var_map.c
139+
${COMMON_DIR}/var_eval.c
140+
${COMMON_DIR}/keymap.c
141+
${COMMON_DIR}/units.c
142+
${COMMON_DIR}/var.c
143+
${COMMON_DIR}/device.c
144+
${COMMON_DIR}/blib_db.c
145+
${COMMON_DIR}/blib_graph.c
146+
${COMMON_DIR}/blib_sound.c
147+
${COMMON_DIR}/screen.c
148+
${COMMON_DIR}/system.c
149+
${COMMON_DIR}/random.c
150+
${COMMON_DIR}/eval.c
151+
${COMMON_DIR}/file.c
152+
${COMMON_DIR}/ffill.c
153+
${COMMON_DIR}/fs_serial.c
154+
${COMMON_DIR}/fs_socket_client.c
155+
${COMMON_DIR}/fs_stream.c
156+
${COMMON_DIR}/g_line.c
157+
${COMMON_DIR}/geom.c
158+
${COMMON_DIR}/inet2.c
159+
${COMMON_DIR}/pfill.c
160+
${COMMON_DIR}/plot.c
161+
${UI_DIR}/graphics.cpp
162+
${UI_DIR}/ansiwidget.cpp
163+
${UI_DIR}/window.cpp
164+
${UI_DIR}/screen.cpp
165+
${UI_DIR}/system.cpp
166+
${UI_DIR}/form.cpp
167+
${UI_DIR}/inputs.cpp
168+
${UI_DIR}/textedit.cpp
169+
${UI_DIR}/keypad.cpp
170+
${UI_DIR}/image.cpp
171+
${UI_DIR}/strlib.cpp
172+
${UI_DIR}/audio.cpp
173+
${SDL_DIR}/main.cpp
174+
${SDL_DIR}/display.cpp
175+
${SDL_DIR}/runtime.cpp
176+
${SDL_DIR}/settings.cpp
177+
${SDL_DIR}/editor.cpp
178+
${SDL_DIR}/syswm.cpp
179+
)
180+
181+
include_directories(
182+
${SDL3_INCLUDE_DIRS}
183+
${CMAKE_SOURCE_DIR}/src
184+
${CMAKE_BINARY_DIR}
185+
)
186+
187+
add_executable(sbasicg ${SOURCES})
188+
189+
target_link_libraries(sbasicg ${SDL3_LIBRARIES} m)
190+
target_link_libraries(sbasicg ${FREETYPE2_LIBRARIES})
191+
target_link_libraries(sbasicg ${FONTCONFIG_LIBRARIES})

ide/config.h.in

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// This file is part of SmallBASIC
2+
//
3+
// SmallBASIC module header
4+
//
5+
// This program is distributed under the terms of the GPL v2.0 or later
6+
// Download the GNU Public License (GPL) from www.gnu.org
7+
//
8+
// Copyright(C) 2025 Chris Warren-Smith
9+
10+
#ifndef _INC_CONFIG_H
11+
#define _INC_CONFIG_H
12+
13+
#ifdef __cplusplus
14+
extern "C" {
15+
#endif
16+
17+
#cmakedefine01 _SDL
18+
#cmakedefine01 _UnixOS
19+
#cmakedefine01 IMPL_DEV_READ
20+
#cmakedefine01 IMPL_LOG_WRITE
21+
22+
#cmakedefine _SDL_VERSION "@_SDL_VERSION@"
23+
#cmakedefine VERSION "@VERSION@"
24+
#cmakedefine BUILD_DATE @BUILD_DATE@
25+
#cmakedefine SB_DWORD_VER @SB_DWORD_VER@
26+
27+
#ifdef __cplusplus
28+
}
29+
#endif
30+
31+
#endif

0 commit comments

Comments
 (0)