Clean up cmake files (Part 2)

I've kept just one cmake project, in the root directory. The
subdirectories just set up the targets.

The asm compiler is serached just one time, from the root
directory cmake file.

Global compilation flags are set in the root cmake file, and
each subdirectory cmake file sets specific flags if necessary
(e.g., programs need the -u_start specified)
This commit is contained in:
Enrico Fraccaroli (Galfurian)
2024-01-17 13:34:32 +01:00
parent 0b75cd9c2a
commit eca55dfed8
6 changed files with 500 additions and 687 deletions
+67 -138
View File
@@ -1,148 +1,77 @@
# =============================================================================
# Author: Enrico Fraccaroli
# LIBRARY
# =============================================================================
# Set the minimum required version of cmake.
cmake_minimum_required(VERSION 3.1...3.22)
# Initialize the project.
project(libc C ASM)
# =============================================================================
# ASSEMBLY
# =============================================================================
# Enable the assembly language.
enable_language(ASM)
# Find the NASM compiler.
find_program(ASM_COMPILER NAMES nasm HINTS /usr/bin/ /usr/local/bin/)
# Mark the variable ASM_COMPILER as advanced.
mark_as_advanced(ASM_COMPILER)
# Check that we have found the compiler.
if(NOT ASM_COMPILER)
message(FATAL_ERROR "ASM compiler not found!")
endif(NOT ASM_COMPILER)
# Set the asm compiler.
set(CMAKE_ASM_COMPILER ${ASM_COMPILER})
# Set the assembly compiler flags.
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
set(CMAKE_ASM_COMPILE_OBJECT "<CMAKE_ASM_COMPILER> -f elf -g -O0 -F dwarf -o <OBJECT> <SOURCE>")
else()
set(CMAKE_ASM_COMPILE_OBJECT "<CMAKE_ASM_COMPILER> -f elf -g -O3 -o <OBJECT> <SOURCE>")
endif()
# =============================================================================
# C WARNINGs
# =============================================================================
# Warning flags.
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wpedantic")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pedantic-errors")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wshadow")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99")
# Disable some specific warnings.
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-function")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-variable")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unknown-pragmas")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-missing-braces")
# Set the compiler options.
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -static")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -nostdlib")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -nostdinc")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-builtin")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-stack-protector")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-pic")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fomit-frame-pointer")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=i686")
if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 10)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fcommon")
endif()
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g3")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ggdb")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0")
elseif(CMAKE_BUILD_TYPE STREQUAL "Release")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3")
endif(CMAKE_BUILD_TYPE STREQUAL "Debug")
# =============================================================================
# Add the library.
add_library(
${PROJECT_NAME}
${PROJECT_SOURCE_DIR}/src/stdio.c
${PROJECT_SOURCE_DIR}/src/ctype.c
${PROJECT_SOURCE_DIR}/src/string.c
${PROJECT_SOURCE_DIR}/src/stdlib.c
${PROJECT_SOURCE_DIR}/src/math.c
${PROJECT_SOURCE_DIR}/src/fcvt.c
${PROJECT_SOURCE_DIR}/src/time.c
${PROJECT_SOURCE_DIR}/src/strerror.c
${PROJECT_SOURCE_DIR}/src/termios.c
${PROJECT_SOURCE_DIR}/src/libgen.c
${PROJECT_SOURCE_DIR}/src/vsprintf.c
${PROJECT_SOURCE_DIR}/src/vscanf.c
${PROJECT_SOURCE_DIR}/src/pwd.c
${PROJECT_SOURCE_DIR}/src/grp.c
${PROJECT_SOURCE_DIR}/src/sched.c
${PROJECT_SOURCE_DIR}/src/readline.c
${PROJECT_SOURCE_DIR}/src/setenv.c
${PROJECT_SOURCE_DIR}/src/assert.c
${PROJECT_SOURCE_DIR}/src/abort.c
${PROJECT_SOURCE_DIR}/src/io/mm_io.c
${PROJECT_SOURCE_DIR}/src/io/debug.c
${PROJECT_SOURCE_DIR}/src/sys/ipc.c
${PROJECT_SOURCE_DIR}/src/sys/unistd.c
${PROJECT_SOURCE_DIR}/src/sys/errno.c
${PROJECT_SOURCE_DIR}/src/sys/utsname.c
${PROJECT_SOURCE_DIR}/src/sys/mman.c
${PROJECT_SOURCE_DIR}/src/sys/ioctl.c
${PROJECT_SOURCE_DIR}/src/unistd/creat.c
${PROJECT_SOURCE_DIR}/src/unistd/getppid.c
${PROJECT_SOURCE_DIR}/src/unistd/getpid.c
${PROJECT_SOURCE_DIR}/src/unistd/exit.c
${PROJECT_SOURCE_DIR}/src/unistd/setsid.c
${PROJECT_SOURCE_DIR}/src/unistd/getsid.c
${PROJECT_SOURCE_DIR}/src/unistd/setpgid.c
${PROJECT_SOURCE_DIR}/src/unistd/getpgid.c
${PROJECT_SOURCE_DIR}/src/unistd/setgid.c
${PROJECT_SOURCE_DIR}/src/unistd/getgid.c
${PROJECT_SOURCE_DIR}/src/unistd/setuid.c
${PROJECT_SOURCE_DIR}/src/unistd/getuid.c
${PROJECT_SOURCE_DIR}/src/unistd/fork.c
${PROJECT_SOURCE_DIR}/src/unistd/read.c
${PROJECT_SOURCE_DIR}/src/unistd/write.c
${PROJECT_SOURCE_DIR}/src/unistd/exec.c
${PROJECT_SOURCE_DIR}/src/unistd/nice.c
${PROJECT_SOURCE_DIR}/src/unistd/open.c
${PROJECT_SOURCE_DIR}/src/unistd/reboot.c
${PROJECT_SOURCE_DIR}/src/unistd/waitpid.c
${PROJECT_SOURCE_DIR}/src/unistd/chdir.c
${PROJECT_SOURCE_DIR}/src/unistd/getcwd.c
${PROJECT_SOURCE_DIR}/src/unistd/close.c
${PROJECT_SOURCE_DIR}/src/unistd/stat.c
${PROJECT_SOURCE_DIR}/src/unistd/rmdir.c
${PROJECT_SOURCE_DIR}/src/unistd/mkdir.c
${PROJECT_SOURCE_DIR}/src/unistd/unlink.c
${PROJECT_SOURCE_DIR}/src/unistd/getdents.c
${PROJECT_SOURCE_DIR}/src/unistd/lseek.c
${PROJECT_SOURCE_DIR}/src/unistd/kill.c
${PROJECT_SOURCE_DIR}/src/unistd/signal.c
${PROJECT_SOURCE_DIR}/src/unistd/interval.c
${PROJECT_SOURCE_DIR}/src/unistd/symlink.c
${PROJECT_SOURCE_DIR}/src/unistd/readlink.c
${PROJECT_SOURCE_DIR}/src/libc_start.c
${PROJECT_SOURCE_DIR}/src/crt0.S
libc
${CMAKE_SOURCE_DIR}/libc/src/stdio.c
${CMAKE_SOURCE_DIR}/libc/src/ctype.c
${CMAKE_SOURCE_DIR}/libc/src/string.c
${CMAKE_SOURCE_DIR}/libc/src/stdlib.c
${CMAKE_SOURCE_DIR}/libc/src/math.c
${CMAKE_SOURCE_DIR}/libc/src/fcvt.c
${CMAKE_SOURCE_DIR}/libc/src/time.c
${CMAKE_SOURCE_DIR}/libc/src/strerror.c
${CMAKE_SOURCE_DIR}/libc/src/termios.c
${CMAKE_SOURCE_DIR}/libc/src/libgen.c
${CMAKE_SOURCE_DIR}/libc/src/vsprintf.c
${CMAKE_SOURCE_DIR}/libc/src/vscanf.c
${CMAKE_SOURCE_DIR}/libc/src/pwd.c
${CMAKE_SOURCE_DIR}/libc/src/grp.c
${CMAKE_SOURCE_DIR}/libc/src/sched.c
${CMAKE_SOURCE_DIR}/libc/src/readline.c
${CMAKE_SOURCE_DIR}/libc/src/setenv.c
${CMAKE_SOURCE_DIR}/libc/src/assert.c
${CMAKE_SOURCE_DIR}/libc/src/abort.c
${CMAKE_SOURCE_DIR}/libc/src/io/mm_io.c
${CMAKE_SOURCE_DIR}/libc/src/io/debug.c
${CMAKE_SOURCE_DIR}/libc/src/sys/ipc.c
${CMAKE_SOURCE_DIR}/libc/src/sys/unistd.c
${CMAKE_SOURCE_DIR}/libc/src/sys/errno.c
${CMAKE_SOURCE_DIR}/libc/src/sys/utsname.c
${CMAKE_SOURCE_DIR}/libc/src/sys/mman.c
${CMAKE_SOURCE_DIR}/libc/src/sys/ioctl.c
${CMAKE_SOURCE_DIR}/libc/src/unistd/creat.c
${CMAKE_SOURCE_DIR}/libc/src/unistd/getppid.c
${CMAKE_SOURCE_DIR}/libc/src/unistd/getpid.c
${CMAKE_SOURCE_DIR}/libc/src/unistd/exit.c
${CMAKE_SOURCE_DIR}/libc/src/unistd/setsid.c
${CMAKE_SOURCE_DIR}/libc/src/unistd/getsid.c
${CMAKE_SOURCE_DIR}/libc/src/unistd/setpgid.c
${CMAKE_SOURCE_DIR}/libc/src/unistd/getpgid.c
${CMAKE_SOURCE_DIR}/libc/src/unistd/setgid.c
${CMAKE_SOURCE_DIR}/libc/src/unistd/getgid.c
${CMAKE_SOURCE_DIR}/libc/src/unistd/setuid.c
${CMAKE_SOURCE_DIR}/libc/src/unistd/getuid.c
${CMAKE_SOURCE_DIR}/libc/src/unistd/fork.c
${CMAKE_SOURCE_DIR}/libc/src/unistd/read.c
${CMAKE_SOURCE_DIR}/libc/src/unistd/write.c
${CMAKE_SOURCE_DIR}/libc/src/unistd/exec.c
${CMAKE_SOURCE_DIR}/libc/src/unistd/nice.c
${CMAKE_SOURCE_DIR}/libc/src/unistd/open.c
${CMAKE_SOURCE_DIR}/libc/src/unistd/reboot.c
${CMAKE_SOURCE_DIR}/libc/src/unistd/waitpid.c
${CMAKE_SOURCE_DIR}/libc/src/unistd/chdir.c
${CMAKE_SOURCE_DIR}/libc/src/unistd/getcwd.c
${CMAKE_SOURCE_DIR}/libc/src/unistd/close.c
${CMAKE_SOURCE_DIR}/libc/src/unistd/stat.c
${CMAKE_SOURCE_DIR}/libc/src/unistd/rmdir.c
${CMAKE_SOURCE_DIR}/libc/src/unistd/mkdir.c
${CMAKE_SOURCE_DIR}/libc/src/unistd/unlink.c
${CMAKE_SOURCE_DIR}/libc/src/unistd/getdents.c
${CMAKE_SOURCE_DIR}/libc/src/unistd/lseek.c
${CMAKE_SOURCE_DIR}/libc/src/unistd/kill.c
${CMAKE_SOURCE_DIR}/libc/src/unistd/signal.c
${CMAKE_SOURCE_DIR}/libc/src/unistd/interval.c
${CMAKE_SOURCE_DIR}/libc/src/unistd/symlink.c
${CMAKE_SOURCE_DIR}/libc/src/unistd/readlink.c
${CMAKE_SOURCE_DIR}/libc/src/libc_start.c
${CMAKE_SOURCE_DIR}/libc/src/crt0.S
)
# Add the includes.
target_include_directories(${PROJECT_NAME} PUBLIC inc)
target_include_directories(libc PUBLIC inc)
# Remove the 'lib' prefix.
set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "")
set_target_properties(libc PROPERTIES PREFIX "")