# Creating Binary Modules: Premake

- **İngilizce aslı:** https://wiki.facepunch.com/gmod/Creating_Binary_Modules:_Premake
- **Çeviri tarihi:** 2025-09-08

İkili modüller, C++ kullanarak Lua'nın işlevselliğini genişletmenize olanak tanır.

Bu sayfa, **Premake kullanarak** ikili modülleri derlemek için IDE'nizi nasıl kuracağınızı öğretecektir.

Kurulum tamamlandıktan sonra C Lua API ile etkileşim konusunda yardım için [C Lua: Fonksiyonlar](https://gmod.tr/wiki/C_Lua:_Functions) sayfasına bakın.

## Bağımlılıklar

- Windows: [Visual Studio 2015, Visual Studio 2017 veya Visual Studio 2019](https://visualstudio.microsoft.com/vs/older-downloads/) ([Visual Studio 2022](https://visualstudio.microsoft.com/vs/) bende herhangi bir soruna yol açmadı)
- Linux: [GCC](https://gcc.gnu.org/releases.html) (Eğer dağıtımınız `apt` destekliyorsa `sudo apt install build-essential` komutuna dahildir)
- macOS: [Xcode](https://apps.apple.com/us/app/xcode/id497799835) (**GCC derleyicisini** kullanın) (Test edilmedi)
- [garrysmod_common](https://github.com/danielga/garrysmod_common) deposunun bir kopyası
- [Premake5 ikili dosyaları](https://github.com/premake/premake-core/releases/tag/v5.0.0-beta7)
- [Git](https://git-scm.com/downloads)

## Proje Kurulumu

- Yeni bir klasör oluşturun ve istediğiniz gibi adlandırın. Bu, projenizin ana klasörü olacaktır. Gelecekte erişebileceğiniz bir yere koyun.
- Yeni proje klasörüne gidin ve `git clone https://github.com/danielga/garrysmod_common.git` yazın. Ardından projede bir garrysmod_common klasörü görmelisiniz.
- `garrysmod_common` klasörüne gidin, ardından `git submodule update --init --recursive` yazın. Bu işlem tamamlandıktan sonra tekrar proje klasörüne gidin.
- Premake5 ikili dosyalarını proje klasörüne bırakın.
- `premake5.lua` adında bir dosya oluşturun ve aşağıdakini içine yapıştırın:

  - Eğer sadece sunucu tarafı ikili dosyaları oluşturmak istiyorsanız, `serverside = false` yazan bölümü silebilirsiniz.
  - `CreateWorkspace({name = "example"` kısmındaki adı kendi proje adınızla değiştirin, örn. `name = "myprojectname"`

```lua
PROJECT_GENERATOR_VERSION = 2

newoption({
	trigger = "gmcommon",
	description = "Sets the path to the garrysmod_common (https://github.com/danielga/garrysmod_common) directory",
	value = "../garrysmod_common"
})

local gmcommon = assert(_OPTIONS.gmcommon or os.getenv("GARRYSMOD_COMMON"),
	"you didn't provide a path to your garrysmod_common (https://github.com/danielga/garrysmod_common) directory")
include(gmcommon)

CreateWorkspace({name = "example", abi_compatible = false, path = "projects/" .. os.target() .. "/" .. _ACTION})
	CreateProject({serverside = true, source_path = "source", manual_files = false})
		IncludeLuaShared()
		IncludeScanning()
		IncludeDetouring()
		IncludeSDKCommon()
		IncludeSDKTier0()
		IncludeSDKTier1()

	CreateProject({serverside = false, source_path = "source", manual_files = true})
		IncludeLuaShared()
		IncludeScanning()
		IncludeDetouring()
		IncludeSDKCommon()
		IncludeSDKTier0()
		IncludeSDKTier1()

		filter("system:windows")
			files({"source/win32/*.cpp", "source/win32/*.hpp"})

		filter("system:linux or macosx")
			files({"source/posix/*.cpp", "source/posix/*.hpp"})
```

- `source` adında bir klasör oluşturun ve içine `module.cpp` adında boş bir dosya yerleştirin. [Bu dosyanın içeriğini kopyalayıp içine yapıştırın.](https://github.com/Facepunch/gmod-module-base/blob/development/examples/HelloWorld/HelloWorld.cpp).

Proje klasörünüz şöyle görünmelidir:

![explorer_ASnJkJMn31.png](https://gmod.tr/api/uploads/wiki/774f969ffc94a05e9067.png)

Sisteminizin komut isteminde, proje klasörüne gidin ve aşağıdakileri çalıştırın:

- Windows: `premake5.exe --os=windows --gmcommon=./garrysmod_common vs2022` (vs2022'yi kendi Visual Studio sürümünüzle değiştirin, örn. vs2019)
- Linux: `./premake5 --os=linux --gmcommon=./garrysmod_common gmake2`
- macOS: `./premake5 --os=macosx --gmcommon=./garrysmod_common xcode4`

Bu, bir `projects` klasörü oluşturacaktır; bu klasöre gitmeli ve çalışmaya başlamalısınız. Eğer Visual Studio kullanıyorsanız, çözüm dosyanız (solution file) burada olacaktır.

## Adlandırma ve Konum

Modül dosyaları garrysmod/lua/bin/ klasörüne yerleştirilmelidir.

İsimler, platforma ve Lua alanına (realm) göre farklılık gösterir.

| Dosya adı | Taraf | require(ad) | Platform |
|---|---|---|---|
| `gmsv_example_win32.dll` | Sunucu | example | Windows x32 |
| `gmcl_example_win32.dll` | İstemci | example | Windows x32 |
| `gmsv_example_win64.dll` | Sunucu | example | Windows x64 (`x86-64` branch'ı gereklidir) |
| `gmcl_example_win64.dll` | İstemci | example | Windows x64 (`x86-64` branch'ı gereklidir) |
| `gmsv_example_osx.dll` | Sunucu | example | OSX (aslında bir `.so` dosyasıdır, sadece yeniden adlandırılmıştır) |
| `gmcl_example_osx.dll` | İstemci | example | OSX (aslında bir `.so` dosyasıdır, sadece yeniden adlandırılmıştır) |
| `gmsv_example_linux.dll` | Sunucu | example | Linux x32 (aslında bir `.so` dosyasıdır, sadece yeniden adlandırılmıştır) |
| `gmcl_example_linux.dll` | İstemci | example | Linux x32 (aslında bir `.so` dosyasıdır, sadece yeniden adlandırılmıştır) |
| `gmsv_example_linux64.dll` | Sunucu | example | Linux x64 (aslında bir `.so` dosyasıdır, sadece yeniden adlandırılmıştır; `x86-64` branch'ı gereklidir) |
| `gmcl_example_linux64.dll` | İstemci | example | Linux x64 (aslında bir `.so` dosyasıdır, sadece yeniden adlandırılmıştır; `x86-64` branch'ı gereklidir) |

> **NOT:** Menü durumu modülleri `gmsv_ad_platform.dll` altında kategorize edilir

- [GMod Wiki ana sayfası](https://gmod.tr/wiki)

---

[Tüm sunucular](https://gmod.tr/) · [GmodTR Launcher](https://gmod.tr/launcher) · [Rehber](https://gmod.tr/rehber) · [GMod Wiki](https://gmod.tr/wiki) · [GmodTR nedir?](https://gmod.tr/hakkinda) · [Sunucu ekle](https://gmod.tr/sunucu-ekle) · [Discord](https://discord.gg/gmodtr)

Kaynak: https://gmod.tr/wiki/Creating_Binary_Modules:_Premake
